|
6 | 6 | context 'validation errors' do
|
7 | 7 | include_context 'manifests' do
|
8 | 8 | let(:title) { 'myTitle' }
|
9 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
| 9 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT' } |
10 | 10 | end
|
11 | 11 | context 'user =>' do
|
12 | 12 | let(:params) { {
|
13 |
| - :permission => 'SELECT', |
| 13 | + :permissions => ['SELECT'], |
14 | 14 | :database => 'loggingDb',
|
15 | 15 | } }
|
16 | 16 | let(:raise_error_check) { 'User must be between 1 and 128 characters' }
|
|
27 | 27 | it_behaves_like 'validation error'
|
28 | 28 | end
|
29 | 29 | end
|
30 |
| - context 'permission' do |
| 30 | + context 'permissions' do |
31 | 31 | let(:params) { {
|
32 | 32 | :user => 'loggingUser',
|
33 | 33 | :database => 'loggingDb',
|
34 | 34 | } }
|
35 | 35 | let(:raise_error_check) { 'Permission must be between 4 and 128 characters' }
|
36 | 36 | describe 'empty' do
|
37 |
| - let(:additional_params) { {:permission => ''} } |
| 37 | + let(:additional_params) { {:permissions => ''} } |
38 | 38 | it_behaves_like 'validation error'
|
39 | 39 | end
|
40 | 40 | describe 'under limit' do
|
41 |
| - let(:additional_params) { {:permission => random_string_of_size(3, false)} } |
| 41 | + let(:additional_params) { {:permissions => [random_string_of_size(3, false)]} } |
42 | 42 | it_behaves_like 'validation error'
|
43 | 43 | end
|
44 | 44 | describe 'over limit' do
|
45 |
| - let(:additional_params) { {:permission => random_string_of_size(129, false)} } |
| 45 | + let(:additional_params) { {:permissions => [random_string_of_size(129, false)]} } |
46 | 46 | it_behaves_like 'validation error'
|
47 | 47 | end
|
48 | 48 | end
|
49 | 49 | context 'state =>' do
|
50 | 50 | let(:params) { {
|
51 |
| - :permission => 'SELECT', |
| 51 | + :permissions => ['SELECT'], |
52 | 52 | :database => 'loggingDb',
|
53 | 53 | :user => 'loggingUser'
|
54 | 54 | } }
|
|
60 | 60 | end
|
61 | 61 | context 'with_grant_option => ' do
|
62 | 62 | let(:params) { {
|
63 |
| - :permission => 'SELECT', |
| 63 | + :permissions => ['SELECT'], |
64 | 64 | :database => 'loggingDb',
|
65 | 65 | :user => 'loggingUser',
|
66 | 66 |
|
|
80 | 80 | context 'successfully' do
|
81 | 81 | include_context 'manifests' do
|
82 | 82 | let(:title) { 'myTitle' }
|
83 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
| 83 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT' } |
84 | 84 | let(:params) { {
|
85 | 85 | :user => 'loggingUser',
|
86 |
| - :permission => 'SELECT', |
| 86 | + :permissions => ['SELECT'], |
87 | 87 | :database => 'loggingDb',
|
88 | 88 | } }
|
89 | 89 | end
|
90 | 90 | %w(revoke grant deny).each do |state|
|
91 | 91 | context "state => '#{state}'" do
|
92 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
| 92 | + let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-#{state.upcase}" } |
93 | 93 | let(:should_contain_command) { ["#{state.upcase} SELECT TO [loggingUser];", 'USE [loggingDb];'] }
|
94 | 94 | describe "lowercase #{state}" do
|
95 | 95 | let(:additional_params) { {:state => state} }
|
|
106 | 106 | context 'permission' do
|
107 | 107 | describe 'upper limit' do
|
108 | 108 | permission =random_string_of_size(128, false)
|
109 |
| - let(:additional_params) { {:permission => permission} } |
110 |
| - let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-#{permission.upcase}" } |
| 109 | + let(:additional_params) { {:permissions => [permission]} } |
| 110 | + let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT" } |
111 | 111 | let(:should_contain_command) { ['USE [loggingDb];'] }
|
112 | 112 | it_behaves_like 'sqlserver_tsql command'
|
113 | 113 | end
|
114 | 114 | describe 'alter' do
|
115 |
| - let(:additional_params) { {:permission => 'ALTER'} } |
| 115 | + let(:additional_params) { {:permissions => ['ALTER']} } |
116 | 116 | let(:should_contain_command) { ['USE [loggingDb];', 'GRANT ALTER TO [loggingUser];'] }
|
117 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-ALTER' } |
| 117 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT' } |
118 | 118 | it_behaves_like 'sqlserver_tsql command'
|
119 | 119 | end
|
120 | 120 | end
|
|
131 | 131 |
|
132 | 132 | context 'with_grant_option =>' do
|
133 | 133 | describe 'true' do
|
| 134 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT-WITH_GRANT_OPTION' } |
134 | 135 | let(:additional_params) { {:with_grant_option => true} }
|
135 | 136 | let(:should_contain_command) { [
|
136 | 137 | "IF @perm_state != 'GRANT_WITH_GRANT_OPTION'",
|
|
150 | 151 | 'REVOKE GRANT OPTION FOR SELECT TO [loggingUser] CASCADE;',
|
151 | 152 | "IF 'GRANT_WITH_GRANT_OPTION' = ISNULL(",
|
152 | 153 | ] }
|
153 |
| - |
154 | 154 | let(:should_contain_onlyif) { ["IF @perm_state != 'GRANT'",] }
|
155 | 155 | it_behaves_like 'sqlserver_tsql command'
|
156 | 156 | it_behaves_like 'sqlserver_tsql onlyif'
|
|
161 | 161 | context 'command syntax' do
|
162 | 162 | include_context 'manifests' do
|
163 | 163 | let(:title) { 'myTitle' }
|
164 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
| 164 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT' } |
165 | 165 | let(:params) { {
|
166 | 166 | :user => 'loggingUser',
|
167 |
| - :permission => 'SELECT', |
| 167 | + :permissions => ['SELECT'], |
168 | 168 | :database => 'loggingDb',
|
169 | 169 | } }
|
170 | 170 | describe '' do
|
171 | 171 | let(:should_contain_command) { [
|
172 | 172 | 'USE [loggingDb];',
|
173 | 173 | 'GRANT SELECT TO [loggingUser];',
|
174 |
| - /DECLARE @perm_state varchar\(250\)/, |
| 174 | + /DECLARE @perm_state varchar\(250\), @error_msg varchar\(250\)/, |
| 175 | + /SET @permission = 'SELECT'/, |
175 | 176 | /SET @perm_state = ISNULL\(\n\s+\(SELECT perm.state_desc FROM sys\.database_principals princ\n\s+JOIN sys\./,
|
176 | 177 | /JOIN sys\.database_permissions perm ON perm\.grantee_principal_id = princ.principal_id\n\s+WHERE/,
|
177 |
| - /WHERE princ\.type in \('U','S','G'\) AND name = 'loggingUser' AND permission_name = 'SELECT'\),\n\s+'REVOKE'\)\s+;/, |
178 |
| - /DECLARE @error_msg varchar\(250\);\nSET @error_msg = 'EXPECTED user \[loggingUser\] to have permission \[SELECT\] with GRANT but got ' \+ @perm_state;/, |
| 178 | + /WHERE princ\.type in \('U','S','G'\) AND name = 'loggingUser' AND permission_name = @permission\),\n\s+'REVOKE'\)\s+;/, |
| 179 | + /SET @error_msg = 'EXPECTED user \[loggingUser\] to have permission \[' \+ @permission \+ '\] with GRANT but got ' \+ @perm_state;/, |
179 | 180 | /IF @perm_state != 'GRANT'\n\s+THROW 51000, @error_msg, 10/
|
180 | 181 | ] }
|
181 | 182 | it_behaves_like 'sqlserver_tsql command'
|
|
0 commit comments