Skip to content

Commit 1e94e7d

Browse files
author
Zach Reichert
committed
(FM-2405) tests for sqlserver login
1 parent 6341bbf commit 1e94e7d

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
require 'spec_helper_acceptance'
2+
require 'ERB'
3+
4+
%w(2012 2014).each do |version|
5+
host = find_only_one("sql#{version}")
6+
describe "sqlserver::login #{version}", :node => host do
7+
8+
# An ERB template for a sqlserver::login
9+
manifest = <<-MANIFEST
10+
sqlserver::config{'MSSQLSERVER':
11+
admin_pass => '<%= SQL_ADMIN_PASS %>',
12+
admin_user => '<%= SQL_ADMIN_USER %>',
13+
}
14+
sqlserver::login{'<%= login_name %>':
15+
ensure => <%= defined?(ensure_value) ? ensure_value : 'present' %>,
16+
password => '<%= defined?(password) ? password : SQL_ADMIN_PASS %>',
17+
default_database => '<%= defined?(default_database) ? default_database : 'master' %>',
18+
default_language => '<%= defined?(default_language) ? default_language : 'us_english'%>', disabled => <%= defined?(disabled) ? disabled : false %>,
19+
}
20+
MANIFEST
21+
no_results_error = 'Expected 1 rows but observed 0'
22+
23+
context 'create a sql login' do
24+
25+
login_name = 'Gumby'
26+
27+
after(:each) do
28+
opts = {:query => "DROP LOGIN #{login_name}", :no_rows_expected => true}
29+
30+
# delete the login
31+
run_sql_query(host, opts) do |r|
32+
expect(r.stdout).not_to match(/Error/)
33+
end
34+
end
35+
36+
it "should create a login" do
37+
name_query = "SELECT name FROM sys.server_principals WHERE name = '#{login_name}'"
38+
pp = ERB.new(manifest).result(binding)
39+
40+
apply_manifest_on(host, pp) do |r|
41+
expect(r.stdout).not_to match(/Error/)
42+
end
43+
44+
run_sql_query(host, {:query => name_query}) do |r|
45+
expect(r.stdout).not_to match(/Error/)
46+
expect(r.stdout).to match(/#{login_name}/)
47+
end
48+
end
49+
50+
end
51+
52+
context 'delete a login' do
53+
54+
login_name = 'Pokey'
55+
56+
before(:all) do
57+
pp = ERB.new(manifest).result(binding)
58+
59+
# create the login needed for test
60+
apply_manifest_on(host, pp) do |r|
61+
expect(r.stdout).not_to match(/Error/)
62+
end
63+
end
64+
65+
it 'removes an existing login' do
66+
ensure_value = 'absent'
67+
pp = ERB.new(manifest).result(binding)
68+
name_query = "SELECT name FROM sys.server_principals WHERE name = '#{login_name}'"
69+
70+
apply_manifest_on(host, pp) do |r|
71+
expect(r.stdout).not_to match(/Error/)
72+
expect{run_sql_query(host, {:query => name_query})}.to raise_error(RuntimeError, no_results_error)
73+
end
74+
end
75+
76+
end
77+
78+
context 'mutate a login' do
79+
80+
login_name = 'Denali'
81+
db_fixture = 'professor_kapp'
82+
83+
before(:all) do
84+
pp = ERB.new(manifest).result(binding)
85+
86+
# create the login to test
87+
apply_manifest_on(host, pp) do |r|
88+
expect(r.stdout).not_to match(/Error/)
89+
end
90+
91+
# create a DB to use as a fixture
92+
opts = {:query => "CREATE DATABASE #{db_fixture}", :no_rows_expected => true}
93+
run_sql_query(host, opts) do |r|
94+
expect(r.stdout).not_to match(/Error/)
95+
end
96+
end
97+
98+
after(:all) do
99+
login_opts = {:query => "DROP LOGIN #{login_name}", :no_rows_expected => true}
100+
db_opts = {:query => "DROP DATABASE #{db_fixture}", :no_rows_expected => true}
101+
102+
# delete the login
103+
run_sql_query(host, login_opts) do |r|
104+
expect(r.stdout).not_to match(/Error/)
105+
end
106+
107+
# cleanup fixture DB
108+
run_sql_query(host, db_opts) do |r|
109+
expect(r.stdout).not_to match(/Error/)
110+
end
111+
end
112+
113+
it 'disables the login' do
114+
disabled_query = "SELECT SP.is_disabled FROM sys.server_principals AS SP WHERE name = '#{login_name}'"
115+
disabled = true
116+
pp = ERB.new(manifest).result(binding)
117+
118+
apply_manifest_on(host, pp) do |r|
119+
expect(r.stdout).not_to match(/Error/)
120+
end
121+
122+
run_sql_query(host, {:query => disabled_query}) do |r|
123+
expect(r.stdout).not_to match(/Error/)
124+
expect(r.stdout).to match(/^1/)
125+
end
126+
end
127+
128+
it 'changes the default database' do
129+
default_db_query = "SELECT SP.default_database_name FROM sys.server_principals AS SP WHERE name = '#{login_name}'"
130+
default_database = db_fixture
131+
pp = ERB.new(manifest).result(binding)
132+
133+
apply_manifest_on(host, pp) do |r|
134+
expect(r.stdout).not_to match(/Error/)
135+
end
136+
137+
run_sql_query(host, {:query => default_db_query}) do |r|
138+
expect(r.stdout).not_to match(/Error/)
139+
expect(r.stdout).to match(/#{db_fixture}/)
140+
end
141+
end
142+
143+
it 'changes the default language' do
144+
language_query = "SELECT SP.default_language_name FROM sys.server_principals AS SP WHERE name = '#{login_name}'"
145+
default_language = 'german'
146+
pp = ERB.new(manifest).result(binding)
147+
148+
apply_manifest_on(host, pp) do |r|
149+
expect(r.stdout).not_to match(/Error/)
150+
end
151+
152+
run_sql_query(host, {:query => language_query}) do |r|
153+
expect(r.stdout).not_to match(/Error/)
154+
expect(r.stdout).to match(/#{default_language}/)
155+
end
156+
end
157+
158+
end
159+
end
160+
end

0 commit comments

Comments
 (0)