Skip to content

Commit f15af7c

Browse files
committed
(MODULES-2497) SQLSERVER - Create Automated Tests for sqlserver::login
1 parent 3b9518a commit f15af7c

File tree

1 file changed

+234
-0
lines changed

1 file changed

+234
-0
lines changed
Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
require 'spec_helper_acceptance'
2+
require 'securerandom'
3+
4+
host = find_only_one("sql_host")
5+
DB_NAME = ("DB" + SecureRandom.hex(4)).upcase
6+
TABLE_NAME = 'Tables_' + SecureRandom.hex(3)
7+
8+
describe "Test sqlserver::login", :node => host do
9+
10+
def ensure_manifest_apply(host, pp)
11+
apply_manifest_on(host, pp) do |r|
12+
expect(r.stderr).not_to match(/Error/i)
13+
end
14+
end
15+
16+
#Return options for run_sql_query
17+
def run_sql_query_opts (user, passwd, query, expected_row_count)
18+
run_sql_query_opt = {
19+
:query => query,
20+
:sql_admin_user => user,
21+
:sql_admin_pass => passwd,
22+
:expected_row_count => expected_row_count,
23+
}
24+
end
25+
26+
context "Start testing...", {:testrail => ['89118', '89119', '89120', '89121', '89122', '89123', '89124', '89125', '891540']} do
27+
28+
before(:all) do
29+
# Create a database and a simple table to use for all the tests
30+
pp = <<-MANIFEST
31+
sqlserver::config{'MSSQLSERVER':
32+
admin_user => 'sa',
33+
admin_pass => 'Pupp3t1@',
34+
}
35+
sqlserver::database{'#{DB_NAME}':
36+
}
37+
sqlserver_tsql{'testsqlserver_tsql':
38+
instance => 'MSSQLSERVER',
39+
database => '#{DB_NAME}',
40+
command => "CREATE TABLE #{TABLE_NAME} (id INT, name VARCHAR(20), email VARCHAR(20));",
41+
require => Sqlserver::Database['#{DB_NAME}'],
42+
}
43+
->
44+
sqlserver_features{ 'features_forUI':
45+
source => 'H:',
46+
features => ['Tools', 'IS', 'MDS'],
47+
}
48+
MANIFEST
49+
ensure_manifest_apply(host, pp)
50+
end
51+
52+
# Delete Database after all tests are done
53+
after(:all) do
54+
pp = <<-MANIFEST
55+
sqlserver::config{'MSSQLSERVER':
56+
admin_user => 'sa',
57+
admin_pass => 'Pupp3t1@',
58+
}
59+
sqlserver::database{'#{DB_NAME}':
60+
instance => 'MSSQLSERVER',
61+
ensure => 'absent',
62+
}
63+
MANIFEST
64+
#comment out the below line because of ticket MODULES-2554(delete database)
65+
#ensure_manifest_apply(host, pp)
66+
end
67+
68+
# Generate different set of sqlserver login/password for each test
69+
before(:each) do
70+
@login_user = "Login" + SecureRandom.hex(4)
71+
@login_passwd = "Password" + SecureRandom.hex(5)
72+
end
73+
74+
after(:each) do
75+
# delete recently created login after each test:
76+
pp = <<-MANIFEST
77+
sqlserver::config{'MSSQLSERVER':
78+
admin_user => 'sa',
79+
admin_pass => 'Pupp3t1@',
80+
}
81+
sqlserver::login{'#{@login_user}':
82+
instance => 'MSSQLSERVER',
83+
ensure => 'absent',
84+
}
85+
MANIFEST
86+
#comment out the below line because of ticket MODULES-2323(delete login)
87+
#ensure_manifest_apply(host, pp)
88+
end
89+
90+
it "Test Case C89118: create login with optional 'check_expiration'" do
91+
pp = <<-MANIFEST
92+
sqlserver::config{'MSSQLSERVER':
93+
admin_user => 'sa',
94+
admin_pass => 'Pupp3t1@',
95+
}
96+
sqlserver::login{'#{@login_user}':
97+
instance => 'MSSQLSERVER',
98+
login_type => 'SQL_LOGIN',
99+
password => '#{@login_passwd}',
100+
svrroles => {'sysadmin' => 1},
101+
check_expiration => true,
102+
}
103+
104+
MANIFEST
105+
ensure_manifest_apply(host, pp)
106+
107+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{DB_NAME}':"
108+
query = "USE #{DB_NAME}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{TABLE_NAME}';"
109+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
110+
111+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_expiration_checked:"
112+
query = "SELECT name as LOGIN_NAME, is_expiration_checked
113+
FROM SYS.SQL_LOGINS
114+
WHERE is_expiration_checked = '1'
115+
AND name = '#{@login_user}';"
116+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
117+
end
118+
119+
it "Test Case C89119: create login with optional 'check_policy'" do
120+
pp = <<-MANIFEST
121+
sqlserver::config{'MSSQLSERVER':
122+
admin_user => 'sa',
123+
admin_pass => 'Pupp3t1@',
124+
}
125+
sqlserver::login{'#{@login_user}':
126+
instance => 'MSSQLSERVER',
127+
login_type => 'SQL_LOGIN',
128+
password => '#{@login_passwd}',
129+
svrroles => {'sysadmin' => 1},
130+
check_policy => true,
131+
}
132+
133+
MANIFEST
134+
ensure_manifest_apply(host, pp)
135+
136+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{DB_NAME}':"
137+
query = "USE #{DB_NAME}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{TABLE_NAME}';"
138+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
139+
140+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_expiration_checked:"
141+
query = "SELECT name as LOGIN_NAME, is_policy_checked
142+
FROM SYS.SQL_LOGINS
143+
WHERE is_policy_checked = '1'
144+
AND name = '#{@login_user}';"
145+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
146+
end
147+
148+
it "Test Case C89120: create login with optional 'default_database'" do
149+
pp = <<-MANIFEST
150+
sqlserver::config{'MSSQLSERVER':
151+
admin_user => 'sa',
152+
admin_pass => 'Pupp3t1@',
153+
}
154+
sqlserver::login{'#{@login_user}':
155+
instance => 'MSSQLSERVER',
156+
login_type => 'SQL_LOGIN',
157+
password => '#{@login_passwd}',
158+
svrroles => {'sysadmin' => 1},
159+
default_database => '#{DB_NAME}',
160+
}
161+
162+
MANIFEST
163+
ensure_manifest_apply(host, pp)
164+
165+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{DB_NAME}':"
166+
query = "USE #{DB_NAME}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{TABLE_NAME}';"
167+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
168+
169+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_expiration_checked:"
170+
query = "SELECT name as LOGIN_NAME, default_database_name
171+
FROM SYS.SQL_LOGINS
172+
WHERE default_database_name = '#{DB_NAME}'
173+
AND name = '#{@login_user}';"
174+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
175+
end
176+
177+
it "Test Case C89121: create login with optional 'default_language'" do
178+
pp = <<-MANIFEST
179+
sqlserver::config{'MSSQLSERVER':
180+
admin_user => 'sa',
181+
admin_pass => 'Pupp3t1@',
182+
}
183+
sqlserver::login{'#{@login_user}':
184+
instance => 'MSSQLSERVER',
185+
login_type => 'SQL_LOGIN',
186+
password => '#{@login_passwd}',
187+
svrroles => {'sysadmin' => 1},
188+
default_language => 'Spanish',
189+
}
190+
MANIFEST
191+
ensure_manifest_apply(host, pp)
192+
193+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{DB_NAME}':"
194+
query = "USE #{DB_NAME}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{TABLE_NAME}';"
195+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
196+
197+
puts "Validate the login '#{@login_user}' is successfully created and has correct default_language_name:"
198+
query = "SELECT name as LOGIN_NAME, default_language_name
199+
FROM SYS.SQL_LOGINS
200+
WHERE default_language_name = 'Spanish'
201+
AND name = '#{@login_user}';"
202+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
203+
end
204+
205+
#Temporarily skip this test because of ticket MODULES-2305
206+
xit "Test Case C89122: create login with optional 'disabled'" do
207+
pp = <<-MANIFEST
208+
sqlserver::config{'MSSQLSERVER':
209+
admin_user => 'sa',
210+
admin_pass => 'Pupp3t1@',
211+
}
212+
sqlserver::login{'#{@login_user}':
213+
instance => 'MSSQLSERVER',
214+
login_type => 'SQL_LOGIN',
215+
password => '#{@login_passwd}',
216+
svrroles => {'sysadmin' => 1},
217+
disabled => true,
218+
}
219+
MANIFEST
220+
ensure_manifest_apply(host, pp)
221+
222+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{DB_NAME}':"
223+
query = "USE #{DB_NAME}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{TABLE_NAME}';"
224+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
225+
226+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_disabled:"
227+
query = "SELECT name as LOGIN_NAME, is_policy_checked
228+
FROM SYS.SQL_LOGINS
229+
WHERE is_disabled = '1'
230+
AND name = '#{@login_user}';"
231+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, 1))
232+
end
233+
end
234+
end

0 commit comments

Comments
 (0)