Trying to remove intermittent ext test failure (#7330)

* Trying to remove intermittent ext test failure

* taking PR comments
This commit is contained in:
Udeesha Gautam
2019-09-23 19:52:05 -07:00
committed by GitHub
parent 2ec4a0c8a8
commit d895de0bc1
4 changed files with 42 additions and 15 deletions

View File

@@ -59,7 +59,7 @@ if (context.RunTest) {
assert(extractResult.success === true && extractResult.errorMessage === '', `Extract dacpac should succeed. Expected: there should be no error. Actual Error message: "${extractResult.errorMessage}"`);
} finally {
await utils.deleteDB(databaseName, ownerUri);
await utils.deleteDB(server, databaseName, ownerUri);
}
});
@@ -94,7 +94,7 @@ if (context.RunTest) {
await utils.assertFileGenerationResult(packageFilePath, retryCount);
assert(exportResult.success === true && exportResult.errorMessage === '', `Expected: Export bacpac should succeed and there should be no error. Actual Error message: "${exportResult.errorMessage}"`);
} finally {
await utils.deleteDB(databaseName, ownerUri);
await utils.deleteDB(server, databaseName, ownerUri);
}
});
});

View File

@@ -160,7 +160,7 @@ class ObjectExplorerTester {
assert(expectedActions.length === actions.length && expectedString === actualString, `Expected actions: "${expectedString}", Actual actions: "${actualString}"`);
}
finally {
await deleteDB(dbName, ownerUri);
await deleteDB(server, dbName, ownerUri);
}
}
}

View File

@@ -179,8 +179,8 @@ class SchemaCompareTester {
fs.unlinkSync(filepath);
}
finally {
await utils.deleteDB(sourceDB, ownerUri);
await utils.deleteDB(targetDB, ownerUri);
await utils.deleteDB(server, sourceDB, ownerUri);
await utils.deleteDB(server, targetDB, ownerUri);
}
}
@@ -249,7 +249,7 @@ class SchemaCompareTester {
assert(openScmpResult.targetEndpointInfo.databaseName === target.databaseName, `Expected: target database to be ${target.databaseName}, Actual: ${openScmpResult.targetEndpointInfo.databaseName}`);
}
finally {
await utils.deleteDB(targetDB, ownerUri);
await utils.deleteDB(server, targetDB, ownerUri);
}
}

View File

@@ -8,6 +8,7 @@ import * as azdata from 'azdata';
import * as vscode from 'vscode';
import * as fs from 'fs';
import { TestServerProfile } from './testConfig';
import { isNullOrUndefined } from 'util';
// default server connection timeout
export const DefaultConnectTimeoutInMs: number = 10000;
@@ -79,7 +80,6 @@ export async function sleep(ms: number): Promise<{}> {
}
export async function createDB(dbName: string, ownerUri: string): Promise<void> {
let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>('MSSQL', azdata.DataProviderType.QueryProvider);
let query = `BEGIN TRY
CREATE DATABASE ${dbName}
SELECT 1 AS NoError
@@ -88,12 +88,11 @@ export async function createDB(dbName: string, ownerUri: string): Promise<void>
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH`;
let dbcreatedResult = await queryProvider.runQueryAndReturn(ownerUri, query);
assert(dbcreatedResult.columnInfo[0].columnName !== 'ErrorMessage', 'DB creation threw error');
let dbCreatedResult = await this.runQuery(query, ownerUri);
assert(dbCreatedResult.columnInfo[0].columnName !== 'ErrorMessage', 'DB creation threw error');
}
export async function deleteDB(dbName: string, ownerUri: string): Promise<void> {
let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>('MSSQL', azdata.DataProviderType.QueryProvider);
export async function deleteDB(server: TestServerProfile, dbName: string, ownerUri: string): Promise<void> {
let query = `BEGIN TRY
ALTER DATABASE ${dbName}
SET OFFLINE
@@ -105,13 +104,41 @@ export async function deleteDB(dbName: string, ownerUri: string): Promise<void>
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH`;
await queryProvider.runQueryAndReturn(ownerUri, query);
ownerUri = await ensureServerConnected(server, ownerUri);
let dbDeleteResult = await this.runQuery(query, ownerUri);
assert(dbDeleteResult.columnInfo[0].columnName !== 'ErrorMessage', 'DB deletion threw error');
}
async function ensureServerConnected(server: TestServerProfile, ownerUri: string): Promise<string> {
try {
// The queries might fail if connection is removed
// Check if connection is present - if not create new connection and use OwnerUri from there
let connection = await azdata.connection.getConnection(ownerUri);
if (isNullOrUndefined(connection)) {
let connectionId = await connectToServer(server);
return azdata.connection.getUriForConnection(connectionId);
}
}
catch (ex) {
console.error('utils.ensureServerConnected : Failed to get or create connection');
console.error(ex); // not throwing here because it is a safety net and actual query will throw if failed.
}
return ownerUri;
}
export async function runQuery(query: string, ownerUri: string): Promise<azdata.SimpleExecuteResult> {
let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>('MSSQL', azdata.DataProviderType.QueryProvider);
let result = await queryProvider.runQueryAndReturn(ownerUri, query);
return result;
try {
let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>('MSSQL', azdata.DataProviderType.QueryProvider);
let result = await queryProvider.runQueryAndReturn(ownerUri, query);
return result;
}
catch (ex) {
console.error('utils.runQuery : Failed to run query');
console.error(ex);
throw ex;
}
}
export async function assertThrowsAsync(fn: () => Promise<any>, msg: string): Promise<void> {