handling offline and inassisable db in oe (#369)

* handling offline and inassisable db in oe
This commit is contained in:
Leila Lali
2017-06-07 12:21:24 -07:00
committed by GitHub
parent 3bf562acf0
commit b60a865706
26 changed files with 371 additions and 199 deletions

View File

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