Skip to content

Commit

Permalink
added tSQLt.RemoveExternalAccessKey
Browse files Browse the repository at this point in the history
Cleaned up run methods
  • Loading branch information
mbt1 committed Jan 23, 2016
1 parent 6895981 commit 206dafb
Show file tree
Hide file tree
Showing 9 changed files with 351 additions and 82 deletions.
1 change: 1 addition & 0 deletions Source/BuildOrder.txt
Expand Up @@ -12,6 +12,7 @@ tSQLt.NewTestClass.ssp.sql
tSQLt.Fail.ssp.sql
tSQLt.class.sql
../Build/temp/tSQLt.Private_GetExternalAccessKeyBytes.sql
tSQLt.RemoveExternalAccessKey.ssp.sql
tSQLt.InstallExternalAccessKey.ssp.sql
tSQLt.EnableExternalAccess.ssp.sql
tSQLt.Private_Configurations.tbl.sql
Expand Down
51 changes: 32 additions & 19 deletions Source/Run_Methods.sql
@@ -1,3 +1,4 @@
IF OBJECT_ID('tSQLt.Private_Init') IS NOT NULL DROP PROCEDURE tSQLt.Private_Init;
IF OBJECT_ID('tSQLt.Private_GetSetupProcedureName') IS NOT NULL DROP PROCEDURE tSQLt.Private_GetSetupProcedureName;
IF OBJECT_ID('tSQLt.Private_CleanTestResult') IS NOT NULL DROP PROCEDURE tSQLt.Private_CleanTestResult;
IF OBJECT_ID('tSQLt.Private_RunTest') IS NOT NULL DROP PROCEDURE tSQLt.Private_RunTest;
Expand All @@ -8,7 +9,7 @@ IF OBJECT_ID('tSQLt.Private_RunAll') IS NOT NULL DROP PROCEDURE tSQLt.Private_Ru
IF OBJECT_ID('tSQLt.Private_RunNew') IS NOT NULL DROP PROCEDURE tSQLt.Private_RunNew;
IF OBJECT_ID('tSQLt.Private_GetCursorForRunAll') IS NOT NULL DROP PROCEDURE tSQLt.Private_GetCursorForRunAll;
IF OBJECT_ID('tSQLt.Private_GetCursorForRunNew') IS NOT NULL DROP PROCEDURE tSQLt.Private_GetCursorForRunNew;
IF OBJECT_ID('tSQLt.Private_CallRunWithConfiguredFormatter') IS NOT NULL DROP PROCEDURE tSQLt.Private_CallRunWithConfiguredFormatter;
IF OBJECT_ID('tSQLt.Private_RunMethodHandler') IS NOT NULL DROP PROCEDURE tSQLt.Private_RunMethodHandler;
IF OBJECT_ID('tSQLt.Private_InputBuffer') IS NOT NULL DROP PROCEDURE tSQLt.Private_InputBuffer;
IF OBJECT_ID('tSQLt.RunAll') IS NOT NULL DROP PROCEDURE tSQLt.RunAll;
IF OBJECT_ID('tSQLt.RunNew') IS NOT NULL DROP PROCEDURE tSQLt.RunNew;
Expand Down Expand Up @@ -308,8 +309,6 @@ SET NOCOUNT ON;
@IsSchema = isSchema,
@IsTestCase = isTestCase
FROM tSQLt.Private_ResolveName(@TestName);

EXEC tSQLt.Private_CleanTestResult;

IF @IsSchema = 1
BEGIN
Expand Down Expand Up @@ -338,8 +337,6 @@ BEGIN
DECLARE @TestClassName NVARCHAR(MAX);
DECLARE @TestProcName NVARCHAR(MAX);

EXEC tSQLt.Private_CleanTestResult;

DECLARE @TestClassCursor CURSOR;
EXEC @GetCursorCallback @TestClassCursor = @TestClassCursor OUT;
----
Expand Down Expand Up @@ -401,30 +398,48 @@ BEGIN
END;
GO

CREATE PROCEDURE tSQLt.Private_CallRunWithConfiguredFormatter
@RunMethod NVARCHAR(MAX)
CREATE PROCEDURE tSQLt.Private_Init
AS
BEGIN
DECLARE @TestResultFormatter NVARCHAR(MAX);
SELECT @TestResultFormatter = tSQLt.GetTestResultFormatter();
EXEC tSQLt.Private_CleanTestResult;
END;
GO

CREATE PROCEDURE tSQLt.Private_RunMethodHandler
@RunMethod NVARCHAR(MAX),
@TestResultFormatter NVARCHAR(MAX) = NULL,
@TestName NVARCHAR(MAX) = NULL
AS
BEGIN
SELECT @TestResultFormatter = ISNULL(@TestResultFormatter,tSQLt.GetTestResultFormatter());

EXEC tSQLt.Private_Init;

EXEC @RunMethod @TestResultFormatter;
IF(EXISTS(SELECT * FROM sys.parameters AS P WHERE P.object_id = OBJECT_ID(@RunMethod) AND name = '@TestName'))
BEGIN
EXEC @RunMethod @TestName = @TestName, @TestResultFormatter = @TestResultFormatter;
END
ELSE
BEGIN
EXEC @RunMethod @TestResultFormatter = @TestResultFormatter;
END
END;
GO

--------------------------------------------------------------------------------

GO
CREATE PROCEDURE tSQLt.RunAll
AS
BEGIN
EXEC tSQLt.Private_CallRunWithConfiguredFormatter @RunMethod = 'tSQLt.Private_RunAll';
EXEC tSQLt.Private_RunMethodHandler @RunMethod = 'tSQLt.Private_RunAll';
END;
GO

CREATE PROCEDURE tSQLt.RunNew
AS
BEGIN
EXEC tSQLt.Private_CallRunWithConfiguredFormatter @RunMethod = 'tSQLt.Private_RunNew';
EXEC tSQLt.Private_RunMethodHandler @RunMethod = 'tSQLt.Private_RunNew';
END;
GO

Expand All @@ -437,13 +452,11 @@ END;
GO

CREATE PROCEDURE tSQLt.Run
@TestName NVARCHAR(MAX) = NULL
@TestName NVARCHAR(MAX) = NULL,
@TestResultFormatter NVARCHAR(MAX) = NULL
AS
BEGIN
DECLARE @TestResultFormatter NVARCHAR(MAX);
SELECT @TestResultFormatter = tSQLt.GetTestResultFormatter();

EXEC tSQLt.Private_Run @TestName, @TestResultFormatter;
EXEC tSQLt.Private_RunMethodHandler @RunMethod = 'tSQLt.Private_Run', @TestResultFormatter = @TestResultFormatter, @TestName = @TestName;
END;
GO
CREATE PROCEDURE tSQLt.Private_InputBuffer
Expand Down Expand Up @@ -474,15 +487,15 @@ CREATE PROCEDURE tSQLt.RunWithXmlResults
@TestName NVARCHAR(MAX) = NULL
AS
BEGIN
EXEC tSQLt.Private_Run @TestName, 'tSQLt.XmlResultFormatter';
EXEC tSQLt.Run @TestName = @TestName, @TestResultFormatter = 'tSQLt.XmlResultFormatter';
END;
GO

CREATE PROCEDURE tSQLt.RunWithNullResults
@TestName NVARCHAR(MAX) = NULL
AS
BEGIN
EXEC tSQLt.Private_Run @TestName, 'tSQLt.NullTestResultFormatter';
EXEC tSQLt.Run @TestName = @TestName, @TestResultFormatter = 'tSQLt.NullTestResultFormatter';
END;
GO

Expand Down
6 changes: 6 additions & 0 deletions Source/Source.ssmssqlproj
Expand Up @@ -439,6 +439,12 @@
<AssociatedConnUserName />
<FullPath>tSQLt.Private_ValidateThatAllDataTypesInTableAreSupported.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.RemoveExternalAccessKey.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.RemoveExternalAccessKey.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.RemoveObject.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
Expand Down
5 changes: 2 additions & 3 deletions Source/tSQLt.InstallExternalAccessKey.ssp.sql
Expand Up @@ -5,10 +5,9 @@ GO
CREATE PROCEDURE tSQLt.InstallExternalAccessKey
AS
BEGIN

IF(NOT EXISTS(SELECT 1 FROM sys.login_token AS LT WHERE name = 'sysadmin'))
IF(NOT EXISTS(SELECT * FROM sys.fn_my_permissions(NULL,'server') AS FMP WHERE FMP.permission_name = 'CONTROL SERVER'))
BEGIN
RAISERROR('Only members of sysadmin can execute this procedure.',16,10);
RAISERROR('Only principals with CONTROL SERVER permission can execute this procedure.',16,10);
RETURN -1;
END;

Expand Down
20 changes: 20 additions & 0 deletions Source/tSQLt.RemoveExternalAccessKey.ssp.sql
@@ -0,0 +1,20 @@
IF OBJECT_ID('tSQLt.RemoveExternalAccessKey') IS NOT NULL DROP PROCEDURE tSQLt.RemoveExternalAccessKey;
GO
---Build+
GO
CREATE PROCEDURE tSQLt.RemoveExternalAccessKey
AS
BEGIN
IF(NOT EXISTS(SELECT * FROM sys.fn_my_permissions(NULL,'server') AS FMP WHERE FMP.permission_name = 'CONTROL SERVER'))
BEGIN
RAISERROR('Only principals with CONTROL SERVER permission can execute this procedure.',16,10);
RETURN -1;
END;

IF SUSER_ID('tSQLtExternalAccessKey') IS NOT NULL DROP LOGIN tSQLtExternalAccessKey;
EXEC master.sys.sp_executesql N'IF ASYMKEY_ID(''tSQLtExternalAccessKey'') IS NOT NULL DROP ASYMMETRIC KEY tSQLtExternalAccessKey;';
EXEC master.sys.sp_executesql N'IF EXISTS(SELECT * FROM sys.assemblies WHERE name = ''tSQLtExternalAccessKey'') DROP ASSEMBLY tSQLtExternalAccessKey;';
END;
GO
---Build-
GO
36 changes: 15 additions & 21 deletions Tests.SA/InstallExternalAccessKeyTests.class.sql
@@ -1,5 +1,15 @@
EXEC tSQLt.NewTestClass 'InstallExternalAccessKeyTests';
GO
DECLARE @cmd NVARCHAR(MAX);
SET @cmd = 'IF(SUSER_ID(''InstallExternalAccessKeyTestsUser1'')) IS NOT NULL DROP LOGIN InstallExternalAccessKeyTestsUser1;';
EXEC master.sys.sp_executesql @cmd;
SET @cmd = 'IF(SCHEMA_ID(''InstallExternalAccessKeyTestsUser1'')) IS NOT NULL DROP SCHEMA InstallExternalAccessKeyTestsUser1;';
EXEC master.sys.sp_executesql @cmd;
EXEC sys.sp_executesql @cmd;
SET @cmd = 'IF(USER_ID(''InstallExternalAccessKeyTestsUser1'')) IS NOT NULL DROP USER InstallExternalAccessKeyTestsUser1;';
EXEC master.sys.sp_executesql @cmd;
EXEC sys.sp_executesql @cmd;
GO
CREATE PROCEDURE InstallExternalAccessKeyTests.DropExistingItems
AS
BEGIN
Expand All @@ -8,7 +18,7 @@ BEGIN
EXEC master.sys.sp_executesql N'IF EXISTS(SELECT * FROM sys.assemblies WHERE name = ''tSQLtExternalAccessKey'') DROP ASSEMBLY tSQLtExternalAccessKey;';
END;
GO
CREATE PROCEDURE InstallExternalAccessKeyTests.[test InstallExternalAccessKey is signed with same key as tSQLt.clr]
CREATE PROCEDURE InstallExternalAccessKeyTests.[test tSQLtExternalAccessKey install data is signed with same key as tSQLt.clr]
AS
BEGIN
DECLARE @EAKey VARBINARY(100);
Expand Down Expand Up @@ -245,26 +255,15 @@ BEGIN
SET @cmd = 'CREATE LOGIN InstallExternalAccessKeyTestsUser1 WITH PASSWORD=''(*&^#@($&^%(&@#^$%(!&@'';';
EXEC master.sys.sp_executesql @cmd;

IF(CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR(128)),4) AS INT) < 11)
SET @cmd = 'CREATE USER InstallExternalAccessKeyTestsUser1;ALTER ROLE db_owner ADD MEMBER InstallExternalAccessKeyTestsUser1;';
IF((SELECT I.SqlVersion FROM tSQLt.Info() AS I) < 11)
BEGIN
SET @cmd = 'CREATE USER InstallExternalAccessKeyTestsUser1;EXEC sys.sp_addrolemember @rolename = ''db_owner'', @membername = ''InstallExternalAccessKeyTestsUser1'';';
END
ELSE
BEGIN
SET @cmd = 'CREATE USER InstallExternalAccessKeyTestsUser1;ALTER ROLE db_owner ADD MEMBER InstallExternalAccessKeyTestsUser1;';
END
EXEC master.sys.sp_executesql @cmd;
EXEC sys.sp_executesql @cmd;

SET @cmd = 'GRANT ALTER ANY LOGIN TO InstallExternalAccessKeyTestsUser1;';
SET @cmd = 'GRANT EXTERNAL ACCESS ASSEMBLY TO InstallExternalAccessKeyTestsUser1 WITH GRANT OPTION;'+@cmd;
EXEC master.sys.sp_executesql @cmd;

-- SET @cmd = 'ALTER SERVER ROLE securityadmin ADD MEMBER InstallExternalAccessKeyTestsUser1;';
-- EXEC master.sys.sp_executesql @cmd;


EXEC tSQLt.ExpectException @ExpectedMessage = 'Only members of sysadmin can execute this procedure.';
EXEC tSQLt.ExpectException @ExpectedMessage = 'Only principals with CONTROL SERVER permission can execute this procedure.';

EXECUTE AS LOGIN = 'InstallExternalAccessKeyTestsUser1';
EXEC tSQLt.InstallExternalAccessKey;
Expand All @@ -276,9 +275,6 @@ GO
CREATE PROCEDURE InstallExternalAccessKeyTests.[test sysadmin can execute procedure]
AS
BEGIN
--Only execute on SQL 2012 and later
IF(CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR(128)),4) AS INT) > 10)
BEGIN

EXEC InstallExternalAccessKeyTests.DropExistingItems;

Expand All @@ -287,15 +283,14 @@ BEGIN
SET @cmd = 'CREATE LOGIN InstallExternalAccessKeyTestsUser1 WITH PASSWORD=''(*&^#@($&^%(&@#^$%(!&@'';';
EXEC master.sys.sp_executesql @cmd;

SET @cmd = 'ALTER SERVER ROLE sysadmin ADD MEMBER InstallExternalAccessKeyTestsUser1;';
SET @cmd = 'GRANT CONTROL SERVER TO InstallExternalAccessKeyTestsUser1;';
EXEC master.sys.sp_executesql @cmd;

EXEC tSQLt.ExpectNoException;

EXECUTE AS LOGIN = 'InstallExternalAccessKeyTestsUser1';
EXEC tSQLt.InstallExternalAccessKey;
REVERT;
END

END;
GO
Expand All @@ -313,4 +308,3 @@ BEGIN

END;
GO

0 comments on commit 206dafb

Please sign in to comment.