1
1
require 'spec_helper'
2
+ require 'mocha'
2
3
3
4
require File . expand_path ( File . join ( File . dirname ( __FILE__ ) , '..' , 'sqlserver_install_context.rb' ) )
4
5
5
6
provider_class = Puppet ::Type . type ( :sqlserver_instance ) . provider ( :mssql )
6
7
7
8
RSpec . describe provider_class do
8
9
subject { provider_class }
10
+ let ( :additional_install_switches ) { [ ] }
9
11
10
12
def stub_uninstall ( args , installed_features )
11
13
cmd_args = [ "#{ args [ :source ] } /setup.exe" ,
@@ -32,7 +34,7 @@ def stub_uninstall(args, installed_features)
32
34
'/IACCEPTSQLSERVERLICENSETERMS' ,
33
35
"/INSTANCENAME=#{ execute_args [ :name ] } " ,
34
36
"/FEATURES=#{ execute_args [ :features ] . join ( ',' ) } " , ]
35
- ( execute_args . keys - %w( ensure loglevel features name source sql_sysadmin_accounts sql_security_mode ) . map ( &:to_sym ) ) . sort . collect do |key |
37
+ ( execute_args . keys - %w( ensure loglevel features name source sql_sysadmin_accounts sql_security_mode install_switches ) . map ( &:to_sym ) ) . sort . collect do |key |
36
38
cmd_args << "/#{ key . to_s . gsub ( /_/ , '' ) . upcase } =\" #{ @resource [ key ] } \" "
37
39
end
38
40
if execute_args [ :sql_security_mode ]
@@ -58,13 +60,16 @@ def stub_uninstall(args, installed_features)
58
60
'/IACCEPTSQLSERVERLICENSETERMS' ,
59
61
"/INSTANCENAME=#{ execute_args [ :name ] } " ,
60
62
"/FEATURES=#{ execute_args [ :features ] . join ( ',' ) } " , ]
61
- ( execute_args . keys - %w( ensure loglevel features name source sql_sysadmin_accounts sql_security_mode ) . map ( &:to_sym ) ) . sort . collect do |key |
63
+ ( execute_args . keys - %w( ensure loglevel features name source sql_sysadmin_accounts sql_security_mode install_switches ) . map ( &:to_sym ) ) . sort . collect do |key |
62
64
cmd_args << "/#{ key . to_s . gsub ( /_/ , '' ) . upcase } =\" #{ @resource [ key ] } \" "
63
65
end
64
66
if execute_args [ :sql_security_mode ]
65
67
cmd_args << "/SECURITYMODE=SQL"
66
68
end
67
69
cmd_args << "/SQLSYSADMINACCOUNTS=#{ Array . new ( @resource [ :sql_sysadmin_accounts ] ) . collect { |account | "\" #{ account } \" " } . join ( ' ' ) } "
70
+ additional_install_switches . each do |switch |
71
+ cmd_args << switch
72
+ end
68
73
Puppet ::Util ::Execution . stubs ( :execute ) . with ( cmd_args . compact ) . returns ( 0 )
69
74
@provider . create
70
75
}
@@ -110,19 +115,19 @@ def stub_uninstall(args, installed_features)
110
115
it_behaves_like 'destroy on create' do
111
116
let ( :installed_features ) { %w( SQLEngine Replication ) }
112
117
let ( :args ) { {
113
- :name => 'MYSQLSERVER' ,
114
- :source => 'C:\myinstallexecs' ,
115
- :features => [ ]
118
+ :name => 'MYSQLSERVER' ,
119
+ :source => 'C:\myinstallexecs' ,
120
+ :features => [ ]
116
121
} }
117
122
end
118
123
end
119
124
120
125
describe 'it should uninstall' do
121
126
it_behaves_like 'destroy' do
122
127
let ( :args ) { {
123
- :name => 'MYSQLSERVER' ,
124
- :source => 'C:\myinstallexecs' ,
125
- :features => [ ]
128
+ :name => 'MYSQLSERVER' ,
129
+ :source => 'C:\myinstallexecs' ,
130
+ :features => [ ]
126
131
} }
127
132
let ( :installed_features ) { %w( SQLEngine Replication ) }
128
133
end
@@ -131,11 +136,44 @@ def stub_uninstall(args, installed_features)
131
136
describe 'installed features even if provided features' do
132
137
it_behaves_like 'destroy' do
133
138
let ( :args ) { {
134
- :name => 'MYSQLSERVER' ,
135
- :source => 'C:\myinstallexecs' ,
136
- :features => [ 'SQL' ]
139
+ :name => 'MYSQLSERVER' ,
140
+ :source => 'C:\myinstallexecs' ,
141
+ :features => [ 'SQL' ]
137
142
} }
138
143
let ( :installed_features ) { %w( SQLEngine Replication ) }
139
144
end
140
145
end
146
+
147
+ describe 'install_switches' do
148
+ before :each do
149
+ @file_double = Tempfile . new ( [ 'sqlconfig' , '.ini' ] )
150
+ @file_double . stubs ( :write )
151
+ @file_double . stubs ( :flush )
152
+ @file_double . stubs ( :close )
153
+ Tempfile . stubs ( :new ) . with ( [ 'sqlconfig' , '.ini' ] ) . returns ( @file_double )
154
+ end
155
+
156
+ it_behaves_like 'create' do
157
+ args = get_basic_args
158
+ args [ :install_switches ] = { 'ERRORREPORTING' => 1 }
159
+ let ( :additional_install_switches ) { [ "/ConfigurationFile=\" #{ @file_double . path } \" " ] }
160
+ let ( :args ) { args }
161
+ munged = { :features => Array . new ( args [ :features ] ) }
162
+ munged [ :features ] . delete ( 'SQL' )
163
+ munged [ :features ] += %w( DQ FullText Replication SQLEngine )
164
+ munged [ :features ] . sort!
165
+ let ( :munged_values ) { munged }
166
+ end
167
+ it_behaves_like 'create' do
168
+ args = get_basic_args
169
+ args [ :install_switches ] = { 'ERRORREPORTING' => 1 , 'SQLBACKUPDIR' => 'I:\DBbackup' }
170
+ let ( :additional_install_switches ) { [ "/ConfigurationFile=\" #{ @file_double . path } \" " ] }
171
+ let ( :args ) { args }
172
+ munged = { :features => Array . new ( args [ :features ] ) }
173
+ munged [ :features ] . delete ( 'SQL' )
174
+ munged [ :features ] += %w( DQ FullText Replication SQLEngine )
175
+ munged [ :features ] . sort!
176
+ let ( :munged_values ) { munged }
177
+ end
178
+ end
141
179
end
0 commit comments