diff --git a/extensions/integration-tests/src/objectExplorer.test.ts b/extensions/integration-tests/src/objectExplorer.test.ts index 40754627fd..dbae687e6e 100644 --- a/extensions/integration-tests/src/objectExplorer.test.ts +++ b/extensions/integration-tests/src/objectExplorer.test.ts @@ -8,17 +8,36 @@ import 'mocha'; import * as azdata from 'azdata'; import { context } from './testContext'; -import { getDefaultTestingServer } from './testConfig'; +import { getDefaultTestingServer, getBdcServer, TestServerProfile } from './testConfig'; import { connectToServer } from './utils'; import assert = require('assert'); if (context.RunTest) { - suite('Object Explorer integration test suite', () => { + suite('Object Explorer integration suite', () => { + test('BDC instance node label test', async function () { + assert(process.env.BDC_BACKEND_HOSTNAME !== undefined && + process.env.BDC_BACKEND_USERNAME !== undefined && + process.env.BDC_BACKEND_PWD !== undefined, 'BDC_BACKEND_HOSTNAME, BDC_BACKEND_USERNAME, BDC_BACKEND_PWD must be set using ./scripts/setbackenvariables.sh or .\\scripts\\setbackendvaraibles.bat'); + const expectedNodeLabel = ['Databases', 'Security', 'Server Objects', 'Data Services']; + let server = await getBdcServer(); + await VerifyOeNode(server, 6000, expectedNodeLabel); + }); + test('Standard alone instance node label test', async function () { + const expectedNodeLabel = ['Databases', 'Security', 'Server Objects']; + let server = await getDefaultTestingServer(); + await VerifyOeNode(server, 3000, expectedNodeLabel); + }); test('context menu test', async function () { - await connectToServer(await getDefaultTestingServer()); + let server = await getDefaultTestingServer(); + await connectToServer(server, 3000); let nodes = await azdata.objectexplorer.getActiveConnectionNodes(); - assert(nodes.length === 1, `expecting 1 active connection, actual: ${nodes.length}`); - let actions = await azdata.objectexplorer.getNodeActions(nodes[0].connectionId, nodes[0].nodePath); + assert(nodes.length > 0, `Expecting at least one active connection, actual: ${nodes.length}`); + + let index = nodes.findIndex(node => node.nodePath.includes(server.serverName)); + assert(index !== -1, `Failed to find server: "${server.serverName}" in OE tree`); + + let node = nodes[index]; + let actions = await azdata.objectexplorer.getNodeActions(node.connectionId, node.nodePath); const expectedActions = ['Manage', 'New Query', 'Disconnect', 'Delete Connection', 'Refresh', 'New Notebook', 'Launch Profiler']; const expectedString = expectedActions.join(','); @@ -27,3 +46,18 @@ if (context.RunTest) { }); }); } +async function VerifyOeNode(server: TestServerProfile, timeout: number,expectedNodeLable: string[]) { + await connectToServer(server, timeout); + let nodes = await azdata.objectexplorer.getActiveConnectionNodes(); + assert(nodes.length > 0, `Expecting at least one active connection, actual: ${nodes.length}`); + + let index = nodes.findIndex(node => node.nodePath.includes(server.serverName)); + assert(index !== -1, `Failed to find server: "${server.serverName}" in OE tree`); + let actualNodeLable = []; + let childeren = await nodes[index].getChildren(); + assert(childeren.length === expectedNodeLable.length, `Expecting node count: ${expectedNodeLable.length}, Actual: ${childeren.length}`); + + childeren.forEach(c => actualNodeLable.push(c.label)); + assert(expectedNodeLable.toLocaleString() === actualNodeLable.toLocaleString(), `Expected node label: "$'${expectedNodeLable}", Actual: "${actualNodeLable}"`); +} + diff --git a/extensions/integration-tests/src/testConfig.ts b/extensions/integration-tests/src/testConfig.ts index 48ca5ed035..f122c514dc 100644 --- a/extensions/integration-tests/src/testConfig.ts +++ b/extensions/integration-tests/src/testConfig.ts @@ -66,6 +66,16 @@ var TestingServers: TestServerProfile[] = [ database: 'master', provider: ConnectionProvider.SQLServer, version: '2017' + }), + new TestServerProfile( + { + serverName: process.env.BDC_BACKEND_HOSTNAME, + userName: process.env.BDC_BACKEND_USERNAME, + password: process.env.BDC_BACKEND_PWD, + authenticationType: AuthenticationType.SqlLogin, + database: 'master', + provider: ConnectionProvider.SQLServer, + version: '2019' }) ]; @@ -83,6 +93,11 @@ export async function getDefaultTestingServer(): Promise { return servers[0]; } +export async function getBdcServer(): Promise { + let servers = await getTestingServers(); + return servers.filter(s => s.version === '2019')[0]; +} + export async function getTestingServers(): Promise { let promise = new Promise(resolve => { resolve(TestingServers); diff --git a/extensions/integration-tests/src/utils.ts b/extensions/integration-tests/src/utils.ts index fb135e0066..a41c16ab2b 100644 --- a/extensions/integration-tests/src/utils.ts +++ b/extensions/integration-tests/src/utils.ts @@ -8,7 +8,7 @@ import * as azdata from 'azdata'; import * as vscode from 'vscode'; import { TestServerProfile } from './testConfig'; -export async function connectToServer(server: TestServerProfile) { +export async function connectToServer(server: TestServerProfile, timeout: number = 3000) { let connectionProfile: azdata.IConnectionProfile = { serverName: server.serverName, databaseName: server.database, @@ -30,9 +30,9 @@ export async function connectToServer(server: TestServerProfile) { //workaround //wait for OE to load - await new Promise(c => setTimeout(c, 3000)); + await new Promise(c => setTimeout(c, timeout)); } export async function ensureConnectionViewOpened() { - await vscode.commands.executeCommand('workbench.view.dataExplorer'); + await vscode.commands.executeCommand('dataExplorer.servers.focus'); } \ No newline at end of file diff --git a/scripts/setbackendvariables.cmd b/scripts/setbackendvariables.cmd new file mode 100644 index 0000000000..02f9c9fb74 --- /dev/null +++ b/scripts/setbackendvariables.cmd @@ -0,0 +1,5 @@ +@echo off pass in username password hostname of big data cluster +set BDC_BACKEND_USERNAME=%~1 +set BDC_BACKEND_PWD=%~2 +set BDC_BACKEND_HOSTNAME=%~3 +@echo No problem reading %BDC_BACKEND_HOSTNAME%, password and %BDC_BACKEND_HOSTNAME% \ No newline at end of file diff --git a/scripts/setbackendvariables.sh b/scripts/setbackendvariables.sh new file mode 100644 index 0000000000..41fad08a6c --- /dev/null +++ b/scripts/setbackendvariables.sh @@ -0,0 +1,6 @@ +# echo pass in username password hostname of big data cluster +export BDC_BACKEND_USERNAME=$1 +export BDC_BACKEND_PWD=$2 +export BDC_BACKEND_HOSTNAME=$3 +echo No problem reading $BDC_BACKEND_USERNAME, password and $BDC_BACKEND_HOSTNAME +set \ No newline at end of file diff --git a/scripts/sql-test-integration.bat b/scripts/sql-test-integration.bat index dc15951aef..92312af71f 100644 --- a/scripts/sql-test-integration.bat +++ b/scripts/sql-test-integration.bat @@ -8,7 +8,7 @@ echo %VSCODEUSERDATADIR% echo %VSCODEEXTENSIONSDIR% @echo OFF -call .\scripts\code.bat --extensionDevelopmentPath=%~dp0\..\extensions\integration-tests --extensionTestsPath=%~dp0\..\extensions\integration-tests\out --user-data-dir=%VSCODEUSERDATADIR% --extensions-dir=%VSCODEEXTENSIONSDIR% +call .\scripts\code.bat --extensionDevelopmentPath=%~dp0\..\extensions\integration-tests --extensionTestsPath=%~dp0\..\extensions\integration-tests\out --user-data-dir=%VSCODEUSERDATADIR% --extensions-dir=%VSCODEEXTENSIONSDIR% --remote-debugging-port=9222 if %errorlevel% neq 0 exit /b %errorlevel% diff --git a/scripts/sql-test-integration.sh b/scripts/sql-test-integration.sh index 9f75b9ff6a..3e64a77849 100755 --- a/scripts/sql-test-integration.sh +++ b/scripts/sql-test-integration.sh @@ -16,7 +16,7 @@ cd $ROOT echo $VSCODEUSERDATADIR echo $VSCODEEXTDIR -./scripts/code.sh --extensionDevelopmentPath=$ROOT/extensions/integration-tests --extensionTestsPath=$ROOT/extensions/integration-tests/out --user-data-dir=$VSCODEUSERDATADIR --extensions-dir=$VSCODEEXTDIR +./scripts/code.sh --extensionDevelopmentPath=$ROOT/extensions/integration-tests --extensionTestsPath=$ROOT/extensions/integration-tests/out --user-data-dir=$VSCODEUSERDATADIR --extensions-dir=$VSCODEEXTDIR --remote-debugging-port=9222 rm -r $VSCODEUSERDATADIR