engineyard-serverside 1.6.0.pre5 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. data/lib/engineyard-serverside.rb +1 -3
  2. data/lib/engineyard-serverside/cli.rb +38 -73
  3. data/lib/engineyard-serverside/configuration.rb +12 -38
  4. data/lib/engineyard-serverside/deploy.rb +54 -63
  5. data/lib/engineyard-serverside/deploy_hook.rb +18 -21
  6. data/lib/engineyard-serverside/deprecation.rb +17 -9
  7. data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
  8. data/lib/engineyard-serverside/logged_output.rb +91 -0
  9. data/lib/engineyard-serverside/rails_asset_support.rb +5 -5
  10. data/lib/engineyard-serverside/server.rb +11 -8
  11. data/lib/engineyard-serverside/strategies/git.rb +15 -12
  12. data/lib/engineyard-serverside/task.rb +8 -29
  13. data/lib/engineyard-serverside/version.rb +1 -1
  14. data/lib/vendor/systemu/LICENSE +3 -0
  15. data/lib/vendor/systemu/lib/systemu.rb +363 -0
  16. data/lib/vendor/systemu/systemu.gemspec +45 -0
  17. data/spec/basic_deploy_spec.rb +9 -9
  18. data/spec/bundler_deploy_spec.rb +1 -1
  19. data/spec/custom_deploy_spec.rb +4 -63
  20. data/spec/deploy_hook_spec.rb +78 -77
  21. data/spec/deprecation_spec.rb +26 -4
  22. data/spec/git_strategy_spec.rb +2 -6
  23. data/spec/logged_output_spec.rb +55 -0
  24. data/spec/nodejs_deploy_spec.rb +2 -2
  25. data/spec/services_deploy_spec.rb +10 -11
  26. data/spec/spec_helper.rb +25 -48
  27. data/spec/sqlite3_deploy_spec.rb +2 -1
  28. data/spec/support/integration.rb +14 -2
  29. metadata +79 -94
  30. data/lib/engineyard-serverside/shell.rb +0 -102
  31. data/lib/engineyard-serverside/shell/formatter.rb +0 -73
  32. data/lib/engineyard-serverside/shell/helpers.rb +0 -29
  33. data/lib/vendor/open4/lib/open4.rb +0 -432
  34. data/spec/shell_spec.rb +0 -50
@@ -1,71 +1,67 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "the deploy-hook API" do
4
- def deploy_hook(options={})
5
- config = EY::Serverside::Deploy::Configuration.new(options)
6
- EY::Serverside::DeployHook.new(config, test_shell)
4
+ before(:each) do
5
+ @hook = EY::Serverside::DeployHook.new(options)
6
+ @callback_context = EY::Serverside::DeployHook::CallbackContext.new(@hook.config)
7
+ end
8
+
9
+ def run_hook(options={}, &blk)
10
+ raise ArgumentError unless block_given?
11
+ options.each do |k, v|
12
+ @callback_context.configuration[k] = v
13
+ end
14
+
15
+ # The hooks on the filesystem are run by passing a string to
16
+ # context.instance_eval, not a block. However, using a block
17
+ # should allow us to get the same degree of test coverage and
18
+ # still let us have things like syntax checking work on this spec
19
+ # file.
20
+ @callback_context.instance_eval(&blk)
7
21
  end
8
22
 
9
23
  context "#run" do
10
24
  it "is available" do
11
- deploy_hook.eval_hook('respond_to?(:run)').should be_true
25
+ run_hook { respond_to?(:run) }.should be_true
12
26
  end
13
27
 
14
28
  it "runs commands like the shell does" do
15
29
  ENV['COUNT'] = 'Chocula'
16
30
  File.unlink("/tmp/deploy_hook_spec.the_count") rescue nil
17
31
 
18
- deploy_hook.eval_hook('run("echo $COUNT > /tmp/deploy_hook_spec.the_count")')
32
+ run_hook { run("echo $COUNT > /tmp/deploy_hook_spec.the_count") }
19
33
 
20
34
  IO.read("/tmp/deploy_hook_spec.the_count").strip.should == "Chocula"
21
35
  end
22
36
 
23
37
  it "returns true/false to indicate the command's success" do
24
- deploy_hook.eval_hook('run("true")').should be_true
25
- deploy_hook.eval_hook('run("false")').should be_false
38
+ run_hook { run("true") }.should be_true
39
+ run_hook { run("false") }.should be_false
26
40
  end
27
41
  end
28
42
 
29
43
  context "#sudo" do
30
44
  it "is available" do
31
- deploy_hook.eval_hook('respond_to?(:sudo)').should be_true
45
+ run_hook { respond_to?(:sudo) }.should be_true
32
46
  end
33
47
 
34
48
  it "runs things with sudo" do
35
- hook = deploy_hook
36
- hook.callback_context.shell.should_receive(:logged_system).with("sudo sh -l -c 'do it as root'").and_return(true)
37
- hook.eval_hook('sudo("do it as root")')
49
+ @callback_context.should_receive(:system).with("sudo sh -l -c 'do it as root'").and_return(true)
50
+
51
+ run_hook { sudo("do it as root") }
38
52
  end
39
53
  end
40
54
 
41
55
  context "capistrano-ish methods" do
42
56
  it "has them" do
43
- deploy_hook.eval_hook('respond_to?(:latest_release) ').should be_true
44
- deploy_hook.eval_hook('respond_to?(:previous_release) ').should be_true
45
- deploy_hook.eval_hook('respond_to?(:all_releases) ').should be_true
46
- deploy_hook.eval_hook('respond_to?(:current_path) ').should be_true
47
- deploy_hook.eval_hook('respond_to?(:shared_path) ').should be_true
48
- deploy_hook.eval_hook('respond_to?(:release_dir) ').should be_true
49
- deploy_hook.eval_hook('respond_to?(:failed_release_dir)').should be_true
50
- deploy_hook.eval_hook('respond_to?(:release_path) ').should be_true
51
- end
52
- end
53
-
54
- context "access to command line options that should be handed through to the config" do
55
- before do
56
- @hook = deploy_hook({'app' => 'app', 'environment_name' => 'env', 'account_name' => 'acc'})
57
- end
58
-
59
- it "has account_name" do
60
- @hook.eval_hook('account_name').should == 'acc'
61
- end
62
-
63
- it "has environment_name" do
64
- @hook.eval_hook('environment_name').should == 'env'
65
- end
66
-
67
- it "has app_name" do
68
- @hook.eval_hook('app_name').should == 'app'
57
+ run_hook { respond_to?(:latest_release) }.should be_true
58
+ run_hook { respond_to?(:previous_release) }.should be_true
59
+ run_hook { respond_to?(:all_releases) }.should be_true
60
+ run_hook { respond_to?(:current_path) }.should be_true
61
+ run_hook { respond_to?(:shared_path) }.should be_true
62
+ run_hook { respond_to?(:release_dir) }.should be_true
63
+ run_hook { respond_to?(:failed_release_dir)}.should be_true
64
+ run_hook { respond_to?(:release_path) }.should be_true
69
65
  end
70
66
  end
71
67
 
@@ -83,34 +79,34 @@ describe "the deploy-hook API" do
83
79
  end
84
80
 
85
81
  it "is available" do
86
- deploy_hook.eval_hook('@node.nil?').should be_false
82
+ run_hook { @node.nil? }.should be_false
87
83
  end
88
84
 
89
85
  it "has indifferent access" do
90
- deploy_hook.eval_hook('@node[:instance_role] ').should == 'solo'
91
- deploy_hook.eval_hook('@node["instance_role"]').should == 'solo'
86
+ run_hook { @node[:instance_role] }.should == 'solo'
87
+ run_hook { @node['instance_role'] }.should == 'solo'
92
88
  end
93
89
 
94
90
  it "has deep indifferent access" do
95
- deploy_hook.eval_hook('@node["applications"]["myapp"]["type"]').should == 'rails'
96
- deploy_hook.eval_hook('@node[:applications]["myapp"][:type] ').should == 'rails'
97
- deploy_hook.eval_hook('@node[:applications][:myapp][:type] ').should == 'rails'
91
+ run_hook { @node['applications']['myapp']['type'] }.should == 'rails'
92
+ run_hook { @node[:applications]['myapp'][:type] }.should == 'rails'
93
+ run_hook { @node[:applications][:myapp][:type] }.should == 'rails'
98
94
  end
99
95
  end
100
96
 
101
97
  context "the @configuration ivar" do
102
98
  it "is available" do
103
- deploy_hook.eval_hook('@configuration.nil?').should be_false
99
+ run_hook { @configuration.nil? }.should be_false
104
100
  end
105
101
 
106
102
  it "has the configuration in it" do
107
- deploy_hook('bert' => 'ernie').eval_hook('@configuration.bert').should == 'ernie'
103
+ run_hook('bert' => 'ernie') { @configuration.bert }.should == 'ernie'
108
104
  end
109
105
 
110
106
  it "can be accessed with method calls, with [:symbols], or ['strings']" do
111
- deploy_hook('bert' => 'ernie').eval_hook('@configuration.bert ').should == 'ernie'
112
- deploy_hook('bert' => 'ernie').eval_hook('@configuration[:bert] ').should == 'ernie'
113
- deploy_hook('bert' => 'ernie').eval_hook('@configuration["bert"]').should == 'ernie'
107
+ run_hook('bert' => 'ernie') { @configuration.bert }.should == 'ernie'
108
+ run_hook('bert' => 'ernie') { @configuration[:bert] }.should == 'ernie'
109
+ run_hook('bert' => 'ernie') { @configuration['bert'] }.should == 'ernie'
114
110
  end
115
111
 
116
112
  [:repository_cache,
@@ -122,7 +118,7 @@ describe "the deploy-hook API" do
122
118
  :revision,
123
119
  :environment].each do |attribute|
124
120
  it "has the #{attribute.inspect} attribute for compatibility with chef-deploy" do
125
- deploy_hook.eval_hook("@configuration.has_key?(#{attribute.inspect})").should be_true
121
+ run_hook { @configuration.has_key?(attribute) }.should be_true
126
122
  end
127
123
  end
128
124
  end
@@ -130,58 +126,62 @@ describe "the deploy-hook API" do
130
126
  context "has methods to run code only on certain instances" do
131
127
  def scenarios
132
128
  [
133
- ['solo' ],
134
- ['app_master' ],
135
- ['app' ],
136
- ['db_master' ],
137
- ['db_slave' ],
138
- ['multi_role,app'],
139
- ['multi,util' ],
140
- ['util', 'alpha' ],
141
- ['util', 'beta' ],
142
- ['util', 'gamma' ],
129
+ {:instance_role => 'solo'},
130
+ {:instance_role => 'app_master'},
131
+ {:instance_role => 'app'},
132
+ {:instance_role => 'db_master'},
133
+ {:instance_role => 'db_slave'},
134
+ {:instance_role => 'multi_role,app'},
135
+ {:instance_role => 'multi,util'},
136
+ {:instance_role => 'util', :name => "alpha"},
137
+ {:instance_role => 'util', :name => "beta"},
138
+ {:instance_role => 'util', :name => "gamma"},
143
139
  ]
144
140
  end
145
141
 
146
- def where_code_runs_with(code)
147
- scenarios.select do |role, name|
148
- hook = deploy_hook(:current_roles => role.split(','), :current_name => name)
149
- hook.eval_hook("#{code} { 'ran' } == 'ran'")
150
- end.map do |scenario|
151
- scenario.compact.join("_")
142
+ def where_code_runs_with(method, *args)
143
+ scenarios.map do |s|
144
+ @callback_context.configuration[:current_roles] = s[:instance_role].split(',')
145
+ @callback_context.configuration[:current_name] = s[:name]
146
+
147
+ if run_hook { send(method, *args) { 'ran!'} } == 'ran!'
148
+ result = s[:instance_role]
149
+ result << "_#{s[:name]}" if s[:name]
150
+ result
151
+ end
152
152
  end.compact
153
153
  end
154
154
 
155
155
  it "#on_app_master runs on app masters and solos" do
156
- where_code_runs_with("on_app_master").should == %w(solo app_master)
156
+ where_code_runs_with(:on_app_master).should == %w(solo app_master)
157
157
  end
158
158
 
159
159
  it "#on_app_servers runs on app masters, app slaves, and solos" do
160
- where_code_runs_with("on_app_servers").should == %w(solo app_master app multi_role,app)
160
+ where_code_runs_with(:on_app_servers).should == %w(solo app_master app multi_role,app)
161
161
  end
162
162
 
163
163
  it "#on_app_servers_and_utilities does what it says on the tin" do
164
- where_code_runs_with("on_app_servers_and_utilities").should ==
164
+ where_code_runs_with(:on_app_servers_and_utilities).should ==
165
165
  %w(solo app_master app multi_role,app multi,util util_alpha util_beta util_gamma)
166
166
  end
167
167
 
168
168
  it "#on_utilities() runs on all utility instances" do
169
- where_code_runs_with("on_utilities").should ==
169
+ where_code_runs_with(:on_utilities).should ==
170
170
  %w(multi,util util_alpha util_beta util_gamma)
171
171
  end
172
172
 
173
173
  it "#on_utilities('sometype') runs on only utilities of type 'sometype'" do
174
- where_code_runs_with("on_utilities('alpha')").should == %w(util_alpha)
174
+ where_code_runs_with(:on_utilities, 'alpha').should == %w(util_alpha)
175
175
  end
176
176
 
177
177
  it "#on_utilities('type1', 'type2') runs on utilities of both types" do
178
- where_code_runs_with("on_utilities('alpha', 'beta')").should ==
178
+ where_code_runs_with(:on_utilities, 'alpha', 'beta').should ==
179
179
  %w(util_alpha util_beta)
180
180
  end
181
181
 
182
182
  it "#on_utilities can be invoked with (['a', 'b']) or ('a', 'b')" do
183
- where_code_runs_with("on_utilities(%w[alpha beta])").should ==
184
- where_code_runs_with("on_utilities('alpha', 'beta')")
183
+ where_code_runs_with(:on_utilities, %w[alpha beta]).should ==
184
+ where_code_runs_with(:on_utilities, 'alpha', 'beta')
185
185
  end
186
186
 
187
187
  end
@@ -189,19 +189,20 @@ describe "the deploy-hook API" do
189
189
  context "#syntax_error" do
190
190
  it "returns nil for hook files containing valid Ruby syntax" do
191
191
  hook_path = File.expand_path('../fixtures/valid_hook.rb', __FILE__)
192
- deploy_hook.syntax_error(hook_path).should be_nil
192
+ @hook.syntax_error(hook_path).should be_nil
193
193
  end
194
194
 
195
195
  it "returns a brief problem description for hook files containing valid Ruby syntax" do
196
196
  hook_path = File.expand_path('../fixtures/invalid_hook.rb', __FILE__)
197
- error = Regexp.escape("spec/fixtures/invalid_hook.rb:1: syntax error, unexpected '^'")
198
- deploy_hook.syntax_error(hook_path).should =~ /#{error}/
197
+ desc = "spec/fixtures/invalid_hook.rb:1: syntax error, unexpected '^'"
198
+ match = /#{Regexp.escape desc}/
199
+ @hook.syntax_error(hook_path).should =~ match
199
200
  end
200
201
  end
201
202
 
202
203
  context "is compatible with older deploy hook scripts" do
203
204
  it "#current_role returns the first role" do
204
- deploy_hook(:current_roles => %w(a b)).eval_hook('current_role').should == 'a'
205
+ run_hook(:current_roles => %w(a b)) { current_role.should == 'a' }
205
206
  end
206
207
  end
207
208
  end
@@ -12,12 +12,34 @@ describe EY::Serverside do
12
12
  $stderr = @original_stderr
13
13
  end
14
14
 
15
- it "deprecates EY::Serverside::LoggedOutput for EY::Serverside::Shell::Helpers" do
16
- EY::Serverside::LoggedOutput.should == EY::Serverside::Shell::Helpers
17
- @warnings.string.should include("EY::Serverside::LoggedOutput")
15
+ def check_deprecation(new_const, prints_warning = true)
16
+ old_name = new_const.to_s.gsub('EY::Serverside::', 'EY::')
17
+ eval(old_name).should == new_const
18
+ @warnings.string.should include(old_name) if prints_warning
19
+ end
20
+
21
+ it "preserves the old constants" do
22
+ names = %w[CLI Deploy DeployBase Deploy::Configuration
23
+ DeployHook LockfileParser LoggedOutput Server Task
24
+ Strategies Strategies::Git]
25
+
26
+ names.map do |name|
27
+ const = eval("::EY::Serverside::#{name}")
28
+ # The way deprecations are implemented currently, we don't print
29
+ # warning messages for constants that aren't directly under EY::
30
+ prints_warning = name.include?('::') ? false : true
31
+ check_deprecation(const, prints_warning)
32
+ end
33
+ end
34
+
35
+ it "deprecates EY.dna_json and EY.node" do
36
+ EY.dna_json.should == EY::Serverside.dna_json
37
+ @warnings.string.should include("EY.dna_json")
38
+ EY.node.should == EY::Serverside.node
39
+ @warnings.string.should include("EY.node")
18
40
  end
19
41
 
20
42
  it "doesn't interfere with unrelated constants" do
21
- lambda{ EY::Serverside::WTFNotDefined }.should raise_error(NameError, /uninitialized constant.*WTFNotDefined/)
43
+ lambda{ EY::WTFNotDefined }.should raise_error(NameError, /uninitialized constant.*EY::WTFNotDefined/)
22
44
  end
23
45
  end
@@ -2,12 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe "the git deploy strategy" do
4
4
  subject do
5
- EY::Serverside::Strategies::Git.new(
6
- test_shell,
7
- :repo => File.join(GITREPO_DIR, 'git'),
8
- :repository_cache => GITREPO_DIR,
9
- :ref => "master"
10
- )
5
+ EY::Serverside::Strategies::Git.new(:repo => File.join(GITREPO_DIR, 'git'),
6
+ :repository_cache => GITREPO_DIR, :ref => "master")
11
7
  end
12
8
 
13
9
  before { subject.checkout }
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+ require 'tempfile'
3
+ require 'timecop'
4
+
5
+ class SampleLogUser
6
+ include EY::Serverside::LoggedOutput
7
+ def initialize
8
+ EY::Serverside::LoggedOutput.logfile = tempfile.path
9
+ EY::Serverside::LoggedOutput.verbose = true
10
+ end
11
+
12
+ def starting_time
13
+ @starting_time ||= Time.now
14
+ end
15
+
16
+ def tempfile
17
+ @tempfile ||= Tempfile.new('logged_output')
18
+ end
19
+ end
20
+
21
+ describe EY::Serverside::LoggedOutput do
22
+ before do
23
+ EY::Serverside::LoggedOutput.enable_actual_info!
24
+ @log_user = SampleLogUser.new
25
+ end
26
+
27
+ after do
28
+ EY::Serverside::LoggedOutput.disable_actual_info!
29
+ end
30
+
31
+ it "has a timestamp before each line" do
32
+ time1 = Time.local(2008, 9, 1, 12, 0, 0)
33
+ time2 = Time.local(2008, 9, 1, 12, 3, 5)
34
+ time3 = Time.local(2008, 9, 1, 12, 10, 25)
35
+
36
+ Timecop.freeze(time1) do
37
+ @log_user.debug('test1')
38
+ @log_user.warning('test2')
39
+ end
40
+ Timecop.freeze(time2) do
41
+ @log_user.info('test3')
42
+
43
+ @log_user.debug("test11\ntest12\ntest13")
44
+ @log_user.warning("test21\ntest22\ntest23")
45
+ end
46
+ Timecop.freeze(time3) do
47
+ @log_user.info("test31\ntest32\ntest33")
48
+ end
49
+
50
+ timestamp_1 = "+ 0m 00s "
51
+ timestamp_2 = "+ 3m 05s "
52
+ timestamp_3 = "+10m 25s "
53
+ File.read(@log_user.tempfile.path).should == "#{timestamp_1}test1\n#{timestamp_1}!> WARNING: test2\n\n#{timestamp_2}test3\n#{timestamp_2}test11\n#{timestamp_2}test12\n#{timestamp_2}test13\n#{timestamp_2}!> WARNING: test21\n#{timestamp_2}!> test22\n#{timestamp_2}!> test23\n\n#{timestamp_3}test31\n#{timestamp_3}test32\n#{timestamp_3}test33\n"
54
+ end
55
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe "Deploying an application that uses Node.js and NPM" do
4
4
  def deploy_test_application
5
- @deploy_dir = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
5
+ @deploy_dir = File.join(Dir.tmpdir, "serverside-deploy-#{Time.now.to_i}-#{$$}")
6
6
 
7
7
  # set up EY::Serverside::Server like we're on a solo
8
8
  EY::Serverside::Server.reset
@@ -19,7 +19,7 @@ describe "Deploying an application that uses Node.js and NPM" do
19
19
  })
20
20
 
21
21
  @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
22
- @deployer = FullTestDeploy.new(config, test_shell)
22
+ @deployer = FullTestDeploy.new(config)
23
23
  @deployer.deploy do
24
24
  FileUtils.mkdir_p(config.repository_cache) # block runs before deploy
25
25
  @deployer.generate_package_json_in(config.repository_cache)
@@ -20,13 +20,12 @@ describe "Deploying an application with services" do
20
20
  "stack" => 'nginx_passenger',
21
21
  "migrate" => nil,
22
22
  'app' => 'foo',
23
- 'environment' => 'env',
24
- 'account' => 'acc',
25
23
  'framework_env' => 'staging'
26
24
  })
27
25
 
26
+ EY::Serverside::LoggedOutput.verbose = true
28
27
  @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
29
- FullTestDeploy.new(config, test_shell)
28
+ FullTestDeploy.new(config)
30
29
  end
31
30
 
32
31
  def exist
@@ -66,7 +65,7 @@ DEPENDENCIES
66
65
  end
67
66
 
68
67
  it "warns about missing ey_config" do
69
- read_stderr.should include("WARNING: Gemfile.lock does not contain ey_config")
68
+ @deployer.infos.should be_any { |info| info =~ /WARNING: Gemfile.lock does not contain ey_config/ }
70
69
  end
71
70
 
72
71
  end
@@ -76,7 +75,7 @@ DEPENDENCIES
76
75
  end
77
76
 
78
77
  it "works without warnings" do
79
- read_output.should_not =~ /WARNING/
78
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
80
79
  end
81
80
 
82
81
  end
@@ -102,7 +101,7 @@ DEPENDENCIES
102
101
  @symlinked_services_file.should be_symlink
103
102
  @shared_services_file.read.should == "#{@invalid_services_yml}\n"
104
103
 
105
- read_output.should_not =~ /WARNING/
104
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
106
105
  end
107
106
  end
108
107
 
@@ -126,7 +125,7 @@ DEPENDENCIES
126
125
  @symlinked_services_file.should be_symlink
127
126
  @shared_services_file.read.should == "#{@services_yml}\n"
128
127
 
129
- read_output.should_not =~ /WARNING/
128
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
130
129
  end
131
130
 
132
131
  describe "followed by a deploy that can't find the command" do
@@ -145,7 +144,7 @@ DEPENDENCIES
145
144
  @symlinked_services_file.should be_symlink
146
145
  @shared_services_file.read.should == "#{@services_yml}\n"
147
146
 
148
- read_output.should_not =~ /WARNING/
147
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
149
148
  end
150
149
 
151
150
  end
@@ -167,7 +166,7 @@ DEPENDENCIES
167
166
  @symlinked_services_file.should be_symlink
168
167
  @shared_services_file.read.should == "#{@services_yml}\n"
169
168
 
170
- read_stderr.should include('WARNING: External services configuration not updated')
169
+ @deployer.infos.should be_any { |info| info =~ /WARNING: External services configuration not updated/ }
171
170
  end
172
171
 
173
172
  it "does not log a warning or symlink a config file when there is no existing services file" do
@@ -177,7 +176,7 @@ DEPENDENCIES
177
176
  @shared_services_file.should_not exist
178
177
  @symlinked_services_file.should_not exist
179
178
 
180
- read_output.should_not =~ /WARNING/
179
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
181
180
  end
182
181
 
183
182
  end
@@ -200,7 +199,7 @@ DEPENDENCIES
200
199
  @symlinked_services_file.should be_symlink
201
200
  @shared_services_file.read.should == "#{@services_yml}\n"
202
201
 
203
- read_output.should_not =~ /WARNING/
202
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
204
203
  end
205
204
 
206
205
  end