mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Remove checks for integration testing (#9856)
* remove checks for testing * fix schema compare tests * move some files * fix file location * fixc another file path
This commit is contained in:
@@ -21,31 +21,6 @@
|
||||
"Microsoft.notebook",
|
||||
"Microsoft.azuredatastudio-postgresql"
|
||||
],
|
||||
"contributes": {
|
||||
"configuration": {
|
||||
"type": "object",
|
||||
"title": "ADS Integration Test Configuration",
|
||||
"properties": {
|
||||
"test.testSetupCompleted": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"command": "test.setupIntegrationTest",
|
||||
"title": "Setup Integration Test",
|
||||
"category": "Test"
|
||||
},
|
||||
{
|
||||
"command": "test.waitForExtensionsToLoad",
|
||||
"title": "Wait For Extensions To Load",
|
||||
"category": "Test"
|
||||
}
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:vscode-colorize-tests ./tsconfig.json",
|
||||
"postinstall": "node ./node_modules/vscode/bin/install"
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
export function isTestSetupCompleted(): boolean {
|
||||
return vscode.workspace.getConfiguration('test')['testSetupCompleted'];
|
||||
}
|
||||
@@ -7,11 +7,10 @@ import 'mocha';
|
||||
import * as vscode from 'vscode';
|
||||
import * as azdata from 'azdata';
|
||||
import * as mssql from '../../../mssql';
|
||||
import * as utils from '../utils';
|
||||
import * as uuid from '../uuid';
|
||||
import { isTestSetupCompleted } from '../testContext';
|
||||
import * as utils from './utils';
|
||||
import * as uuid from './uuid';
|
||||
import assert = require('assert');
|
||||
import { getStandaloneServer, TestServerProfile } from '../testConfig';
|
||||
import { getStandaloneServer, TestServerProfile } from './testConfig';
|
||||
|
||||
let cmsService: mssql.ICmsService;
|
||||
let server: TestServerProfile;
|
||||
@@ -23,143 +22,141 @@ const TEST_CMS_GROUP = `adsTestCmsGroup_${uuid.v4().asHex()}`;
|
||||
const TEST_CMS_SERVER = `adsTestCmsServer_${uuid.v4().asHex()}`;
|
||||
const TEST_CMS_REG_SERVER = `adsTestCmsRegisteredServer_${uuid.v4().asHex()}`;
|
||||
|
||||
if (isTestSetupCompleted()) {
|
||||
suite('CMS integration test suite', () => {
|
||||
suite('CMS integration test suite', () => {
|
||||
|
||||
setup(async function () {
|
||||
// Set up CMS provider
|
||||
if (!cmsService) {
|
||||
cmsService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).cmsService;
|
||||
assert(cmsService !== undefined);
|
||||
}
|
||||
setup(async function () {
|
||||
// Set up CMS provider
|
||||
if (!cmsService) {
|
||||
cmsService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).cmsService;
|
||||
assert(cmsService !== undefined);
|
||||
}
|
||||
|
||||
// Set up connection
|
||||
if (!server) {
|
||||
server = await getStandaloneServer();
|
||||
connectionId = await utils.connectToServer(server, SERVER_CONNECTION_TIMEOUT);
|
||||
ownerUri = await azdata.connection.getConnectionString(connectionId, true);
|
||||
console.log('Start CMS tests');
|
||||
}
|
||||
if (!ownerUri) {
|
||||
ownerUri = await azdata.connection.getConnectionString(connectionId, true);
|
||||
}
|
||||
});
|
||||
|
||||
test('Create CMS Server', async function () {
|
||||
// Should fail
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.createCmsServer(undefined, 'test_description', undefined, ownerUri),
|
||||
'Cannot add a CMS server without a name or connection');
|
||||
let connection = {
|
||||
serverName: server.serverName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationType: server.authenticationTypeName,
|
||||
database: server.database,
|
||||
provider: server.provider,
|
||||
version: server.version,
|
||||
engineType: server.engineType,
|
||||
options: {}
|
||||
};
|
||||
|
||||
// Should create a CMS Server without an error
|
||||
await cmsService.createCmsServer(TEST_CMS_NAME, 'test_description', connection, ownerUri);
|
||||
});
|
||||
|
||||
test('Add and delete registered group to/from CMS server', async function () {
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.addServerGroup(ownerUri, '', undefined, 'test_description'),
|
||||
'Cannot add a server group without a name');
|
||||
|
||||
// Should create a server group
|
||||
let result = await cmsService.addServerGroup(ownerUri, '', TEST_CMS_GROUP, 'test_description');
|
||||
assert(result === true, `Server group ${TEST_CMS_GROUP} was not added to CMS server successfully`);
|
||||
|
||||
let existingRegisteredServerGroupCount = (await cmsService.getRegisteredServers(ownerUri, '')).registeredServerGroups.length;
|
||||
|
||||
// Shouldn't be able to create a new server group with same name
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.addServerGroup(ownerUri, '', TEST_CMS_GROUP, 'test_description'),
|
||||
'Cannot add a server group with existing name');
|
||||
|
||||
let cmsResources = await cmsService.getRegisteredServers(ownerUri, '');
|
||||
assert(cmsResources.registeredServerGroups.length === existingRegisteredServerGroupCount,
|
||||
`Unexpected number of Registered Server Groups after attempting to add group that already exists. Groups : [${cmsResources.registeredServerGroups.map(g => g.name).join(', ')}]`);
|
||||
|
||||
// Should remove the server group we added above
|
||||
let deleteResult = await cmsService.removeServerGroup(ownerUri, '', TEST_CMS_GROUP);
|
||||
assert(deleteResult === true, `Server group ${TEST_CMS_GROUP} was not removed successfully`);
|
||||
|
||||
cmsResources = await cmsService.getRegisteredServers(ownerUri, '');
|
||||
assert(cmsResources.registeredServerGroups.find(g => g.name === TEST_CMS_GROUP) === undefined,
|
||||
`The server group ${TEST_CMS_GROUP} was not removed successfully. Groups : [${cmsResources.registeredServerGroups.map(g => g.name).join(', ')}]`);
|
||||
});
|
||||
|
||||
test('Add and delete registered server to/from CMS server', async function () {
|
||||
|
||||
await utils.assertThrowsAsync(
|
||||
async () => cmsService.addRegisteredServer(ownerUri, '', undefined, 'test_description', undefined),
|
||||
'Cannot add a registered without a name or connection');
|
||||
|
||||
let server = await getStandaloneServer('2019');
|
||||
let connection = {
|
||||
serverName: server.serverName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationType: server.authenticationTypeName,
|
||||
database: server.database,
|
||||
provider: server.provider,
|
||||
version: server.version,
|
||||
engineType: server.engineType,
|
||||
options: {}
|
||||
};
|
||||
|
||||
// Should create a registered server
|
||||
let result = await cmsService.addRegisteredServer(ownerUri, '', TEST_CMS_SERVER, 'test_description', connection);
|
||||
assert(result === true, `Registered server ${TEST_CMS_SERVER} was not added to CMS server successfully`);
|
||||
|
||||
// Shouldn't be able to create a new registered server with same name
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.addRegisteredServer(ownerUri, '', TEST_CMS_SERVER, 'test_description', connection),
|
||||
'Cannot add a registered server with existing name');
|
||||
|
||||
// Should remove the registered server we added above
|
||||
let deleteResult = await cmsService.removeRegisteredServer(ownerUri, '', TEST_CMS_SERVER);
|
||||
assert(deleteResult === true, `Registered server ${TEST_CMS_SERVER} was not removed correctly`);
|
||||
});
|
||||
|
||||
test('Add and delete registered server to/from server group', async function () {
|
||||
|
||||
// Should create a server group
|
||||
let result = await cmsService.addServerGroup(ownerUri, '', TEST_CMS_GROUP, 'test_description');
|
||||
assert(result === true, `Server group ${TEST_CMS_GROUP} was not created successfully`);
|
||||
|
||||
// Make sure server group is created
|
||||
let cmsResources = await cmsService.getRegisteredServers(ownerUri, '');
|
||||
assert(cmsResources.registeredServerGroups.find(g => g.name === TEST_CMS_GROUP),
|
||||
`Registered Server Group ${TEST_CMS_GROUP} was not found after being added. Groups : [${cmsResources.registeredServerGroups.map(g => g.name).join(', ')}]`);
|
||||
|
||||
// Should create a registered server under the group
|
||||
let server = await getStandaloneServer('2019');
|
||||
let connection = {
|
||||
serverName: server.serverName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationType: server.authenticationTypeName,
|
||||
database: server.database,
|
||||
provider: server.provider,
|
||||
version: server.version,
|
||||
engineType: server.engineType,
|
||||
options: {}
|
||||
};
|
||||
let relativePath = cmsResources.registeredServerGroups[0].relativePath;
|
||||
|
||||
result = await cmsService.addRegisteredServer(ownerUri, relativePath, TEST_CMS_REG_SERVER, 'test_description', connection);
|
||||
assert(result === true, `Registered server ${TEST_CMS_REG_SERVER} was not added to server group successfully`);
|
||||
|
||||
// Should remove the server group we added above
|
||||
let deleteResult = await cmsService.removeServerGroup(ownerUri, '', TEST_CMS_GROUP);
|
||||
assert(deleteResult === true, `Server group ${TEST_CMS_GROUP} was not deleted from CMS server successfully`);
|
||||
});
|
||||
// Set up connection
|
||||
if (!server) {
|
||||
server = await getStandaloneServer();
|
||||
connectionId = await utils.connectToServer(server, SERVER_CONNECTION_TIMEOUT);
|
||||
ownerUri = await azdata.connection.getConnectionString(connectionId, true);
|
||||
console.log('Start CMS tests');
|
||||
}
|
||||
if (!ownerUri) {
|
||||
ownerUri = await azdata.connection.getConnectionString(connectionId, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
test('Create CMS Server', async function () {
|
||||
// Should fail
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.createCmsServer(undefined, 'test_description', undefined, ownerUri),
|
||||
'Cannot add a CMS server without a name or connection');
|
||||
let connection = {
|
||||
serverName: server.serverName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationType: server.authenticationTypeName,
|
||||
database: server.database,
|
||||
provider: server.provider,
|
||||
version: server.version,
|
||||
engineType: server.engineType,
|
||||
options: {}
|
||||
};
|
||||
|
||||
// Should create a CMS Server without an error
|
||||
await cmsService.createCmsServer(TEST_CMS_NAME, 'test_description', connection, ownerUri);
|
||||
});
|
||||
|
||||
test('Add and delete registered group to/from CMS server', async function () {
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.addServerGroup(ownerUri, '', undefined, 'test_description'),
|
||||
'Cannot add a server group without a name');
|
||||
|
||||
// Should create a server group
|
||||
let result = await cmsService.addServerGroup(ownerUri, '', TEST_CMS_GROUP, 'test_description');
|
||||
assert(result === true, `Server group ${TEST_CMS_GROUP} was not added to CMS server successfully`);
|
||||
|
||||
let existingRegisteredServerGroupCount = (await cmsService.getRegisteredServers(ownerUri, '')).registeredServerGroups.length;
|
||||
|
||||
// Shouldn't be able to create a new server group with same name
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.addServerGroup(ownerUri, '', TEST_CMS_GROUP, 'test_description'),
|
||||
'Cannot add a server group with existing name');
|
||||
|
||||
let cmsResources = await cmsService.getRegisteredServers(ownerUri, '');
|
||||
assert(cmsResources.registeredServerGroups.length === existingRegisteredServerGroupCount,
|
||||
`Unexpected number of Registered Server Groups after attempting to add group that already exists. Groups : [${cmsResources.registeredServerGroups.map(g => g.name).join(', ')}]`);
|
||||
|
||||
// Should remove the server group we added above
|
||||
let deleteResult = await cmsService.removeServerGroup(ownerUri, '', TEST_CMS_GROUP);
|
||||
assert(deleteResult === true, `Server group ${TEST_CMS_GROUP} was not removed successfully`);
|
||||
|
||||
cmsResources = await cmsService.getRegisteredServers(ownerUri, '');
|
||||
assert(cmsResources.registeredServerGroups.find(g => g.name === TEST_CMS_GROUP) === undefined,
|
||||
`The server group ${TEST_CMS_GROUP} was not removed successfully. Groups : [${cmsResources.registeredServerGroups.map(g => g.name).join(', ')}]`);
|
||||
});
|
||||
|
||||
test('Add and delete registered server to/from CMS server', async function () {
|
||||
|
||||
await utils.assertThrowsAsync(
|
||||
async () => cmsService.addRegisteredServer(ownerUri, '', undefined, 'test_description', undefined),
|
||||
'Cannot add a registered without a name or connection');
|
||||
|
||||
let server = await getStandaloneServer('2019');
|
||||
let connection = {
|
||||
serverName: server.serverName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationType: server.authenticationTypeName,
|
||||
database: server.database,
|
||||
provider: server.provider,
|
||||
version: server.version,
|
||||
engineType: server.engineType,
|
||||
options: {}
|
||||
};
|
||||
|
||||
// Should create a registered server
|
||||
let result = await cmsService.addRegisteredServer(ownerUri, '', TEST_CMS_SERVER, 'test_description', connection);
|
||||
assert(result === true, `Registered server ${TEST_CMS_SERVER} was not added to CMS server successfully`);
|
||||
|
||||
// Shouldn't be able to create a new registered server with same name
|
||||
await utils.assertThrowsAsync(
|
||||
async () => await cmsService.addRegisteredServer(ownerUri, '', TEST_CMS_SERVER, 'test_description', connection),
|
||||
'Cannot add a registered server with existing name');
|
||||
|
||||
// Should remove the registered server we added above
|
||||
let deleteResult = await cmsService.removeRegisteredServer(ownerUri, '', TEST_CMS_SERVER);
|
||||
assert(deleteResult === true, `Registered server ${TEST_CMS_SERVER} was not removed correctly`);
|
||||
});
|
||||
|
||||
test('Add and delete registered server to/from server group', async function () {
|
||||
|
||||
// Should create a server group
|
||||
let result = await cmsService.addServerGroup(ownerUri, '', TEST_CMS_GROUP, 'test_description');
|
||||
assert(result === true, `Server group ${TEST_CMS_GROUP} was not created successfully`);
|
||||
|
||||
// Make sure server group is created
|
||||
let cmsResources = await cmsService.getRegisteredServers(ownerUri, '');
|
||||
assert(cmsResources.registeredServerGroups.find(g => g.name === TEST_CMS_GROUP),
|
||||
`Registered Server Group ${TEST_CMS_GROUP} was not found after being added. Groups : [${cmsResources.registeredServerGroups.map(g => g.name).join(', ')}]`);
|
||||
|
||||
// Should create a registered server under the group
|
||||
let server = await getStandaloneServer('2019');
|
||||
let connection = {
|
||||
serverName: server.serverName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationType: server.authenticationTypeName,
|
||||
database: server.database,
|
||||
provider: server.provider,
|
||||
version: server.version,
|
||||
engineType: server.engineType,
|
||||
options: {}
|
||||
};
|
||||
let relativePath = cmsResources.registeredServerGroups[0].relativePath;
|
||||
|
||||
result = await cmsService.addRegisteredServer(ownerUri, relativePath, TEST_CMS_REG_SERVER, 'test_description', connection);
|
||||
assert(result === true, `Registered server ${TEST_CMS_REG_SERVER} was not added to server group successfully`);
|
||||
|
||||
// Should remove the server group we added above
|
||||
let deleteResult = await cmsService.removeServerGroup(ownerUri, '', TEST_CMS_GROUP);
|
||||
assert(deleteResult === true, `Server group ${TEST_CMS_GROUP} was not deleted from CMS server successfully`);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5,114 +5,111 @@
|
||||
|
||||
import 'mocha';
|
||||
import * as azdata from 'azdata';
|
||||
import * as utils from '../utils';
|
||||
import * as utils from './utils';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as mssql from '../../../mssql';
|
||||
import * as vscode from 'vscode';
|
||||
import { isTestSetupCompleted } from '../testContext';
|
||||
import { getStandaloneServer } from '../testConfig';
|
||||
import { getStandaloneServer } from './testConfig';
|
||||
import * as assert from 'assert';
|
||||
import { promisify } from 'util';
|
||||
|
||||
const retryCount = 24; // 2 minutes
|
||||
const dacpac1: string = path.join(__dirname, '../testData/Database1.dacpac');
|
||||
if (isTestSetupCompleted()) {
|
||||
suite('Dacpac integration test suite', () => {
|
||||
suiteSetup(async function () {
|
||||
await utils.sleep(5000); // To ensure the providers are registered.
|
||||
console.log(`Start dacpac tests`);
|
||||
});
|
||||
|
||||
test('Deploy and extract dacpac', async function () {
|
||||
const server = await getStandaloneServer();
|
||||
await utils.connectToServer(server);
|
||||
|
||||
const nodes = <azdata.objectexplorer.ObjectExplorerNode[]>await azdata.objectexplorer.getActiveConnectionNodes();
|
||||
const index = nodes.findIndex(node => node.nodePath.includes(server.serverName));
|
||||
const ownerUri = await azdata.connection.getUriForConnection(nodes[index].connectionId);
|
||||
const now = new Date();
|
||||
const databaseName = 'ADS_deployDacpac_' + now.getTime().toString();
|
||||
|
||||
try {
|
||||
const dacfxService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).dacFx;
|
||||
assert(dacfxService, 'DacFx Service Provider is not available');
|
||||
|
||||
// Deploy dacpac
|
||||
const deployResult = await dacfxService.deployDacpac(dacpac1, databaseName, false, ownerUri, azdata.TaskExecutionMode.execute);
|
||||
await utils.assertDatabaseCreationResult(databaseName, ownerUri, retryCount);
|
||||
const dbConnectionId = await utils.connectToServer({
|
||||
serverName: server.serverName,
|
||||
database: databaseName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationTypeName: server.authenticationTypeName,
|
||||
providerName: server.providerName
|
||||
});
|
||||
const dbConnectionOwnerUri = await azdata.connection.getUriForConnection(dbConnectionId);
|
||||
await utils.assertTableCreationResult('dbo', 'Table1', dbConnectionOwnerUri, retryCount);
|
||||
await utils.assertTableCreationResult('dbo', 'Table2', dbConnectionOwnerUri, retryCount);
|
||||
assert(deployResult.success === true && deployResult.errorMessage === '', `Deploy dacpac should succeed Expected: there should be no error. Actual Error message: "${deployResult.errorMessage}"`);
|
||||
|
||||
// Extract dacpac
|
||||
const folderPath = path.join(os.tmpdir(), 'DacFxTest');
|
||||
if (!(await promisify(fs.exists)(folderPath))) {
|
||||
await fs.promises.mkdir(folderPath);
|
||||
}
|
||||
const packageFilePath = path.join(folderPath, `${databaseName}.dacpac`);
|
||||
const extractResult = await dacfxService.extractDacpac(databaseName, packageFilePath, databaseName, '1.0.0.0', ownerUri, azdata.TaskExecutionMode.execute);
|
||||
await utils.assertFileGenerationResult(packageFilePath, retryCount);
|
||||
|
||||
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(server, databaseName, ownerUri);
|
||||
}
|
||||
});
|
||||
|
||||
const bacpac1: string = path.join(__dirname, '..', 'testData', 'Database1.bacpac');
|
||||
test('Import and export bacpac', async function () {
|
||||
const server = await getStandaloneServer();
|
||||
await utils.connectToServer(server);
|
||||
|
||||
const nodes = <azdata.objectexplorer.ObjectExplorerNode[]>await azdata.objectexplorer.getActiveConnectionNodes();
|
||||
const index = nodes.findIndex(node => node.nodePath.includes(server.serverName));
|
||||
const ownerUri = await azdata.connection.getUriForConnection(nodes[index].connectionId);
|
||||
const now = new Date();
|
||||
const databaseName = 'ADS_importBacpac_' + now.getTime().toString();
|
||||
|
||||
try {
|
||||
let dacfxService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).dacFx;
|
||||
assert(dacfxService, 'DacFx Service Provider is not available');
|
||||
|
||||
// Import bacpac
|
||||
const importResult = await dacfxService.importBacpac(bacpac1, databaseName, ownerUri, azdata.TaskExecutionMode.execute);
|
||||
await utils.assertDatabaseCreationResult(databaseName, ownerUri, retryCount);
|
||||
const dbConnectionId = await utils.connectToServer({
|
||||
serverName: server.serverName,
|
||||
database: databaseName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationTypeName: server.authenticationTypeName,
|
||||
providerName: server.providerName
|
||||
});
|
||||
const dbConnectionOwnerUri = await azdata.connection.getUriForConnection(dbConnectionId);
|
||||
await utils.assertTableCreationResult('dbo', 'Table1', dbConnectionOwnerUri, retryCount, true);
|
||||
await utils.assertTableCreationResult('dbo', 'Table2', dbConnectionOwnerUri, retryCount, true);
|
||||
assert(importResult.success === true && importResult.errorMessage === '', `Expected: Import bacpac should succeed and there should be no error. Actual Error message: "${importResult.errorMessage}"`);
|
||||
|
||||
// Export bacpac
|
||||
const folderPath = path.join(os.tmpdir(), 'DacFxTest');
|
||||
if (!(await promisify(fs.exists)(folderPath))) {
|
||||
await fs.promises.mkdir(folderPath);
|
||||
}
|
||||
const packageFilePath = path.join(folderPath, `${databaseName}.bacpac`);
|
||||
const exportResult = await dacfxService.exportBacpac(databaseName, packageFilePath, ownerUri, azdata.TaskExecutionMode.execute);
|
||||
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(server, databaseName, ownerUri);
|
||||
}
|
||||
});
|
||||
const dacpac1: string = path.join(__dirname, '../../testData/Database1.dacpac');
|
||||
suite('Dacpac integration test suite', () => {
|
||||
suiteSetup(async function () {
|
||||
await utils.sleep(5000); // To ensure the providers are registered.
|
||||
console.log(`Start dacpac tests`);
|
||||
});
|
||||
}
|
||||
|
||||
test('Deploy and extract dacpac', async function () {
|
||||
const server = await getStandaloneServer();
|
||||
await utils.connectToServer(server);
|
||||
|
||||
const nodes = <azdata.objectexplorer.ObjectExplorerNode[]>await azdata.objectexplorer.getActiveConnectionNodes();
|
||||
const index = nodes.findIndex(node => node.nodePath.includes(server.serverName));
|
||||
const ownerUri = await azdata.connection.getUriForConnection(nodes[index].connectionId);
|
||||
const now = new Date();
|
||||
const databaseName = 'ADS_deployDacpac_' + now.getTime().toString();
|
||||
|
||||
try {
|
||||
const dacfxService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).dacFx;
|
||||
assert(dacfxService, 'DacFx Service Provider is not available');
|
||||
|
||||
// Deploy dacpac
|
||||
const deployResult = await dacfxService.deployDacpac(dacpac1, databaseName, false, ownerUri, azdata.TaskExecutionMode.execute);
|
||||
await utils.assertDatabaseCreationResult(databaseName, ownerUri, retryCount);
|
||||
const dbConnectionId = await utils.connectToServer({
|
||||
serverName: server.serverName,
|
||||
database: databaseName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationTypeName: server.authenticationTypeName,
|
||||
providerName: server.providerName
|
||||
});
|
||||
const dbConnectionOwnerUri = await azdata.connection.getUriForConnection(dbConnectionId);
|
||||
await utils.assertTableCreationResult('dbo', 'Table1', dbConnectionOwnerUri, retryCount);
|
||||
await utils.assertTableCreationResult('dbo', 'Table2', dbConnectionOwnerUri, retryCount);
|
||||
assert(deployResult.success === true && deployResult.errorMessage === '', `Deploy dacpac should succeed Expected: there should be no error. Actual Error message: "${deployResult.errorMessage}"`);
|
||||
|
||||
// Extract dacpac
|
||||
const folderPath = path.join(os.tmpdir(), 'DacFxTest');
|
||||
if (!(await promisify(fs.exists)(folderPath))) {
|
||||
await fs.promises.mkdir(folderPath);
|
||||
}
|
||||
const packageFilePath = path.join(folderPath, `${databaseName}.dacpac`);
|
||||
const extractResult = await dacfxService.extractDacpac(databaseName, packageFilePath, databaseName, '1.0.0.0', ownerUri, azdata.TaskExecutionMode.execute);
|
||||
await utils.assertFileGenerationResult(packageFilePath, retryCount);
|
||||
|
||||
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(server, databaseName, ownerUri);
|
||||
}
|
||||
});
|
||||
|
||||
const bacpac1: string = path.join(__dirname, '..', '..', 'testData', 'Database1.bacpac');
|
||||
test('Import and export bacpac', async function () {
|
||||
const server = await getStandaloneServer();
|
||||
await utils.connectToServer(server);
|
||||
|
||||
const nodes = <azdata.objectexplorer.ObjectExplorerNode[]>await azdata.objectexplorer.getActiveConnectionNodes();
|
||||
const index = nodes.findIndex(node => node.nodePath.includes(server.serverName));
|
||||
const ownerUri = await azdata.connection.getUriForConnection(nodes[index].connectionId);
|
||||
const now = new Date();
|
||||
const databaseName = 'ADS_importBacpac_' + now.getTime().toString();
|
||||
|
||||
try {
|
||||
let dacfxService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).dacFx;
|
||||
assert(dacfxService, 'DacFx Service Provider is not available');
|
||||
|
||||
// Import bacpac
|
||||
const importResult = await dacfxService.importBacpac(bacpac1, databaseName, ownerUri, azdata.TaskExecutionMode.execute);
|
||||
await utils.assertDatabaseCreationResult(databaseName, ownerUri, retryCount);
|
||||
const dbConnectionId = await utils.connectToServer({
|
||||
serverName: server.serverName,
|
||||
database: databaseName,
|
||||
userName: server.userName,
|
||||
password: server.password,
|
||||
authenticationTypeName: server.authenticationTypeName,
|
||||
providerName: server.providerName
|
||||
});
|
||||
const dbConnectionOwnerUri = await azdata.connection.getUriForConnection(dbConnectionId);
|
||||
await utils.assertTableCreationResult('dbo', 'Table1', dbConnectionOwnerUri, retryCount, true);
|
||||
await utils.assertTableCreationResult('dbo', 'Table2', dbConnectionOwnerUri, retryCount, true);
|
||||
assert(importResult.success === true && importResult.errorMessage === '', `Expected: Import bacpac should succeed and there should be no error. Actual Error message: "${importResult.errorMessage}"`);
|
||||
|
||||
// Export bacpac
|
||||
const folderPath = path.join(os.tmpdir(), 'DacFxTest');
|
||||
if (!(await promisify(fs.exists)(folderPath))) {
|
||||
await fs.promises.mkdir(folderPath);
|
||||
}
|
||||
const packageFilePath = path.join(folderPath, `${databaseName}.bacpac`);
|
||||
const exportResult = await dacfxService.exportBacpac(databaseName, packageFilePath, ownerUri, azdata.TaskExecutionMode.execute);
|
||||
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(server, databaseName, ownerUri);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -7,102 +7,100 @@ import 'mocha';
|
||||
import * as assert from 'assert';
|
||||
import * as azdata from 'azdata';
|
||||
import * as vscode from 'vscode';
|
||||
import { isTestSetupCompleted } from '../testContext';
|
||||
import { sqlNotebookContent, writeNotebookToFile, sqlKernelMetadata, getFileName, pySparkNotebookContent, pySparkKernelMetadata, pythonKernelMetadata, sqlNotebookMultipleCellsContent, notebookContentForCellLanguageTest, sqlKernelSpec, pythonKernelSpec, pySparkKernelSpec, CellTypes } from '../notebook.util';
|
||||
import { getConfigValue, EnvironmentVariable_PYTHON_PATH, TestServerProfile, getStandaloneServer } from '../testConfig';
|
||||
import { connectToServer, sleep, testServerProfileToIConnectionProfile } from '../utils';
|
||||
import { sqlNotebookContent, writeNotebookToFile, sqlKernelMetadata, getFileName, pySparkNotebookContent, pySparkKernelMetadata, pythonKernelMetadata, sqlNotebookMultipleCellsContent, notebookContentForCellLanguageTest, sqlKernelSpec, pythonKernelSpec, pySparkKernelSpec, CellTypes } from './notebook.util';
|
||||
import { getConfigValue, EnvironmentVariable_PYTHON_PATH, TestServerProfile, getStandaloneServer } from './testConfig';
|
||||
import { connectToServer, sleep, testServerProfileToIConnectionProfile } from './utils';
|
||||
import * as fs from 'fs';
|
||||
import { stressify } from 'adstest';
|
||||
import { isNullOrUndefined, promisify } from 'util';
|
||||
|
||||
if (isTestSetupCompleted()) {
|
||||
suite('Notebook integration test suite', function () {
|
||||
setup(async function () {
|
||||
console.log(`Start "${this.currentTest.title}"`);
|
||||
let server = await getStandaloneServer();
|
||||
assert(server && server.serverName, 'No server could be found');
|
||||
await connectToServer(server, 6000);
|
||||
});
|
||||
teardown(async function () {
|
||||
await (new NotebookTester()).cleanup(this.currentTest.title);
|
||||
});
|
||||
|
||||
test('Sql NB test @UNSTABLE@', async function () {
|
||||
await (new NotebookTester()).sqlNbTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Sql NB multiple cells test @UNSTABLE@', async function () {
|
||||
await (new NotebookTester()).sqlNbMultipleCellsTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Sql NB run cells above and below test', async function () {
|
||||
await (new NotebookTester()).sqlNbRunCellsAboveBelowTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Clear cell output - SQL notebook', async function () {
|
||||
await (new NotebookTester()).sqlNbClearOutputs(this.test.title);
|
||||
});
|
||||
|
||||
test('Clear all outputs - SQL notebook ', async function () {
|
||||
await (new NotebookTester()).sqlNbClearAllOutputs(this.test.title);
|
||||
});
|
||||
|
||||
test('sql language test', async function () {
|
||||
await (new NotebookTester()).sqlLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
// TODO: Need to make this test more reliable.
|
||||
test('should not be dirty after saving notebook test @UNSTABLE@', async function () {
|
||||
await (new NotebookTester().shouldNotBeDirtyAfterSavingNotebookTest(this.test.title));
|
||||
});
|
||||
|
||||
if (process.env['RUN_PYTHON3_TEST'] === '1') {
|
||||
test('Python3 notebook test', async function () {
|
||||
await (new NotebookTester()).python3NbTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Clear all outputs - Python3 notebook ', async function () {
|
||||
await (new NotebookTester()).python3ClearAllOutputs(this.test.title);
|
||||
});
|
||||
|
||||
test('python language test', async function () {
|
||||
await (new NotebookTester()).pythonLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Change kernel different provider SQL to Python to SQL', async function () {
|
||||
await (new NotebookTester()).sqlNbChangeKernelDifferentProviderTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Change kernel different provider Python to SQL to Python', async function () {
|
||||
await (new NotebookTester()).pythonChangeKernelDifferentProviderTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Change kernel same provider Python to PySpark to Python', async function () {
|
||||
await (new NotebookTester()).pythonChangeKernelSameProviderTest(this.test.title);
|
||||
});
|
||||
}
|
||||
|
||||
if (process.env['RUN_PYSPARK_TEST'] === '1') {
|
||||
test('PySpark notebook test', async function () {
|
||||
await (new NotebookTester()).pySparkNbTest(this.test.title);
|
||||
});
|
||||
}
|
||||
|
||||
/* After https://github.com/microsoft/azuredatastudio/issues/5598 is fixed, enable these tests.
|
||||
test('scala language test', async function () {
|
||||
await (new NotebookTester()).scalaLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
test('empty language test', async function () {
|
||||
await (new NotebookTester()).emptyLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
test('cplusplus language test', async function () {
|
||||
await (new NotebookTester()).cplusplusLanguageTest(this.test.title);
|
||||
});
|
||||
*/
|
||||
suite('Notebook integration test suite', function () {
|
||||
setup(async function () {
|
||||
console.log(`Start "${this.currentTest.title}"`);
|
||||
let server = await getStandaloneServer();
|
||||
assert(server && server.serverName, 'No server could be found');
|
||||
await connectToServer(server, 6000);
|
||||
});
|
||||
}
|
||||
|
||||
teardown(async function () {
|
||||
await (new NotebookTester()).cleanup(this.currentTest.title);
|
||||
});
|
||||
|
||||
test('Sql NB test @UNSTABLE@', async function () {
|
||||
await (new NotebookTester()).sqlNbTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Sql NB multiple cells test @UNSTABLE@', async function () {
|
||||
await (new NotebookTester()).sqlNbMultipleCellsTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Sql NB run cells above and below test', async function () {
|
||||
await (new NotebookTester()).sqlNbRunCellsAboveBelowTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Clear cell output - SQL notebook', async function () {
|
||||
await (new NotebookTester()).sqlNbClearOutputs(this.test.title);
|
||||
});
|
||||
|
||||
test('Clear all outputs - SQL notebook ', async function () {
|
||||
await (new NotebookTester()).sqlNbClearAllOutputs(this.test.title);
|
||||
});
|
||||
|
||||
test('sql language test', async function () {
|
||||
await (new NotebookTester()).sqlLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
// TODO: Need to make this test more reliable.
|
||||
test('should not be dirty after saving notebook test @UNSTABLE@', async function () {
|
||||
await (new NotebookTester().shouldNotBeDirtyAfterSavingNotebookTest(this.test.title));
|
||||
});
|
||||
|
||||
if (process.env['RUN_PYTHON3_TEST'] === '1') {
|
||||
test('Python3 notebook test', async function () {
|
||||
await (new NotebookTester()).python3NbTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Clear all outputs - Python3 notebook ', async function () {
|
||||
await (new NotebookTester()).python3ClearAllOutputs(this.test.title);
|
||||
});
|
||||
|
||||
test('python language test', async function () {
|
||||
await (new NotebookTester()).pythonLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Change kernel different provider SQL to Python to SQL', async function () {
|
||||
await (new NotebookTester()).sqlNbChangeKernelDifferentProviderTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Change kernel different provider Python to SQL to Python', async function () {
|
||||
await (new NotebookTester()).pythonChangeKernelDifferentProviderTest(this.test.title);
|
||||
});
|
||||
|
||||
test('Change kernel same provider Python to PySpark to Python', async function () {
|
||||
await (new NotebookTester()).pythonChangeKernelSameProviderTest(this.test.title);
|
||||
});
|
||||
}
|
||||
|
||||
if (process.env['RUN_PYSPARK_TEST'] === '1') {
|
||||
test('PySpark notebook test', async function () {
|
||||
await (new NotebookTester()).pySparkNbTest(this.test.title);
|
||||
});
|
||||
}
|
||||
|
||||
/* After https://github.com/microsoft/azuredatastudio/issues/5598 is fixed, enable these tests.
|
||||
test('scala language test', async function () {
|
||||
await (new NotebookTester()).scalaLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
test('empty language test', async function () {
|
||||
await (new NotebookTester()).emptyLanguageTest(this.test.title);
|
||||
});
|
||||
|
||||
test('cplusplus language test', async function () {
|
||||
await (new NotebookTester()).cplusplusLanguageTest(this.test.title);
|
||||
});
|
||||
*/
|
||||
});
|
||||
|
||||
class NotebookTester {
|
||||
private static ParallelCount = 1;
|
||||
|
||||
@@ -5,34 +5,31 @@
|
||||
|
||||
import 'mocha';
|
||||
import * as azdata from 'azdata';
|
||||
import { isTestSetupCompleted } from '../testContext';
|
||||
import { getBdcServer, TestServerProfile, getAzureServer, getStandaloneServer } from '../testConfig';
|
||||
import { connectToServer, createDB, deleteDB, DefaultConnectTimeoutInMs, asyncTimeout } from '../utils';
|
||||
import { getBdcServer, TestServerProfile, getAzureServer, getStandaloneServer } from './testConfig';
|
||||
import { connectToServer, createDB, deleteDB, DefaultConnectTimeoutInMs, asyncTimeout } from './utils';
|
||||
import * as assert from 'assert';
|
||||
import { stressify } from 'adstest';
|
||||
|
||||
if (isTestSetupCompleted()) {
|
||||
suite('Object Explorer integration suite', () => {
|
||||
test.skip('BDC instance node label test', async function () {
|
||||
return await (new ObjectExplorerTester()).bdcNodeLabelTest();
|
||||
});
|
||||
test('Standalone instance node label test', async function () {
|
||||
return await (new ObjectExplorerTester()).standaloneNodeLabelTest();
|
||||
});
|
||||
test('Azure SQL DB instance node label test @UNSTABLE@', async function () {
|
||||
return await (new ObjectExplorerTester()).sqlDbNodeLabelTest();
|
||||
});
|
||||
test.skip('BDC instance context menu test', async function () {
|
||||
return await (new ObjectExplorerTester()).bdcContextMenuTest();
|
||||
});
|
||||
test('Azure SQL DB context menu test @UNSTABLE@', async function () {
|
||||
return await (new ObjectExplorerTester()).sqlDbContextMenuTest();
|
||||
});
|
||||
test('Standalone database context menu test', async function () {
|
||||
return await (new ObjectExplorerTester()).standaloneContextMenuTest();
|
||||
});
|
||||
suite('Object Explorer integration suite', () => {
|
||||
test.skip('BDC instance node label test', async function () {
|
||||
return await (new ObjectExplorerTester()).bdcNodeLabelTest();
|
||||
});
|
||||
}
|
||||
test('Standalone instance node label test', async function () {
|
||||
return await (new ObjectExplorerTester()).standaloneNodeLabelTest();
|
||||
});
|
||||
test('Azure SQL DB instance node label test @UNSTABLE@', async function () {
|
||||
return await (new ObjectExplorerTester()).sqlDbNodeLabelTest();
|
||||
});
|
||||
test.skip('BDC instance context menu test', async function () {
|
||||
return await (new ObjectExplorerTester()).bdcContextMenuTest();
|
||||
});
|
||||
test('Azure SQL DB context menu test @UNSTABLE@', async function () {
|
||||
return await (new ObjectExplorerTester()).sqlDbContextMenuTest();
|
||||
});
|
||||
test('Standalone database context menu test', async function () {
|
||||
return await (new ObjectExplorerTester()).standaloneContextMenuTest();
|
||||
});
|
||||
});
|
||||
|
||||
class ObjectExplorerTester {
|
||||
private static ParallelCount = 1;
|
||||
|
||||
@@ -6,58 +6,55 @@
|
||||
import 'mocha';
|
||||
import * as azdata from 'azdata';
|
||||
import * as vscode from 'vscode';
|
||||
import * as utils from '../utils';
|
||||
import * as utils from './utils';
|
||||
import * as mssql from '../../../mssql';
|
||||
import * as os from 'os';
|
||||
import * as fs from 'fs';
|
||||
const path = require('path');
|
||||
import { isTestSetupCompleted } from '../testContext';
|
||||
import * as assert from 'assert';
|
||||
import { getStandaloneServer } from '../testConfig';
|
||||
import { getStandaloneServer } from './testConfig';
|
||||
import { stressify } from 'adstest';
|
||||
import { promisify } from 'util';
|
||||
|
||||
let schemaCompareService: mssql.ISchemaCompareService;
|
||||
let dacfxService: mssql.IDacFxService;
|
||||
let schemaCompareTester: SchemaCompareTester;
|
||||
const dacpac1: string = path.join(__dirname, '..','testData', 'Database1.dacpac');
|
||||
const dacpac2: string = path.join(__dirname, '..', 'testData', 'Database2.dacpac');
|
||||
const includeExcludeSourceDacpac: string = path.join(__dirname, '..', 'testData', 'SchemaCompareIncludeExcludeSource.dacpac');
|
||||
const includeExcludeTargetDacpac: string = path.join(__dirname, '..', 'testData', 'SchemaCompareIncludeExcludeTarget.dacpac');
|
||||
const dacpac1: string = path.join(__dirname, '..', '..', 'testData', 'Database1.dacpac');
|
||||
const dacpac2: string = path.join(__dirname, '..', '..', 'testData', 'Database2.dacpac');
|
||||
const includeExcludeSourceDacpac: string = path.join(__dirname, '..', '..', 'testData', 'SchemaCompareIncludeExcludeSource.dacpac');
|
||||
const includeExcludeTargetDacpac: string = path.join(__dirname, '..', '..', 'testData', 'SchemaCompareIncludeExcludeTarget.dacpac');
|
||||
const SERVER_CONNECTION_TIMEOUT: number = 3000;
|
||||
const retryCount = 24; // 2 minutes
|
||||
const folderPath = path.join(os.tmpdir(), 'SchemaCompareTest');
|
||||
|
||||
if (isTestSetupCompleted()) {
|
||||
suite('Schema compare integration test suite', () => {
|
||||
suiteSetup(async function () {
|
||||
let attempts: number = 20;
|
||||
while (attempts > 0) {
|
||||
schemaCompareService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).schemaCompare;
|
||||
if (schemaCompareService) {
|
||||
break;
|
||||
}
|
||||
attempts--;
|
||||
await utils.sleep(1000); // To ensure the providers are registered.
|
||||
suite('Schema compare integration test suite', () => {
|
||||
suiteSetup(async function () {
|
||||
let attempts: number = 20;
|
||||
while (attempts > 0) {
|
||||
schemaCompareService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).schemaCompare;
|
||||
if (schemaCompareService) {
|
||||
break;
|
||||
}
|
||||
dacfxService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).dacFx;
|
||||
schemaCompareTester = new SchemaCompareTester();
|
||||
console.log(`Start schema compare tests`);
|
||||
});
|
||||
test('Schema compare dacpac to dacpac comparison and scmp', async function () {
|
||||
await schemaCompareTester.SchemaCompareDacpacToDacpac();
|
||||
});
|
||||
test('Schema compare database to database comparison, script generation, and scmp', async function () {
|
||||
await schemaCompareTester.SchemaCompareDatabaseToDatabase();
|
||||
});
|
||||
test('Schema compare dacpac to database comparison, script generation, and scmp', async function () {
|
||||
await schemaCompareTester.SchemaCompareDacpacToDatabase();
|
||||
});
|
||||
test('Schema compare dacpac to dacpac comparison with include exclude', async function () {
|
||||
await schemaCompareTester.SchemaCompareIncludeExcludeDacpacToDacpac();
|
||||
});
|
||||
attempts--;
|
||||
await utils.sleep(1000); // To ensure the providers are registered.
|
||||
}
|
||||
dacfxService = ((await vscode.extensions.getExtension(mssql.extension.name).activate() as mssql.IExtension)).dacFx;
|
||||
schemaCompareTester = new SchemaCompareTester();
|
||||
console.log(`Start schema compare tests`);
|
||||
});
|
||||
}
|
||||
test('Schema compare dacpac to dacpac comparison and scmp', async function () {
|
||||
await schemaCompareTester.SchemaCompareDacpacToDacpac();
|
||||
});
|
||||
test('Schema compare database to database comparison, script generation, and scmp', async function () {
|
||||
await schemaCompareTester.SchemaCompareDatabaseToDatabase();
|
||||
});
|
||||
test('Schema compare dacpac to database comparison, script generation, and scmp', async function () {
|
||||
await schemaCompareTester.SchemaCompareDacpacToDatabase();
|
||||
});
|
||||
test('Schema compare dacpac to dacpac comparison with include exclude', async function () {
|
||||
await schemaCompareTester.SchemaCompareIncludeExcludeDacpacToDacpac();
|
||||
});
|
||||
});
|
||||
|
||||
class SchemaCompareTester {
|
||||
private static ParallelCount = 1;
|
||||
|
||||
Reference in New Issue
Block a user