mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
handling offline and inassisable db in oe (#369)
* handling offline and inassisable db in oe
This commit is contained in:
@@ -61,11 +61,11 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
string databaseName = "tempdb";
|
||||
await RunTest(databaseName, query, "TepmDb", async (testDbName, session) =>
|
||||
{
|
||||
var serverChildren = await _service.ExpandNode(session, session.Root.GetNodePath());
|
||||
var serverChildren = (await _service.ExpandNode(session, session.Root.GetNodePath())).Nodes;
|
||||
var securityNode = serverChildren.FirstOrDefault(x => x.Label == SR.SchemaHierarchy_Security);
|
||||
var securityChildren = await _service.ExpandNode(session, securityNode.NodePath);
|
||||
var securityChildren = (await _service.ExpandNode(session, securityNode.NodePath)).Nodes;
|
||||
var loginsNode = securityChildren.FirstOrDefault(x => x.Label == SR.SchemaHierarchy_Logins);
|
||||
var loginsChildren = await _service.ExpandNode(session, loginsNode.NodePath);
|
||||
var loginsChildren = (await _service.ExpandNode(session, loginsNode.NodePath)).Nodes;
|
||||
var login = loginsChildren.FirstOrDefault(x => x.Label == "OEServerLogin");
|
||||
Assert.NotNull(login);
|
||||
|
||||
@@ -97,12 +97,12 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
string databaseName = "tempdb";
|
||||
await RunTest(databaseName, query, "TepmDb", async (testDbName, session) =>
|
||||
{
|
||||
var serverChildren = await _service.ExpandNode(session, session.Root.GetNodePath());
|
||||
var serverChildren = (await _service.ExpandNode(session, session.Root.GetNodePath())).Nodes;
|
||||
var serverObjectsNode = serverChildren.FirstOrDefault(x => x.Label == SR.SchemaHierarchy_ServerObjects);
|
||||
var serverObjectsChildren = await _service.ExpandNode(session, serverObjectsNode.NodePath);
|
||||
var serverObjectsChildren = (await _service.ExpandNode(session, serverObjectsNode.NodePath)).Nodes;
|
||||
var triggersNode = serverObjectsChildren.FirstOrDefault(x => x.Label == SR.SchemaHierarchy_Triggers);
|
||||
var triggersChildren = await _service.ExpandNode(session, triggersNode.NodePath);
|
||||
var trigger = triggersChildren.FirstOrDefault(x => x.Label == "OE_ddl_trig_database");
|
||||
var trigger = triggersChildren.Nodes.FirstOrDefault(x => x.Label == "OE_ddl_trig_database");
|
||||
Assert.NotNull(trigger);
|
||||
|
||||
Assert.True(trigger.NodeStatus == "Disabled");
|
||||
@@ -130,18 +130,36 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
await RunTest(databaseName, query, "TestDb", async (testDbName, session) =>
|
||||
{
|
||||
var tablesNode = await FindNodeByLabel(session.Root.ToNodeInfo(), session, SR.SchemaHierarchy_Tables);
|
||||
var tableChildren = await _service.ExpandNode(session, tablesNode.NodePath);
|
||||
var tableChildren = (await _service.ExpandNode(session, tablesNode.NodePath)).Nodes;
|
||||
string dropTableScript = "Drop Table t1";
|
||||
Assert.True(tableChildren.Any(t => t.Label == "dbo.t1"));
|
||||
await TestServiceProvider.Instance.RunQueryAsync(TestServerType.OnPrem, testDbName, dropTableScript);
|
||||
tableChildren = await _service.ExpandNode(session, tablesNode.NodePath);
|
||||
tableChildren = (await _service.ExpandNode(session, tablesNode.NodePath)).Nodes;
|
||||
Assert.True(tableChildren.Any(t => t.Label == "dbo.t1"));
|
||||
tableChildren = await _service.ExpandNode(session, tablesNode.NodePath, true);
|
||||
tableChildren = (await _service.ExpandNode(session, tablesNode.NodePath, true)).Nodes;
|
||||
Assert.False(tableChildren.Any(t => t.Label == "dbo.t1"));
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a test database with prefix (OfflineDb). Create an oe session for master db and expand the new test db.
|
||||
/// The expand should return an error that says database if offline
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async void ExpandOfflineDatabaseShouldReturnError()
|
||||
{
|
||||
var query = "ALTER DATABASE {0} SET OFFLINE WITH ROLLBACK IMMEDIATE";
|
||||
string databaseName = "master";
|
||||
|
||||
await RunTest(databaseName, query, "OfflineDb", async (testDbName, session) =>
|
||||
{
|
||||
var databaseNode = await ExpandServerNodeAndVerifyDatabaseHierachy(testDbName, session);
|
||||
var response = await _service.ExpandNode(session, databaseNode.NodePath);
|
||||
Assert.True(response.ErrorMessage.Contains(string.Format(CultureInfo.InvariantCulture, SR.DatabaseNotAccessible, testDbName)));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async void RefreshShouldCleanTheCache()
|
||||
{
|
||||
@@ -161,7 +179,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
var tableChildren = await _service.ExpandNode(session, tablesNode.NodePath);
|
||||
|
||||
//Expanding the tables return t1
|
||||
Assert.True(tableChildren.Any(t => t.Label == "dbo.t1"));
|
||||
Assert.True(tableChildren.Nodes.Any(t => t.Label == "dbo.t1"));
|
||||
|
||||
//Delete the table from db
|
||||
await TestServiceProvider.Instance.RunQueryAsync(TestServerType.OnPrem, testDbName, dropTableScript1);
|
||||
@@ -170,7 +188,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
tableChildren = await _service.ExpandNode(session, tablesNode.NodePath);
|
||||
|
||||
//Tables still includes t1
|
||||
Assert.True(tableChildren.Any(t => t.Label == "dbo.t1"));
|
||||
Assert.True(tableChildren.Nodes.Any(t => t.Label == "dbo.t1"));
|
||||
|
||||
//Verify the tables cache has items
|
||||
|
||||
@@ -197,7 +215,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
Assert.False(tablesCache.Any());
|
||||
|
||||
//Expand Tables
|
||||
var tableChildren = await _service.ExpandNode(session, tablePath, true);
|
||||
var tableChildren = (await _service.ExpandNode(session, tablePath, true)).Nodes;
|
||||
|
||||
//Verify table is not returned
|
||||
Assert.Equal(tableChildren.Any(t => t.Label == tableName), !deleted);
|
||||
@@ -238,6 +256,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
{
|
||||
databaseName = testDb.DatabaseName;
|
||||
}
|
||||
|
||||
var session = await CreateSession(databaseName);
|
||||
uri = session.Uri;
|
||||
await test(testDb.DatabaseName, session);
|
||||
@@ -293,7 +312,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
}
|
||||
|
||||
var databasesRoot = children.FirstOrDefault(x => x.NodeTypeId == NodeTypes.Databases);
|
||||
var databasesChildren = await _service.ExpandNode(session, databasesRoot.GetNodePath());
|
||||
var databasesChildren = (await _service.ExpandNode(session, databasesRoot.GetNodePath())).Nodes;
|
||||
var databases = databasesChildren.Where(x => x.NodeType == NodeTypes.Database.ToString());
|
||||
|
||||
//Verify the test databases is in the list
|
||||
@@ -303,7 +322,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
Assert.NotNull(systemDatabasesNode);
|
||||
|
||||
var systemDatabases = await _service.ExpandNode(session, systemDatabasesNode.NodePath);
|
||||
Assert.True(systemDatabases.Any(x => x.Label == "master"));
|
||||
Assert.True(systemDatabases.Nodes.Any(x => x.Label == "master"));
|
||||
|
||||
databaseNode = databases.FirstOrDefault(d => d.Label == databaseName);
|
||||
}
|
||||
@@ -312,7 +331,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
Assert.Equal(nodeInfo.NodeType, NodeTypes.Database.ToString());
|
||||
databaseNode = session.Root.ToNodeInfo();
|
||||
Assert.True(databaseNode.Label.Contains(databaseName));
|
||||
var databasesChildren = await _service.ExpandNode(session, databaseNode.NodePath);
|
||||
var databasesChildren = (await _service.ExpandNode(session, databaseNode.NodePath)).Nodes;
|
||||
Assert.False(databasesChildren.Any(x => x.Label == SR.SchemaHierarchy_SystemDatabases));
|
||||
|
||||
}
|
||||
@@ -328,7 +347,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
Assert.Equal(nodeInfo.IsLeaf, false);
|
||||
Assert.Equal(nodeInfo.NodeType, NodeTypes.Database.ToString());
|
||||
Assert.True(nodeInfo.Label.Contains(databaseName));
|
||||
var children = await _service.ExpandNode(session, session.Root.GetNodePath());
|
||||
var children = (await _service.ExpandNode(session, session.Root.GetNodePath())).Nodes;
|
||||
|
||||
//All server children should be folder nodes
|
||||
foreach (var item in children)
|
||||
@@ -350,7 +369,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
{
|
||||
if (node != null && !node.IsLeaf)
|
||||
{
|
||||
var children = await _service.ExpandNode(session, node.NodePath);
|
||||
var children = (await _service.ExpandNode(session, node.NodePath)).Nodes;
|
||||
foreach (var child in children)
|
||||
{
|
||||
VerifyMetadata(child);
|
||||
@@ -384,7 +403,8 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer
|
||||
}
|
||||
else if (node != null && !node.IsLeaf)
|
||||
{
|
||||
var children = await _service.ExpandNode(session, node.NodePath);
|
||||
var response = await _service.ExpandNode(session, node.NodePath);
|
||||
var children = response.Nodes;
|
||||
Assert.NotNull(children);
|
||||
foreach (var child in children)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user