Skip to content

Commit 32c635b

Browse files
author
Ryan Gard
committed
Merge pull request #150 from phongdly/MODULES-2497/automated_test_for_sqlserver-login
(MODULES-2497) SQLSERVER - Create Automated Tests for sqlserver::login
2 parents ec4dc83 + 3936278 commit 32c635b

File tree

1 file changed

+233
-0
lines changed

1 file changed

+233
-0
lines changed
+233
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
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', '89540']} 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+
MANIFEST
44+
ensure_manifest_apply(host, pp)
45+
end
46+
47+
# Delete Database after all tests are done
48+
after(:all) do
49+
pp = <<-MANIFEST
50+
sqlserver::config{'MSSQLSERVER':
51+
admin_user => 'sa',
52+
admin_pass => 'Pupp3t1@',
53+
}
54+
sqlserver::database{'#{db_name}':
55+
instance => 'MSSQLSERVER',
56+
ensure => 'absent',
57+
}
58+
MANIFEST
59+
#comment out the below line because of ticket MODULES-2554(delete database)
60+
#ensure_manifest_apply(host, pp)
61+
end
62+
63+
# Generate different set of sqlserver login/password for each test
64+
before(:each) do
65+
@login_user = "Login" + SecureRandom.hex(4)
66+
@login_passwd = "Password" + SecureRandom.hex(5)
67+
end
68+
69+
after(:each) do
70+
# delete recently created login after each test:
71+
#This test also cover test case C89540: Delete login
72+
pp = <<-MANIFEST
73+
sqlserver::config{'MSSQLSERVER':
74+
admin_user => 'sa',
75+
admin_pass => 'Pupp3t1@',
76+
}
77+
sqlserver::login{'#{@login_user}':
78+
instance => 'MSSQLSERVER',
79+
ensure => 'absent',
80+
}
81+
MANIFEST
82+
#comment out the below line because of ticket MODULES-2323(delete login)
83+
#ensure_manifest_apply(host, pp)
84+
end
85+
86+
it "Test Case C89118: create login with optional 'check_expiration'" do
87+
pp = <<-MANIFEST
88+
sqlserver::config{'MSSQLSERVER':
89+
admin_user => 'sa',
90+
admin_pass => 'Pupp3t1@',
91+
}
92+
sqlserver::login{'#{@login_user}':
93+
instance => 'MSSQLSERVER',
94+
login_type => 'SQL_LOGIN',
95+
password => '#{@login_passwd}',
96+
svrroles => {'sysadmin' => 1},
97+
check_expiration => true,
98+
}
99+
100+
MANIFEST
101+
ensure_manifest_apply(host, pp)
102+
103+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{db_name}':"
104+
query = "USE #{db_name}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{table_name}';"
105+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
106+
107+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_expiration_checked:"
108+
query = "SELECT name as LOGIN_NAME, is_expiration_checked
109+
FROM SYS.SQL_LOGINS
110+
WHERE is_expiration_checked = '1'
111+
AND name = '#{@login_user}';"
112+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
113+
end
114+
115+
it "Test Case C89119: create login with optional 'check_policy'" do
116+
#This test also cover test case C89123: create login with optional 'instance'
117+
pp = <<-MANIFEST
118+
sqlserver::config{'MSSQLSERVER':
119+
admin_user => 'sa',
120+
admin_pass => 'Pupp3t1@',
121+
}
122+
sqlserver::login{'#{@login_user}':
123+
instance => 'MSSQLSERVER',
124+
login_type => 'SQL_LOGIN',
125+
password => '#{@login_passwd}',
126+
svrroles => {'sysadmin' => 1},
127+
check_policy => true,
128+
}
129+
130+
MANIFEST
131+
ensure_manifest_apply(host, pp)
132+
133+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{db_name}':"
134+
query = "USE #{db_name}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{table_name}';"
135+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
136+
137+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_expiration_checked:"
138+
query = "SELECT name as LOGIN_NAME, is_policy_checked
139+
FROM SYS.SQL_LOGINS
140+
WHERE is_policy_checked = '1'
141+
AND name = '#{@login_user}';"
142+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
143+
end
144+
145+
it "Test Case C89120: create login with optional 'default_database'" do
146+
#This test also cover test case C89124: create login with optional 'login_type'
147+
pp = <<-MANIFEST
148+
sqlserver::config{'MSSQLSERVER':
149+
admin_user => 'sa',
150+
admin_pass => 'Pupp3t1@',
151+
}
152+
sqlserver::login{'#{@login_user}':
153+
instance => 'MSSQLSERVER',
154+
login_type => 'SQL_LOGIN',
155+
password => '#{@login_passwd}',
156+
svrroles => {'sysadmin' => 1},
157+
default_database => '#{db_name}',
158+
}
159+
160+
MANIFEST
161+
ensure_manifest_apply(host, pp)
162+
163+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{db_name}':"
164+
query = "USE #{db_name}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{table_name}';"
165+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
166+
167+
puts "Validate the login '#{@login_user}' is successfully created and has correct default_database:"
168+
query = "SELECT name as LOGIN_NAME, default_database_name
169+
FROM SYS.SQL_LOGINS
170+
WHERE default_database_name = '#{db_name}'
171+
AND name = '#{@login_user}';"
172+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
173+
end
174+
175+
it "Test Case C89121: create login with optional 'default_language'" do
176+
#This test also cover test case C89125: create login with optional 'svrroles'
177+
pp = <<-MANIFEST
178+
sqlserver::config{'MSSQLSERVER':
179+
admin_user => 'sa',
180+
admin_pass => 'Pupp3t1@',
181+
}
182+
sqlserver::login{'#{@login_user}':
183+
instance => 'MSSQLSERVER',
184+
login_type => 'SQL_LOGIN',
185+
password => '#{@login_passwd}',
186+
svrroles => {'sysadmin' => 1},
187+
default_language => 'Spanish',
188+
}
189+
MANIFEST
190+
ensure_manifest_apply(host, pp)
191+
192+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{db_name}':"
193+
query = "USE #{db_name}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{table_name}';"
194+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
195+
196+
puts "Validate the login '#{@login_user}' is successfully created and has correct default_language_name:"
197+
query = "SELECT name as LOGIN_NAME, default_language_name
198+
FROM SYS.SQL_LOGINS
199+
WHERE default_language_name = 'Spanish'
200+
AND name = '#{@login_user}';"
201+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
202+
end
203+
204+
#Temporarily skip this test because of ticket MODULES-2305
205+
xit "Test Case C89122: create login with optional 'disabled'" do
206+
pp = <<-MANIFEST
207+
sqlserver::config{'MSSQLSERVER':
208+
admin_user => 'sa',
209+
admin_pass => 'Pupp3t1@',
210+
}
211+
sqlserver::login{'#{@login_user}':
212+
instance => 'MSSQLSERVER',
213+
login_type => 'SQL_LOGIN',
214+
password => '#{@login_passwd}',
215+
svrroles => {'sysadmin' => 1},
216+
disabled => true,
217+
}
218+
MANIFEST
219+
ensure_manifest_apply(host, pp)
220+
221+
puts "Validate the login '#{@login_user}' is successfully created and able to access database '#{db_name}':"
222+
query = "USE #{db_name}; SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '#{table_name}';"
223+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
224+
225+
puts "Validate the login '#{@login_user}' is successfully created and has correct is_disabled:"
226+
query = "SELECT name as LOGIN_NAME, is_policy_checked
227+
FROM SYS.SQL_LOGINS
228+
WHERE is_disabled = '1'
229+
AND name = '#{@login_user}';"
230+
run_sql_query(host, run_sql_query_opts(@login_user, @login_passwd, query, expected_row_count = 1))
231+
end
232+
end
233+
end

0 commit comments

Comments
 (0)