engineyard-serverside 1.6.0.pre5 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
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