|
10 | 10 | context 'type =>' do
|
11 | 11 | describe 'invalid' do
|
12 | 12 | let(:additional_params) { {
|
13 |
| - :type => 'invalid', |
| 13 | + :type => 'invalid', |
14 | 14 | } }
|
15 | 15 | let(:raise_error_check) { "Type must be either 'SERVER' or 'DATABASE', provided 'invalid'" }
|
16 | 16 | it_behaves_like 'validation error'
|
17 | 17 | end
|
18 | 18 | describe 'SERVER' do
|
19 | 19 | let(:should_contain_command) { [
|
20 |
| - 'USE [master];', |
21 |
| - 'CREATE SERVER ROLE [myCustomRole];', |
22 |
| - /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.server_principals WHERE type_desc = 'SERVER_ROLE' AND name = 'myCustomRole'\n\)/, |
23 |
| - "THROW 51000, 'The SERVER ROLE [myCustomRole] does not exist', 10" |
| 20 | + 'USE [master];', |
| 21 | + 'CREATE SERVER ROLE [myCustomRole];', |
| 22 | + /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.server_principals WHERE type_desc = 'SERVER_ROLE' AND name = 'myCustomRole'\n\)/, |
| 23 | + "THROW 51000, 'The SERVER ROLE [myCustomRole] does not exist', 10" |
24 | 24 | ] }
|
25 | 25 | let(:should_contain_onlyif) { [
|
26 |
| - /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.server_principals WHERE type_desc = 'SERVER_ROLE' AND name = 'myCustomRole'\n\)/, |
27 |
| - "THROW 51000, 'The SERVER ROLE [myCustomRole] does not exist', 10" |
| 26 | + /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.server_principals WHERE type_desc = 'SERVER_ROLE' AND name = 'myCustomRole'\n\)/, |
| 27 | + "THROW 51000, 'The SERVER ROLE [myCustomRole] does not exist', 10" |
28 | 28 | ] }
|
29 | 29 | it_behaves_like 'sqlserver_tsql command'
|
30 | 30 | it_behaves_like 'sqlserver_tsql onlyif'
|
31 | 31 | end
|
32 | 32 | describe 'DATABASE' do
|
33 | 33 | let(:additional_params) { {
|
34 |
| - 'type' => 'DATABASE', |
| 34 | + 'type' => 'DATABASE', |
35 | 35 | } }
|
36 | 36 | let(:should_contain_command) { [
|
37 |
| - 'USE [master];', |
38 |
| - 'CREATE ROLE [myCustomRole];', |
39 |
| - /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.database_principals WHERE type_desc = 'DATABASE_ROLE' AND name = 'myCustomRole'\n\)/, |
40 |
| - "THROW 51000, 'The DATABASE ROLE [myCustomRole] does not exist', 10" |
| 37 | + 'USE [master];', |
| 38 | + 'CREATE ROLE [myCustomRole];', |
| 39 | + /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.database_principals WHERE type_desc = 'DATABASE_ROLE' AND name = 'myCustomRole'\n\)/, |
| 40 | + "THROW 51000, 'The DATABASE ROLE [myCustomRole] does not exist', 10" |
41 | 41 | ] }
|
42 | 42 | let(:should_contain_onlyif) { [
|
43 |
| - /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.database_principals WHERE type_desc = 'DATABASE_ROLE' AND name = 'myCustomRole'\n\)/, |
44 |
| - "THROW 51000, 'The DATABASE ROLE [myCustomRole] does not exist', 10", |
| 43 | + /IF NOT EXISTS\(\n\s+SELECT name FROM sys\.database_principals WHERE type_desc = 'DATABASE_ROLE' AND name = 'myCustomRole'\n\)/, |
| 44 | + "THROW 51000, 'The DATABASE ROLE [myCustomRole] does not exist', 10", |
45 | 45 | ] }
|
46 | 46 |
|
47 | 47 | it_behaves_like 'sqlserver_tsql command'
|
|
52 | 52 |
|
53 | 53 | context 'database =>' do
|
54 | 54 | let(:additional_params) { {
|
55 |
| - 'database' => 'myCrazyDb', |
| 55 | + 'database' => 'myCrazyDb', |
56 | 56 | } }
|
57 | 57 | describe 'with server role type' do
|
58 | 58 | let(:raise_error_check) { 'Can not specify a database other than master when managing SERVER ROLES' }
|
59 | 59 | it_behaves_like 'validation error'
|
60 | 60 | end
|
61 | 61 | describe 'with database role type' do
|
62 | 62 | let(:additional_params) { {
|
63 |
| - 'database' => 'myCrazyDb', |
64 |
| - 'type' => 'DATABASE', |
| 63 | + 'database' => 'myCrazyDb', |
| 64 | + 'type' => 'DATABASE', |
65 | 65 | } }
|
66 | 66 | let(:should_contain_command) { [
|
67 |
| - 'USE [myCrazyDb];', |
| 67 | + 'USE [myCrazyDb];', |
68 | 68 | ] }
|
69 | 69 | it_behaves_like 'sqlserver_tsql command'
|
70 | 70 | end
|
|
87 | 87 | context 'authorization =>' do
|
88 | 88 | describe 'undef' do
|
89 | 89 | let(:should_not_contain_command) { [
|
90 |
| - /AUTHORIZATION/i, |
91 |
| - 'ALTER AUTHORIZATION ON ', |
| 90 | + /AUTHORIZATION/i, |
| 91 | + 'ALTER AUTHORIZATION ON ', |
92 | 92 | ] }
|
93 | 93 | it_behaves_like 'sqlserver_tsql without_command'
|
94 | 94 | end
|
95 | 95 | describe 'myUser' do
|
96 | 96 | let(:additional_params) { {
|
97 |
| - :authorization => 'myUser', |
| 97 | + :authorization => 'myUser', |
98 | 98 | } }
|
99 | 99 | let(:should_contain_command) { [
|
100 |
| - 'CREATE SERVER ROLE [myCustomRole] AUTHORIZATION [myUser];', |
101 |
| - 'ALTER AUTHORIZATION ON SERVER ROLE::[myCustomRole] TO [myUser];' |
| 100 | + 'CREATE SERVER ROLE [myCustomRole] AUTHORIZATION [myUser];', |
| 101 | + 'ALTER AUTHORIZATION ON SERVER ROLE::[myCustomRole] TO [myUser];' |
102 | 102 | ] }
|
103 | 103 | it_behaves_like 'sqlserver_tsql command'
|
104 | 104 | end
|
105 | 105 | describe 'myUser on Database' do
|
106 | 106 | let(:additional_params) { {
|
107 |
| - :authorization => 'myUser', |
108 |
| - :type => 'DATABASE', |
| 107 | + :authorization => 'myUser', |
| 108 | + :type => 'DATABASE', |
109 | 109 | } }
|
110 | 110 | let(:should_contain_command) { [
|
111 |
| - 'CREATE ROLE [myCustomRole] AUTHORIZATION [myUser];', |
112 |
| - 'ALTER AUTHORIZATION ON ROLE::[myCustomRole] TO [myUser];' |
| 111 | + 'CREATE ROLE [myCustomRole] AUTHORIZATION [myUser];', |
| 112 | + 'ALTER AUTHORIZATION ON ROLE::[myCustomRole] TO [myUser];' |
113 | 113 | ] }
|
114 | 114 | it_behaves_like 'sqlserver_tsql command'
|
115 | 115 | end
|
|
118 | 118 | context 'ensure =>' do
|
119 | 119 | describe 'absent' do
|
120 | 120 | let(:additional_params) { {
|
121 |
| - :ensure => 'absent', |
| 121 | + :ensure => 'absent', |
122 | 122 | } }
|
123 | 123 | let(:should_contain_command) { [
|
124 |
| - 'USE [master];', |
125 |
| - 'DROP SERVER ROLE [myCustomRole];' |
| 124 | + 'USE [master];', |
| 125 | + 'DROP SERVER ROLE [myCustomRole];' |
126 | 126 | ] }
|
127 | 127 | let(:should_contain_onlyif) { [
|
128 |
| - 'IF EXISTS(', |
| 128 | + 'IF EXISTS(', |
129 | 129 | ] }
|
130 | 130 | it_behaves_like 'sqlserver_tsql command'
|
131 | 131 | it_behaves_like 'sqlserver_tsql onlyif'
|
132 | 132 | end
|
133 | 133 | end
|
134 | 134 |
|
| 135 | + context 'members =>' do |
| 136 | + let(:sqlserver_tsql_title) { 'role-myCustomRole-members' } |
| 137 | + describe '[test these users]' do |
| 138 | + let(:additional_params) { { |
| 139 | + :members => %w(test these users), |
| 140 | + } } |
| 141 | + let(:should_contain_command) { [ |
| 142 | + 'ALTER SERVER ROLE [myCustomRole] ADD MEMBER [test];', |
| 143 | + 'ALTER SERVER ROLE [myCustomRole] ADD MEMBER [these];', |
| 144 | + 'ALTER SERVER ROLE [myCustomRole] ADD MEMBER [users];', |
| 145 | + ] } |
| 146 | + let(:should_contain_onlyif) { [ |
| 147 | + ] } |
| 148 | + it_behaves_like 'sqlserver_tsql command' |
| 149 | + it_behaves_like 'sqlserver_tsql onlyif' |
| 150 | + end |
| 151 | + describe 'empty' do |
| 152 | + it { |
| 153 | + should_not contain_sqlserver_tsql(sqlserver_tsql_title) |
| 154 | + } |
| 155 | + end |
| 156 | + end |
| 157 | + context 'members_purge =>' do |
| 158 | + let(:sqlserver_tsql_title) { 'role-myCustomRole-members' } |
| 159 | + context 'true' do |
| 160 | + describe 'type => SERVER and members => []' do |
| 161 | + let(:additional_params) { { |
| 162 | + :members_purge => true, |
| 163 | + } } |
| 164 | + let(:should_contain_command) { [ |
| 165 | + "WHILE(@row <= @row_count) |
| 166 | +BEGIN |
| 167 | + SET @sql = 'ALTER SERVER ROLE [myCustomRole] DROP MEMBER [' + (SELECT member FROM @purge_members WHERE ID = @row) + '];' |
| 168 | + EXEC(@sql) |
| 169 | + SET @row += 1 |
| 170 | +END" |
| 171 | + ] } |
| 172 | + let(:should_contain_onlyif) { [ |
| 173 | + "DECLARE @purge_members TABLE ( |
| 174 | +ID int IDENTITY(1,1), |
| 175 | +member varchar(128) |
| 176 | +)", |
| 177 | + "INSERT INTO @purge_members (member) ( |
| 178 | +SELECT m.name FROM sys.server_role_members rm |
| 179 | + JOIN sys.server_principals r ON rm.role_principal_id = r.principal_id |
| 180 | + JOIN sys.server_principals m ON rm.member_principal_id = m.principal_id |
| 181 | + WHERE r.name = 'myCustomRole'", |
| 182 | + "IF 0 != (SELECT COUNT(*) FROM @purge_members) |
| 183 | + THROW 51000, 'Unlisted Members in Role, will be purged', 10", |
| 184 | + ] } |
| 185 | + it_behaves_like 'sqlserver_tsql command' |
| 186 | + it_behaves_like 'sqlserver_tsql onlyif' |
| 187 | + end |
| 188 | + |
| 189 | + describe 'type => DATABASE and members => []' do |
| 190 | + let(:additional_params) { { |
| 191 | + :type => 'DATABASE', |
| 192 | + :members_purge => true, |
| 193 | + } } |
| 194 | + let(:should_contain_command) { [ |
| 195 | + "WHILE(@row <= @row_count) |
| 196 | +BEGIN |
| 197 | + SET @sql = 'ALTER ROLE [myCustomRole] DROP MEMBER [' + (SELECT member FROM @purge_members WHERE ID = @row) + '];' |
| 198 | + EXEC(@sql) |
| 199 | + SET @row += 1 |
| 200 | +END" |
| 201 | + ] } |
| 202 | + let(:should_contain_onlyif) { [ |
| 203 | + "DECLARE @purge_members TABLE ( |
| 204 | +ID int IDENTITY(1,1), |
| 205 | +member varchar(128) |
| 206 | +)", |
| 207 | + "INSERT INTO @purge_members (member) ( |
| 208 | +SELECT m.name FROM sys.database_role_members rm |
| 209 | + JOIN sys.database_principals r ON rm.role_principal_id = r.principal_id |
| 210 | + JOIN sys.database_principals m ON rm.member_principal_id = m.principal_id |
| 211 | + WHERE r.name = 'myCustomRole'", |
| 212 | + "IF 0 != (SELECT COUNT(*) FROM @purge_members) |
| 213 | + THROW 51000, 'Unlisted Members in Role, will be purged', 10", |
| 214 | + ] } |
| 215 | + it_behaves_like 'sqlserver_tsql command' |
| 216 | + it_behaves_like 'sqlserver_tsql onlyif' |
| 217 | + end |
| 218 | + end |
| 219 | + describe '[test these users]' do |
| 220 | + let(:additional_params) { { |
| 221 | + :members_purge => true, |
| 222 | + :members => %w(test these users), |
| 223 | + } } |
| 224 | + let(:should_contain_command) { [ |
| 225 | + /WHERE r\.name = 'myCustomRole'\n\s+AND m\.name NOT IN \(/, |
| 226 | + "NOT IN ('test','these','users')" |
| 227 | + ] } |
| 228 | + let(:should_contain_onlyif) { [ |
| 229 | + /WHERE r\.name = 'myCustomRole'\n\s+AND m\.name NOT IN \(/, |
| 230 | + "NOT IN ('test','these','users')" |
| 231 | + ] } |
| 232 | + it_behaves_like 'sqlserver_tsql command' |
| 233 | + it_behaves_like 'sqlserver_tsql onlyif' |
| 234 | + end |
| 235 | + end |
135 | 236 | end
|
0 commit comments