forked from puppetlabs/puppetlabs-postgresql
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpostgresql_psql_spec.rb
173 lines (162 loc) · 5.4 KB
/
postgresql_psql_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
require 'spec_helper_acceptance'
describe 'postgresql_psql', unless: UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
pp_one = <<-MANIFEST
class { 'postgresql::server': } ->
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select 1',
}
MANIFEST
it 'alwayses run SQL' do
apply_manifest(pp_one, catch_failures: true)
apply_manifest(pp_one, expect_changes: true)
end
pp_two = <<-MANIFEST
class { 'postgresql::server': } ->
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select 1',
unless => 'select 1 where 1=2',
}
MANIFEST
it 'runs some SQL when the unless query returns no rows' do
apply_manifest(pp_two, catch_failures: true)
apply_manifest(pp_two, expect_changes: true)
end
pp_three = <<-MANIFEST
class { 'postgresql::server': } ->
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select * from pg_database limit 1',
unless => 'select 1 where 1=1',
}
MANIFEST
it 'does not run SQL when the unless query returns rows' do
apply_manifest(pp_three, catch_failures: true)
apply_manifest(pp_three, catch_changes: true)
end
pp_four = <<-MANIFEST
class { 'postgresql::server': } ->
notify { 'trigger': } ~>
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'invalid sql statement',
unless => 'select 1 where 1=1',
}
MANIFEST
it 'does not run SQL when refreshed and the unless query returns rows' do
apply_manifest(pp_four, catch_failures: true)
apply_manifest(pp_four, expect_changes: true)
end
context 'with refreshonly' do
pp_five = <<-MANIFEST
class { 'postgresql::server': } ->
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select 1',
unless => 'select 1 where 1=2',
refreshonly => true,
}
MANIFEST
it 'does not run SQL when the unless query returns no rows' do
apply_manifest(pp_five, catch_failures: true)
apply_manifest(pp_five, catch_changes: true)
end
pp_six = <<-MANIFEST.unindent
class { 'postgresql::server': } ->
notify { 'trigger': } ~>
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select 1',
unless => 'select 1 where 1=2',
refreshonly => true,
}
MANIFEST
it 'runs SQL when refreshed and the unless query returns no rows' do
apply_manifest(pp_six, catch_failures: true)
apply_manifest(pp_six, expect_changes: true)
end
pp_seven = <<-MANIFEST.unindent
class { 'postgresql::server': } ->
notify { 'trigger': } ~>
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'invalid sql query',
unless => 'select 1 where 1=1',
refreshonly => true,
}
MANIFEST
it 'does not run SQL when refreshed and the unless query returns rows' do
apply_manifest(pp_seven, catch_failures: true)
apply_manifest(pp_seven, expect_changes: true)
end
end
pp_eight = <<-MANIFEST
class { 'postgresql::server': } ->
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select 1',
onlyif => 'select 1 where 1=2',
}
MANIFEST
it 'does not run some SQL when the onlyif query returns no rows' do
apply_manifest(pp_eight, catch_failures: true)
apply_manifest(pp_eight, catch_changes: true)
end
pp_nine = <<-MANIFEST
class { 'postgresql::server': } ->
postgresql_psql { 'foobar':
db => 'postgres',
psql_user => 'postgres',
command => 'select * from pg_database limit 1',
onlyif => 'select 1 where 1=1',
}
MANIFEST
it 'runs SQL when the onlyif query returns rows' do
apply_manifest(pp_nine, catch_failures: true)
apply_manifest(pp_nine, expect_changes: true)
end
context 'with secure password passing by environment' do
it 'runs SQL that contanins password passed by environment' do
select = "select \\'$PASS_TO_EMBED\\'"
pp = <<-MANIFEST.unindent
class { 'postgresql::server': } ->
postgresql_psql { 'password embedded by environment: #{select}':
db => 'postgres',
psql_user => 'postgres',
command => '#{select}',
environment => [
'PASS_TO_EMBED=pa$swD',
],
}
MANIFEST
apply_manifest(pp, catch_failures: true)
apply_manifest(pp, expect_changes: false)
end
it 'runs SQL that contanins password passed by environment in check' do
select = "select 1 where \\'$PASS_TO_EMBED\\'=\\'passwD\\'"
pp = <<-MANIFEST.unindent
class { 'postgresql::server': } ->
postgresql_psql { 'password embedded by environment in check: #{select}':
db => 'postgres',
psql_user => 'postgres',
command => 'invalid sql query',
unless => '#{select}',
environment => [
'PASS_TO_EMBED=passwD',
],
}
MANIFEST
apply_manifest(pp, catch_failures: true)
apply_manifest(pp, expect_changes: false)
end
end
end