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

@@ -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> {