From 85f34b65f1487469167f7c86eb29ada8469d72b9 Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Wed, 24 Apr 2019 13:31:34 -0700 Subject: [PATCH] Fix a number of cred scan hits (#800) Bunch of secrets in files, usually fixed by generating random password. The deleted script files didn't seem to be used anywhere. --- .../ObjectExplorerServiceTests.cs | 36 ++- .../Extensions/ExceptionExtensions.cs | 25 ++ .../TestScripts/Sql_2016_Additions.sql | 275 ---------------- .../TestScripts/Sql_Additions.sql | 298 ------------------ .../SqlScriptPublishModelTests.cs | 10 +- .../Connection/ConnectionServiceTests.cs | 90 +++--- .../Credentials/CredentialServiceTests.cs | 18 +- .../Credentials/Win32/CredentialSetTests.cs | 18 +- .../Utility/TestObjects.cs | 14 +- 9 files changed, 119 insertions(+), 665 deletions(-) create mode 100644 test/Microsoft.SqlTools.ServiceLayer.Test.Common/Extensions/ExceptionExtensions.cs delete mode 100644 test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_2016_Additions.sql delete mode 100644 test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_Additions.sql diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/ObjectExplorer/ObjectExplorerServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/ObjectExplorer/ObjectExplorerServiceTests.cs index df7cef15..99dbbd99 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/ObjectExplorer/ObjectExplorerServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/ObjectExplorer/ObjectExplorerServiceTests.cs @@ -16,6 +16,7 @@ using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Contracts; using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes; using Microsoft.SqlTools.ServiceLayer.Test.Common; using Microsoft.SqlTools.ServiceLayer.Test.Common.Baselined; +using Microsoft.SqlTools.ServiceLayer.Test.Common.Extensions; using Xunit; using static Microsoft.SqlTools.ServiceLayer.ObjectExplorer.ObjectExplorerService; @@ -50,13 +51,13 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer [Fact] public async void VerifyServerLogins() { - var query = @"If Exists (select loginname from master.dbo.syslogins + var query = $@"If Exists (select loginname from master.dbo.syslogins where name = 'OEServerLogin') Begin Drop Login [OEServerLogin] End - CREATE LOGIN OEServerLogin WITH PASSWORD = 'SuperSecret52&&' + CREATE LOGIN OEServerLogin WITH PASSWORD = '{Guid.NewGuid()}' GO ALTER LOGIN OEServerLogin DISABLE; "; string databaseName = "tempdb"; @@ -69,7 +70,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer var loginsChildren = (await _service.ExpandNode(session, loginsNode.NodePath)).Nodes; var login = loginsChildren.FirstOrDefault(x => x.Label == "OEServerLogin"); Assert.NotNull(login); - + Assert.True(login.NodeStatus == "Disabled"); await TestServiceProvider.Instance.RunQueryAsync(TestServerType.OnPrem, testDbName, "Drop Login OEServerLogin"); @@ -80,19 +81,19 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer public async void VerifyServerTriggers() { var query = @"IF EXISTS (SELECT * FROM sys.server_triggers WHERE name = 'OE_ddl_trig_database') - + Begin DROP TRIGGER OE_ddl_trig_database ON ALL SERVER - + ENd GO - CREATE TRIGGER OE_ddl_trig_database - ON ALL SERVER - FOR CREATE_DATABASE - AS - PRINT 'Database Created.' - GO + CREATE TRIGGER OE_ddl_trig_database + ON ALL SERVER + FOR CREATE_DATABASE + AS + PRINT 'Database Created.' + GO GO Disable TRIGGER OE_ddl_trig_database ON ALL SERVER ;"; string databaseName = "tempdb"; @@ -152,7 +153,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer { 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); @@ -191,7 +192,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer //Tables still includes t1 Assert.True(tableChildren.Nodes.Any(t => t.Label == "dbo.t1")); - //Verify the tables cache has items + //Verify the tables cache has items var rootChildrenCache = session.Root.GetChildren(); var tablesCache = rootChildrenCache.First(x => x.Label == SR.SchemaHierarchy_Tables).GetChildren(); @@ -264,8 +265,9 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer } catch (Exception ex) { - Console.WriteLine($"Failed to run OE test. uri:{uri} error:{ex.Message} {ex.StackTrace}"); - Assert.False(true, ex.Message); + string msg = ex.BuildRecursiveErrorMessage(); + Console.WriteLine($"Failed to run OE test. uri:{uri} error:{msg} {ex.StackTrace}"); + Assert.False(true, msg); } finally { @@ -298,7 +300,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer Assert.NotNull(session.Root); NodeInfo nodeInfo = session.Root.ToNodeInfo(); Assert.Equal(nodeInfo.IsLeaf, false); - + NodeInfo databaseNode = null; if (serverNode) @@ -460,7 +462,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectExplorer BaselinedTest.CompareActualWithBaseline(actual, baseline); } }); - + return true; } diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Extensions/ExceptionExtensions.cs b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Extensions/ExceptionExtensions.cs new file mode 100644 index 00000000..8f583ef2 --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Extensions/ExceptionExtensions.cs @@ -0,0 +1,25 @@ +using System; +using System.Text; + +namespace Microsoft.SqlTools.ServiceLayer.Test.Common.Extensions +{ + public static class ExceptionExtensions + { + /// + /// Builds a string containing the exception messages and all messages of child InnerExceptions. + /// + /// + /// + public static string BuildRecursiveErrorMessage(this Exception e) + { + var msg = new StringBuilder(); + while (e != null) + { + msg.AppendLine(e.Message); + e = e.InnerException; + } + + return msg.ToString(); + } + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_2016_Additions.sql b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_2016_Additions.sql deleted file mode 100644 index c68e4de7..00000000 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_2016_Additions.sql +++ /dev/null @@ -1,275 +0,0 @@ -ALTER DATABASE current SET COMPATIBILITY_LEVEL=130 -GO - -/* Dropping previous master key in master db that could have been created from other runs */ -IF ( EXISTS(SELECT name FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##')) DROP MASTER KEY - -CREATE MASTER KEY ENCRYPTION BY PASSWORD= 'Password01!'; - -OPEN MASTER KEY DECRYPTION BY PASSWORD = 'Password01!'; - - -CREATE DATABASE SCOPED CREDENTIAL AlterEgo WITH IDENTITY = 'RettigB', - SECRET = 'sdrlk8$40-dksli87nNN8'; - -GO - --- Row-Level Security -CREATE TABLE [dbo].[Sales1] -( - OrderID INT, - SalesRep SYSNAME NOT NULL, - Product VARCHAR(10), - Qty INT -); - -GO - -CREATE TABLE [dbo].[Sales2] -( - OrderID INT, - SalesRep SYSNAME NOT NULL, - Product VARCHAR(10), - Qty INT -); - -GO - -CREATE FUNCTION [dbo].[fn_securitypredicate](@SalesRep AS SYSNAME) - RETURNS TABLE -WITH SCHEMABINDING -AS - RETURN SELECT 1 AS fn_securitypredicate_result -WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'Manager'; - - -GO - -CREATE SECURITY POLICY [dbo].[SalesFilter] -ADD FILTER PREDICATE [dbo].[fn_securitypredicate]([SalesRep]) ON [dbo].[Sales1], -ADD FILTER PREDICATE [dbo].[fn_securitypredicate]([SalesRep]) ON [dbo].[Sales2], -ADD BLOCK PREDICATE [dbo].[fn_securitypredicate]([SalesRep]) ON [dbo].[Sales1], -ADD BLOCK PREDICATE [dbo].[fn_securitypredicate]([SalesRep]) ON [dbo].[Sales2] AFTER UPDATE -WITH (STATE = OFF) -NOT FOR REPLICATION - -GO - -CREATE COLUMN MASTER KEY CMK1 -WITH ( - KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE', - KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420' - ); - -GO - -CREATE COLUMN MASTER KEY CMK2 -WITH ( - KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE', - KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420' - ); - -GO - -CREATE COLUMN ENCRYPTION KEY TwoValueCEK -WITH VALUES -( - COLUMN_MASTER_KEY = CMK1, - ALGORITHM = 'RSA_OAEP', - ENCRYPTED_VALUE = 0x016E000001630075007200720065006E00740075007300650072002F006D0079002F0037006300380061003100310033003400320037003800620037003000630038003100390062003900630039003400360061006600340039006500610030003200650038006200650038003400340065006C33A82ECF04A7185824B4545457AC5244CD9C219E64067B9520C0081B8399B58C2863F7494ABE3694BD87D55FFD7576FFDC47C28F94ECC99577DF4FB8FA19AA95764FEF889CDE0F176DA5897B74382FBB22756CE2921050A09201A0EB6AF3D6091014C30146EA62635EE8CBF0A8074DEDFF125CEA80D1C0F5E8C58750A07D270E2A8BF824EE4C0C156366BF26D38CCE49EBDD5639A2DF029A7DBAE5A5D111F2F2FA3246DF8C2FA83C1E542C10570FADA98F6B29478DC58CE5CBDD407CCEFCDB97814525F6F32BECA266014AC346AC39C4F185C6C0F0A24FEC4DFA015649624692DE7865B9827BA22C3B574C9FD169F822B609F902288C5880EB25F14BD990D871B1BC4BA3A5B237AF76D26354773FA2A25CF4511AF58C911E601CFCB1905128C997844EED056C2AE7F0B48700AB41307E470FF9520997D0EB0D887DE11AFE574FFE845B7DC6C03FEEE8D467236368FC0CB2FDBD54DADC65B10B3DE6C80DF8B7B3F8F3CE5BE914713EE7B1FA5B7A578359592B8A5FDFDDE5FF9F392BC87C3CD02FBA94582AC063BBB9FFAC803FD489E16BEB28C4E3374A8478C737236A0B232F5A9DDE4D119573F1AEAE94B2192B81575AD6F57E670C1B2AB91045124DFDAEC2898F3F0112026DFC93BF9391D667D1AD7ED7D4E6BB119BBCEF1D1ADA589DD3E1082C3DAD13223BE438EB9574DA04E9D8A06320CAC6D3EC21D5D1C2A0AA484C7C -), -( - COLUMN_MASTER_KEY = CMK2, - ALGORITHM = 'RSA_OAEP', - ENCRYPTED_VALUE = 0x016E000001630075007200720065006E00740075007300650072002F006D0079002F0064006500650063006200660034006100340031003000380034006200350033003200360066003200630062006200350030003600380065003900620061003000320030003600610037003800310066001DDA6134C3B73A90D349C8905782DD819B428162CF5B051639BA46EC69A7C8C8F81591A92C395711493B25DCBCCC57836E5B9F17A0713E840721D098F3F8E023ABCDFE2F6D8CC4339FC8F88630ED9EBADA5CA8EEAFA84164C1095B12AE161EABC1DF778C07F07D413AF1ED900F578FC00894BEE705EAC60F4A5090BBE09885D2EFE1C915F7B4C581D9CE3FDAB78ACF4829F85752E9FC985DEB8773889EE4A1945BD554724803A6F5DC0A2CD5EFE001ABED8D61E8449E4FAA9E4DD392DA8D292ECC6EB149E843E395CDE0F98D04940A28C4B05F747149B34A0BAEC04FFF3E304C84AF1FF81225E615B5F94E334378A0A888EF88F4E79F66CB377E3C21964AACB5049C08435FE84EEEF39D20A665C17E04898914A85B3DE23D56575EBC682D154F4F15C37723E04974DB370180A9A579BC84F6BC9B5E7C223E5CBEE721E57EE07EFDCC0A3257BBEBF9ADFFB00DBF7EF682EC1C4C47451438F90B4CF8DA709940F72CFDC91C6EB4E37B4ED7E2385B1FF71B28A1D2669FBEB18EA89F9D391D2FDDEA0ED362E6A591AC64EF4AE31CA8766C259ECB77D01A7F5C36B8418F91C1BEADDD4491C80F0016B66421B4B788C55127135DA2FA625FB7FD195FB40D90A6C67328602ECAF3EC4F5894BFD84A99EB4753BE0D22E0D4DE6A0ADFEDC80EB1B556749B4A8AD00E73B329C95827AB91C0256347E85E3C5FD6726D0E1FE82C925D3DF4A9 -); - -GO - -CREATE TABLE Customers ( - CustName nvarchar(60), - SSN varchar(11) - COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = TwoValueCEK, - ENCRYPTION_TYPE = DETERMINISTIC , - ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'), - Age int NULL, - ACTNO varchar(11) - ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = TwoValueCEK, - ENCRYPTION_TYPE = RANDOMIZED, - ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') -); - -GO - -USE [$(DatabaseName)] - -GO - -DBCC TRACEON(4631,-1) - -GO - -OPEN MASTER KEY DECRYPTION BY PASSWORD = 'Password01!'; - -CREATE DATABASE SCOPED CREDENTIAL cred1 WITH IDENTITY = 'test_user', SECRET = '$(Secret)'; - -CREATE EXTERNAL DATA SOURCE eds1 - WITH ( - TYPE = HADOOP, - LOCATION = '$(DataSourceLocation)', - CREDENTIAL = cred1 - ); - -CREATE EXTERNAL DATA SOURCE eds2 - WITH ( - TYPE = HADOOP, - LOCATION = '$(DataSourceLocation)' - ); - -CREATE EXTERNAL FILE FORMAT eff1 - WITH ( - FORMAT_TYPE = DELIMITEDTEXT - ); - -CREATE EXTERNAL FILE FORMAT eff2 - WITH ( - FORMAT_TYPE = ORC - ); - -CREATE EXTERNAL FILE FORMAT eff3 - WITH ( - FORMAT_TYPE = PARQUET - ); - -CREATE EXTERNAL FILE FORMAT eff4 - WITH ( - FORMAT_TYPE = RCFILE, - SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' - ); - -CREATE EXTERNAL FILE FORMAT eff5 - WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (FIELD_TERMINATOR = '|', STRING_DELIMITER = ';', DATE_FORMAT = 'MM-dd-yyyy', USE_TYPE_DEFAULT = FALSE) - ); - -CREATE EXTERNAL FILE FORMAT eff6 - WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (FIELD_TERMINATOR = '|') - ); - -CREATE EXTERNAL FILE FORMAT eff7 - WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (DATE_FORMAT = 'MM-dd-yyyy', FIELD_TERMINATOR = '|') - ); - -CREATE EXTERNAL FILE FORMAT eff8 - WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (DATE_FORMAT = 'MM-dd-yyyy', FIELD_TERMINATOR = '|', STRING_DELIMITER = ';') - ); - -CREATE EXTERNAL FILE FORMAT eff9 - WITH ( - FORMAT_TYPE = DELIMITEDTEXT, - FORMAT_OPTIONS (DATE_FORMAT = 'MM-dd-yyyy', FIELD_TERMINATOR = '|', STRING_DELIMITER = ';'), - DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec' - ); - -CREATE EXTERNAL FILE FORMAT eff10 - WITH ( - FORMAT_TYPE = RCFILE, - SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe', - DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec' - ); - -CREATE EXTERNAL FILE FORMAT eff11 - WITH ( - FORMAT_TYPE = ORC, - DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec' - ); - -CREATE EXTERNAL FILE FORMAT eff12 - WITH ( - FORMAT_TYPE = PARQUET, - DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec' - ); - -CREATE EXTERNAL TABLE bands1 -( - id INTEGER NOT NULL, - name VARCHAR(50) NOT NULL, - origin CHAR(3), - rate FLOAT, - experience SMALLINT - ) - WITH ( - LOCATION = '/bands.dat', - DATA_SOURCE = eds1, - FILE_FORMAT = eff1 - ); - -CREATE EXTERNAL TABLE bands2 -( - id INTEGER NOT NULL, - name VARCHAR(50) NOT NULL, - origin CHAR(3), - rate FLOAT, - experience SMALLINT - ) - WITH ( - LOCATION = '/bands.dat', - DATA_SOURCE = eds2, - FILE_FORMAT = eff1 - ); - -CREATE EXTERNAL TABLE bands3 -( - id INTEGER NOT NULL, - name VARCHAR(50) NOT NULL, - origin CHAR(3), - rate FLOAT, - experience SMALLINT - ) - WITH ( - LOCATION = '/bands.dat', - DATA_SOURCE = eds2, - FILE_FORMAT = eff1, - REJECT_TYPE = VALUE, - REJECT_VALUE = 0 - ); - -CREATE EXTERNAL TABLE bands4 -( - id INTEGER NOT NULL, - name VARCHAR(50) NOT NULL, - origin CHAR(3), - rate FLOAT, - experience SMALLINT - ) - WITH ( - LOCATION = '/bands.dat', - DATA_SOURCE = eds1, - FILE_FORMAT = eff1, - REJECT_TYPE = PERCENTAGE, - REJECT_VALUE = 30.5, - REJECT_SAMPLE_VALUE = 10 - ); - -CREATE EXTERNAL TABLE bands5 -( - id INTEGER NOT NULL, - name VARCHAR(50) NOT NULL, - origin CHAR(3), - rate FLOAT, - experience SMALLINT - ) - WITH ( - LOCATION = '/bands.dat', - DATA_SOURCE = eds1, - FILE_FORMAT = eff1, - REJECT_TYPE = VALUE, - REJECT_VALUE = 30 - ); \ No newline at end of file diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_Additions.sql b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_Additions.sql deleted file mode 100644 index dea7fcbf..00000000 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/TestScripts/Sql_Additions.sql +++ /dev/null @@ -1,298 +0,0 @@ --- create signature -ADD SIGNATURE TO [Procedure1] - BY CERTIFICATE [Certificate1] - WITH PASSWORD = 'pGFD4bb925DGvbd2439587y' ; -GO ---Create a queue to receive messages. -CREATE QUEUE NotifyQueue ; -GO ---Create a service on the queue that references ---the event notifications contract. -CREATE SERVICE NotifyService -ON QUEUE NotifyQueue -([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]); -GO ---Create the event notification on queue. -CREATE EVENT NOTIFICATION Notify_ALTER_T1 -ON QUEUE notifyqueue -FOR QUEUE_ACTIVATION -TO SERVICE 'NotifyService', -'8140a771-3c4b-4479-8ac0-81008ab17984'; -GO ---Create the event notification on database -CREATE EVENT NOTIFICATION Notify_ALTER_T1 -ON DATABASE -FOR ALTER_TABLE -TO SERVICE 'NotifyService', - '8140a771-3c4b-4479-8ac0-81008ab17984'; -GO - -CREATE FUNCTION [dbo].[TableFunctionWithComputedColumns] -( - -- Add the parameters for the function here - @p1 int = 2, - @p2 nchar(10) = NUll -) -RETURNS -@Table_Var TABLE -( - -- Add the column definitions for the TABLE variable here - c1 int, - c2 nchar(10), - c3 AS 1 * 3 -) -AS -BEGIN - -- Fill the table variable with the rows for your result set - INSERT INTO @Table_Var - SELECT a.column_1, a.column_2 - FROM Table_1 a - WHERE a.column_1 > 5 - - INSERT INTO @Table_Var - SELECT column_1, 'From 2' - FROM Table_2 - WHERE @p1 > column_1 - - RETURN -END -GO - -CREATE FUNCTION [dbo].[TableFunctionWithComputedColumnsEncrypted] -( - -- Add the parameters for the function here - @p1 int = 2, - @p2 nchar(10) -) -RETURNS -@Table_Var TABLE -( - -- Add the column definitions for the TABLE variable here - c1 int, - c2 nchar(10), - c3 AS 1 * 3 -) -WITH ENCRYPTION -AS -BEGIN - -- Fill the table variable with the rows for your result set - INSERT INTO @Table_Var - SELECT a.column_1, a.column_2 - FROM Table_1 a - WHERE a.column_1 > 5 - - INSERT INTO @Table_Var - SELECT column_1, 'From 2' - FROM Table_2 - WHERE @p1 > column_1 - - RETURN -END -GO - -Create table [dbo].[referenced_table] (C1 int, C2 int); - -GO - -CREATE PROCEDURE GetReferenedTable -AS -BEGIN -SELECT * from [dbo].[referenced_table]; -END -GO -exec sp_addextendedproperty N'microsoft_database_tools_support', 'GetReferenedTable', N'SCHEMA', 'dbo', N'PROCEDURE' ,'GetReferenedTable' -GO -DISABLE TRIGGER [Trigger_1] - ON DATABASE; -GO - -CREATE VIEW [dbo].[View_2] (c1) -AS -SELECT column_1 as c1 -FROM dbo.Table_1 - -GO - -exec sp_addextendedproperty 'prop_ex', 'Table_1', 'SCHEMA', 'dbo', 'TABLE', 'Table_1' - -GO - -exec sp_addextendedproperty 'prop_ex', 'column_1', 'SCHEMA', 'dbo', 'TABLE', 'Table_1', 'COLUMN', 'column_1' -GO - -CREATE TABLE dbo.MultipleIndexTable -( [c1] INT NOT NULL CHECK (c1 > 0), -[c2] int default 10 null, -PRIMARY KEY NONCLUSTERED (c1 ASC), -UNIQUE CLUSTERED (c1 ASC, c2 DESC) -) - -GO - -CREATE TRIGGER [Trigger_2] -ON DATABASE -FOR DROP_TABLE -AS - SELECT COUNT(column_1) from dbo.Table_1 - RAISERROR ('You must disable Trigger "Trigger_1" to drop synonyms!',10, 1) - ROLLBACK - -GO - -SET ANSI_NULLS OFF -GO - -SET QUOTED_IDENTIFIER OFF -GO - -DISABLE TRIGGER [Trigger_1] ON DATABASE -GO - -GO - -CREATE TABLE dbo.Table_3 -( - c1 int, - c2 int, -) ON PartitionScheme(c1) - -GO -CREATE TABLE [dbo].[Different_WithAppend_Table]( -[Id] [int] IDENTITY(1,1) NOT NULL, -[Col] [char](1) NULL -) ON [PRIMARY] - -GO - -CREATE FUNCTION [dbo].[EncryptedFunctionWithConstraints] -(@p1 INT) -RETURNS - @GeneratedTableName TABLE ( - [c0] INT NOT NULL PRIMARY KEY, - [c1] INT DEFAULT ((1)) NULL, - [c2] NCHAR (10) NULL, - [c3] INT UNIQUE , - CHECK ([c1]>(0))) -WITH ENCRYPTION -AS -BEGIN - insert into @GeneratedTableName values (1,1, 'abc',1); - RETURN -END -GO -CREATE TABLE [[] (c1 int) -GO -CREATE TABLE []]] (c1 int) -GO -CREATE TABLE [asdf'[] (c1 int) -GO -CREATE TABLE [噂構申表5] (c1 int) -GO --- Casing of NULL is explicit 'NUll' -CREATE PROC CasingOnDefaultValue @param1 int = NUll, @param2 nvarchar(123) = N'abc' -AS -BEGIN - select 1 as a -END --- permissions -GO -CREATE USER nologon4 without login -GO -GRANT VIEW DEFINITION ON CasingOnDefaultValue to nologon4 -GO -CREATE USER granter without login -GO -GRANT CONNECT TO granter WITH GRANT OPTION; -GO -DENY CONNECT TO nologon4 CASCADE AS granter; -GO -GRANT VIEW DEFINITION ON [噂構申表5] to nologon4 -GO -GRANT VIEW DEFINITION ON [[] TO nologon4 -GO -GRANT VIEW DEFINITION ON []]] TO nologon4 -GO -GRANT VIEW DEFINITION ON [asdf'[] TO nologon4 -GO -GRANT SELECT ON dbo.Table_1 to nologon4 -GO -GRANT SELECT ON dbo.Table_2 to nologon4 -GO -REVOKE SELECT ON dbo.Table_2(column_2) TO nologon4 -GO -GRANT SELECT ON dbo.View_1 to nologon4 -GO -GRANT SELECT ON dbo.EncryptedView(A) to nologon4 -GO -GRANT EXECUTE ON dbo.Procedure1 TO nologon4 -GO -GRANT EXECUTE ON dbo.CLR_SimpleResultsetProcedure TO nologon4 -GO -GRANT EXECUTE ON dbo.EncryptedProcedure TO nologon4 -GO -GRANT VIEW DEFINITION ON CERTIFICATE :: Certificate1 TO nologon4 -GO -GRANT EXECUTE ON dbo.ScalarFunction1 TO nologon4 -GO -GRANT EXECUTE ON dbo.EncryptedFunction TO nologon4 -GO -GRANT SELECT ON dbo.InlineFunction_1 TO nologon4 -GO -GRANT SELECT ON dbo.TableFunction1 TO nologon4 -GO -GRANT SELECT ON dbo.CLRTableValueFunction TO nologon4 -GO -GRANT VIEW DEFINITION ON TYPE::dbo.dataType To nologon4 -GO -GRANT VIEW DEFINITION ON FULLTEXT CATALOG ::FullTextCatalog1 To nologon4 -GO -GRANT VIEW DEFINITION ON XML SCHEMA COLLECTION :: dbo.XmlSchemaCollection To nologon4 -GO -GRANT VIEW DEFINITION ON ASSEMBLY :: [Geometry] To nologon4 -GO -GRANT VIEW DEFINITION ON TYPE:: dbo.Angle To nologon4 -GO -GRANT VIEW DEFINITION ON dbo.[Concat] To nologon4 -GO -GRANT VIEW DEFINITION ON dbo.Synonym_1 To nologon4 -GO -GRANT VIEW DEFINITION ON SCHEMA :: Schema1 To nologon4 -GO -GRANT VIEW DEFINITION ON SYMMETRIC KEY :: SymKey1 To nologon4 -GO -GRANT VIEW DEFINITION ON ASYMMETRIC KEY :: AsmKey1 To nologon4 -GO -GRANT VIEW DEFINITION ON dbo.Queue1 To nologon4 -GO -GRANT VIEW DEFINITION ON dbo.NotifyQueue To nologon4 -GO -GRANT VIEW DEFINITION ON SERVICE :: Service1 To nologon4 -GO -GRANT VIEW DEFINITION ON SERVICE :: NotifyService To nologon4 -GO -GRANT VIEW DEFINITION ON CONTRACT :: Contract1 To nologon4 -GO -GRANT VIEW DEFINITION ON MESSAGE TYPE :: MessageType1 To nologon4 -GO -GRANT VIEW DEFINITION ON ROUTE :: AutoCreatedLocal To nologon4 -GO -GRANT VIEW DEFINITION ON ROUTE :: Route1 To nologon4 -GO -GRANT VIEW DEFINITION ON REMOTE SERVICE BINDING :: ServiceBinding1 To nologon4 -GO -GRANT SELECT ON dbo.referenced_table To nologon4 -GO -GRANT SELECT ON dbo.TableFunctionWithComputedColumns To nologon4 -GO -GRANT SELECT ON dbo.TableFunctionWithComputedColumnsEncrypted To nologon4 -GO -GRANT SELECT ON dbo.View_2 TO nologon4 -GO -GRANT SELECT ON dbo.MultipleIndexTable TO nologon4 -GO -GRANT SELECT ON dbo.Table_3 TO nologon4 -GO -GRANT SELECT ON dbo.Different_WithAppend_Table TO nologon4 -GO -GRANT SELECT ON dbo.[EncryptedFunctionWithConstraints] TO nologon4 -GO \ No newline at end of file diff --git a/test/Microsoft.SqlTools.ServiceLayer.TestDriver.Tests/SqlScriptPublishModelTests.cs b/test/Microsoft.SqlTools.ServiceLayer.TestDriver.Tests/SqlScriptPublishModelTests.cs index eecb2ea7..850d1017 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.TestDriver.Tests/SqlScriptPublishModelTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.TestDriver.Tests/SqlScriptPublishModelTests.cs @@ -90,9 +90,9 @@ namespace Microsoft.SqlTools.ServiceLayer.TestDriver.Tests public async Task ScriptTable() { using (TestServiceDriverProvider testService = new TestServiceDriverProvider()) - { + { ScriptingParams requestParams = new ScriptingParams - { + { ScriptDestination = "ToEditor", ConnectionString = this.Northwind.ConnectionString, ScriptOptions = new ScriptOptions @@ -269,8 +269,8 @@ namespace Microsoft.SqlTools.ServiceLayer.TestDriver.Tests { ScriptingParams requestParams = new ScriptingParams { - FilePath = "This path doesn't event exist", - ConnectionString = "Server=Temp;Database=Temp;User Id=Temp;Password=Temp", + FilePath = "This path doesn't even exist", + ConnectionString = "Server=Temp;Database=Temp;User Id=Temp;", ScriptOptions = new ScriptOptions { TypeOfDataToScript = "SchemaAndData", @@ -298,7 +298,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TestDriver.Tests ScriptOptions = new ScriptOptions { }, - ScriptingObjects = new List + ScriptingObjects = new List { new ScriptingObject { diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Connection/ConnectionServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Connection/ConnectionServiceTests.cs index f1f6219b..124d8fde 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Connection/ConnectionServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Connection/ConnectionServiceTests.cs @@ -64,7 +64,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection CancellationToken token; bool ready = false; mockConnection.Setup(x => x.OpenAsync(It.IsAny())) - .Callback(t => + .Callback(t => { // Pass the token to the return handler and signal the main thread to cancel token = t; @@ -107,7 +107,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection // Wait for the connection task to finish connectTask.Wait(); - + // Verify that the connection was cancelled (no connection was created) Assert.Null(connectTask.Result.ConnectionId); @@ -125,7 +125,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection CancellationToken token; bool ready = false; mockConnection.Setup(x => x.OpenAsync(It.IsAny())) - .Callback(t => + .Callback(t => { // Pass the token to the return handler and signal the main thread to cancel token = t; @@ -139,7 +139,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection } return Task.FromResult(true); }); - + // Given a second connection that succeeds var mockConnection2 = new Mock { CallBase = true }; mockConnection2.Setup(x => x.OpenAsync(It.IsAny())) @@ -175,7 +175,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection // Wait for the first connection task to finish connectTask.Wait(); - + // Verify that the first connection was cancelled (no connection was created) Assert.Null(connectTask.Result.ConnectionId); @@ -193,13 +193,13 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection CancellationToken token; bool ready = false; mockConnection.Setup(x => x.OpenAsync(It.IsAny())) - .Callback(t => + .Callback(t => { // Pass the token to the return handler and signal the main thread to cancel token = t; ready = true; }) - .Returns(() => + .Returns(() => { if (TestUtils.WaitFor(() => token.IsCancellationRequested)) { @@ -236,7 +236,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection // Wait for the first connection task to finish connectTask.Wait(); - + // Verify that the first connection was cancelled (no connection was created) Assert.Null(connectTask.Result.ConnectionId); @@ -263,7 +263,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection OwnerUri = "file:///my/test/file.sql", Connection = connectionDetails }); - + // check that a connection was created Assert.NotEmpty(connectionResult.ConnectionId); } @@ -319,10 +319,10 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection const string otherDbName = "other"; // Given a connection that returns the database name var dummySqlConnection = new TestSqlConnection(null); - + var mockFactory = new Mock(); mockFactory.Setup(factory => factory.CreateSqlConnection(It.IsAny(), It.IsAny())) - .Returns((string connString, string azureAccountToken) => + .Returns((string connString, string azureAccountToken) => { dummySqlConnection.ConnectionString = connString; SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(connString); @@ -388,7 +388,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection ServerName = testConnectionDetails.ServerName, DatabaseName = testConnectionDetails.DatabaseName, UserName = "invalidUsername", - Password = "invalidPassword" + Password = Guid.NewGuid().ToString() }; // triggers exception when opening mock connection @@ -438,7 +438,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection AuthenticationType = authType } }); - + // check that an error was caught Assert.NotNull(connectionResult.Messages); Assert.NotEqual(String.Empty, connectionResult.Messages); @@ -472,7 +472,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection AuthenticationType = "Integrated" } }); - + // check that the connection was successful Assert.NotEmpty(connectionResult.ConnectionId); } @@ -487,7 +487,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection var connectionResult = await TestObjects.GetTestConnectionService() .Connect(null); - + // check that an error was caught Assert.NotNull(connectionResult.Messages); Assert.NotEqual(String.Empty, connectionResult.Messages); @@ -595,7 +595,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection [Fact] public async Task ConnectToDatabaseTest() { - // connect to a database instance + // connect to a database instance string ownerUri = "file://my/sample/file.sql"; var connectionResult = await TestObjects.GetTestConnectionService() @@ -663,7 +663,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection // register disconnect callback connectionService.RegisterOnDisconnectTask( - (result, uri) => { + (result, uri) => { callbackInvoked = true; Assert.True(uri.Equals(ownerUri)); return Task.FromResult(true); @@ -779,7 +779,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection .Returns(CreateMockDbConnection(new[] {data})); var connectionService = new ConnectionService(mockFactory.Object); - // connect to a database instance + // connect to a database instance string ownerUri = "file://my/sample/file.sql"; var connectionResult = await connectionService @@ -816,13 +816,13 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection // setup connection service with callback var connectionService = TestObjects.GetTestConnectionService(); connectionService.RegisterOnConnectionTask( - (sqlConnection) => { + (sqlConnection) => { callbackInvoked = true; - return Task.FromResult(true); + return Task.FromResult(true); } ); - - // connect to a database instance + + // connect to a database instance await connectionService.Connect(TestObjects.GetTestConnectionParams()); // verify that a valid connection id was returned @@ -830,7 +830,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection } /// - /// Test ConnectionSummaryComparer + /// Test ConnectionSummaryComparer /// [Fact] public void TestConnectionSummaryComparer() @@ -869,14 +869,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection var service = TestObjects.GetTestConnectionService(); var connectParams = TestObjects.GetTestConnectionParams(); - // connect to a database instance + // connect to a database instance var connectionResult = await service.Connect(connectParams); // verify that a valid connection id was returned Assert.NotNull(connectionResult.ConnectionId); Assert.NotEqual(string.Empty, connectionResult.ConnectionId); Assert.NotNull(new Guid(connectionResult.ConnectionId)); - + // verify that the (URI -> connection) mapping was created ConnectionInfo info; Assert.True(service.TryFindConnection(connectParams.OwnerUri, out info)); @@ -892,8 +892,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection [Fact] public void TestThatLinuxAndOsxSqlExceptionHasNoErrorCode() { - RunIfWrapper.RunIfLinuxOrOSX(() => - { + RunIfWrapper.RunIfLinuxOrOSX(() => + { try { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder @@ -931,7 +931,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection public void TestListDatabasesInvalidParams() { var service = TestObjects.GetTestConnectionService(); - var listParams = new ListDatabasesParams(); + var listParams = new ListDatabasesParams(); Assert.Throws(() => service.ListDatabases(listParams)); listParams.OwnerUri = "file://notmyfile.sql"; Assert.Throws(() => service.ListDatabases(listParams)); @@ -973,7 +973,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection }; } ConnectionSummaryComparer comparer = new ConnectionSummaryComparer(); - + // If I compute a hash code int hashCode = comparer.GetHashCode(summary); if (summary == null || (serverName == null && databaseName == null && userName == null)) @@ -1086,7 +1086,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection await service.Connect(connectParamsDefault); await service.Connect(connectParamsQuery); - // We should have one ConnectionInfo and 2 DbConnections + // We should have one ConnectionInfo and 2 DbConnections ConnectionInfo connectionInfo = service.OwnerToConnectionMap[connectParamsDefault.OwnerUri]; Assert.Equal(2, connectionInfo.CountConnections); Assert.Equal(1, service.OwnerToConnectionMap.Count); @@ -1111,7 +1111,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection }); connectionInfo.ConnectionTypeToConnectionMap[ConnectionType.Query] = mockQueryConnection.Object; - // If we disconnect all open connections with the same URI as used above + // If we disconnect all open connections with the same URI as used above service.Disconnect(disconnectParams); // Close() should have gotten called for both DbConnections @@ -1210,7 +1210,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection await Assert.ThrowsAsync( () => service.GetOrOpenConnection(TestObjects.ScriptUri, ConnectionType.Query)); } - + [Fact] public async Task GetOrOpenAdminDefaultConnection() { @@ -1238,7 +1238,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection // Connect ConnectionService service = TestObjects.GetTestConnectionService(); var connectionResult = await service.Connect(connectionParameters); - + // Verify you can get the connection for default DbConnection defaultConn = await service.GetOrOpenConnection(connectionParameters.OwnerUri, ConnectionType.Default); ConnectionInfo connInfo = service.OwnerToConnectionMap[connectionParameters.OwnerUri]; @@ -1322,10 +1322,10 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection const string otherDbName = "other"; // Given a connection that returns the database name var connection = new TestSqlConnection(null); - + var mockFactory = new Mock(); mockFactory.Setup(factory => factory.CreateSqlConnection(It.IsAny(), It.IsAny())) - .Returns((string connString, string azureAccountToken) => + .Returns((string connString, string azureAccountToken) => { connection.ConnectionString = connString; SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(connString); @@ -1370,12 +1370,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection mockConnection.SetupGet(conn => conn.State).Returns(ConnectionState.Open); mockConnection.Setup(conn => conn.Close()); mockConnection.Setup(conn => conn.Open()); - + var connection = mockConnection.Object; - + var mockFactory = new Mock(); mockFactory.Setup(factory => factory.CreateSqlConnection(It.IsAny(), It.IsAny())) - .Returns((string connString, string azureAccountToken) => + .Returns((string connString, string azureAccountToken) => { connection.ConnectionString = connString; SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(connString); @@ -1395,7 +1395,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection OwnerUri = ownerUri, Connection = TestObjects.GetTestConnectionDetails() }); - + ConnectionInfo testInfo; connectionService.TryFindConnection(ownerUri, out testInfo); @@ -1423,12 +1423,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection mockConnection.SetupGet(conn => conn.State).Returns(ConnectionState.Open); mockConnection.Setup(conn => conn.Close()); mockConnection.Setup(conn => conn.Open()); - + var connection = mockConnection.Object; - + var mockFactory = new Mock(); mockFactory.Setup(factory => factory.CreateSqlConnection(It.IsAny(), It.IsAny())) - .Returns((string connString, string azureAccountToken) => + .Returns((string connString, string azureAccountToken) => { connection.ConnectionString = connString; SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(connString); @@ -1448,7 +1448,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection OwnerUri = ownerUri, Connection = TestObjects.GetTestConnectionDetails() }); - + ConnectionInfo testInfo; connectionService.TryFindConnection(ownerUri, out testInfo); @@ -1467,9 +1467,9 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection [Fact] public void ParseConnectionStringTest() { - // If we make a connection to a live database + // If we make a connection to a live database ConnectionService service = ConnectionService.Instance; - + var connectionString = "Server=tcp:{servername},1433;Initial Catalog={databasename};Persist Security Info=False;User ID={your_username};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"; var details = service.ParseConnectionString(connectionString); diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/CredentialServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/CredentialServiceTests.cs index cd91b799..faed726a 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/CredentialServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/CredentialServiceTests.cs @@ -25,19 +25,19 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials { private static readonly StoreConfig Config = new StoreConfig { - CredentialFolder = ".testsecrets", - CredentialFile = "sqltestsecrets.json", + CredentialFolder = ".testsecrets", + CredentialFile = "sqltestsecrets.json", IsRelativeToUserHomeDir = true }; private const string CredentialId = "Microsoft_SqlToolsTest_TestId"; - private const string Password1 = "P@ssw0rd1"; - private const string Password2 = "2Pass2Furious"; + private readonly string Password1 = Guid.NewGuid().ToString(); + private readonly string Password2 = Guid.NewGuid().ToString(); private const string OtherCredId = CredentialId + "2345"; private const string OtherPassword = CredentialId + "2345"; - // Test-owned credential store used to clean up before/after tests to ensure code works as expected + // Test-owned credential store used to clean up before/after tests to ensure code works as expected // even if previous runs stopped midway through private readonly ICredentialStore credStore; private readonly CredentialService service; @@ -50,7 +50,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials service = new CredentialService(credStore, Config); DeleteDefaultCreds(); } - + public void Dispose() { DeleteDefaultCreds(); @@ -89,7 +89,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials { string errorResponse = null; var contextMock = RequestContextMocks.Create(null).AddErrorHandling((msg, code) => errorResponse = msg); - + await service.HandleSaveCredentialRequest(new Credential(CredentialId), contextMock.Object); TestUtils.VerifyErrorSent(contextMock); Assert.True(errorResponse.Contains("ArgumentException") || errorResponse.Contains("ArgumentNullException")); @@ -202,7 +202,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials TestUtils.VerifyErrorSent(contextMock); Assert.Contains("ArgumentNullException", errorResponse); } - + [Fact] public async Task ReadCredentialThrowsIfIdMissing() { @@ -232,7 +232,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials Assert.Null(actual.Password); })); } - + [Fact] public async Task DeleteCredentialThrowsIfIdMissing() { diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/Win32/CredentialSetTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/Win32/CredentialSetTests.cs index 07337c7a..09781c4d 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/Win32/CredentialSetTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Credentials/Win32/CredentialSetTests.cs @@ -1,6 +1,6 @@ // -// Code originally from http://credentialmanagement.codeplex.com/, -// Licensed under the Apache License 2.0 +// Code originally from http://credentialmanagement.codeplex.com/, +// Licensed under the Apache License 2.0 // using System; @@ -15,7 +15,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials.Win32 [Fact] public void CredentialSetCreate() { - RunIfWrapper.RunIfWindows(() => + RunIfWrapper.RunIfWindows(() => { Assert.NotNull(new CredentialSet()); }); @@ -24,7 +24,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials.Win32 [Fact] public void CredentialSetCreateWithTarget() { - RunIfWrapper.RunIfWindows(() => + RunIfWrapper.RunIfWindows(() => { Assert.NotNull(new CredentialSet("target")); }); @@ -33,7 +33,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials.Win32 [Fact] public void CredentialSetShouldBeIDisposable() { - RunIfWrapper.RunIfWindows(() => + RunIfWrapper.RunIfWindows(() => { Assert.True(new CredentialSet() is IDisposable, "CredentialSet needs to implement IDisposable Interface."); }); @@ -42,7 +42,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials.Win32 [Fact] public void CredentialSetLoad() { - RunIfWrapper.RunIfWindows(() => + RunIfWrapper.RunIfWindows(() => { Win32Credential credential = new Win32Credential { @@ -67,7 +67,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials.Win32 [Fact] public void CredentialSetLoadShouldReturnSelf() { - RunIfWrapper.RunIfWindows(() => + RunIfWrapper.RunIfWindows(() => { CredentialSet set = new CredentialSet(); Assert.IsType(set.Load()); @@ -79,12 +79,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials.Win32 [Fact] public void CredentialSetLoadWithTargetFilter() { - RunIfWrapper.RunIfWindows(() => + RunIfWrapper.RunIfWindows(() => { Win32Credential credential = new Win32Credential { Username = "filteruser", - Password = "filterpassword", + Password = Guid.NewGuid().ToString(), Target = "filtertarget" }; credential.Save(); diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Utility/TestObjects.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Utility/TestObjects.cs index ec65ae74..f4630cd4 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Utility/TestObjects.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Utility/TestObjects.cs @@ -23,7 +23,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility /// public class TestObjects { - + public const string ScriptUri = "file://some/file.sql"; /// @@ -48,7 +48,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility public static ConnectParams GetTestConnectionParams(bool useConnectionString = false) { - return new ConnectParams() + return new ConnectParams() { OwnerUri = ScriptUri, Connection = GetTestConnectionDetails(useConnectionString) @@ -88,14 +88,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility { return new ConnectionDetails() { - ConnectionString = "User ID=user;PWD=password;Database=databaseName;Server=serverName" + ConnectionString = $"User ID=user;PWD={Guid.NewGuid().ToString()};Database=databaseName;Server=serverName" }; } return new ConnectionDetails() { UserName = "user", - Password = "password", + Password = Guid.NewGuid().ToString(), DatabaseName = "databaseName", ServerName = "serverName" }; @@ -198,7 +198,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility private string _database; private ConnectionState _state; - public TestSqlConnection() + public TestSqlConnection() { } @@ -207,7 +207,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility { Data = data; } - + internal TestResultSet[] Data { get; set; } protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) @@ -233,7 +233,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility public override string ConnectionString { get; set; } public override string Database - { + { get { return _database; } }