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.
- data/lib/engineyard-serverside.rb +1 -3
- data/lib/engineyard-serverside/cli.rb +38 -73
- data/lib/engineyard-serverside/configuration.rb +12 -38
- data/lib/engineyard-serverside/deploy.rb +54 -63
- data/lib/engineyard-serverside/deploy_hook.rb +18 -21
- data/lib/engineyard-serverside/deprecation.rb +17 -9
- data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
- data/lib/engineyard-serverside/logged_output.rb +91 -0
- data/lib/engineyard-serverside/rails_asset_support.rb +5 -5
- data/lib/engineyard-serverside/server.rb +11 -8
- data/lib/engineyard-serverside/strategies/git.rb +15 -12
- data/lib/engineyard-serverside/task.rb +8 -29
- data/lib/engineyard-serverside/version.rb +1 -1
- data/lib/vendor/systemu/LICENSE +3 -0
- data/lib/vendor/systemu/lib/systemu.rb +363 -0
- data/lib/vendor/systemu/systemu.gemspec +45 -0
- data/spec/basic_deploy_spec.rb +9 -9
- data/spec/bundler_deploy_spec.rb +1 -1
- data/spec/custom_deploy_spec.rb +4 -63
- data/spec/deploy_hook_spec.rb +78 -77
- data/spec/deprecation_spec.rb +26 -4
- data/spec/git_strategy_spec.rb +2 -6
- data/spec/logged_output_spec.rb +55 -0
- data/spec/nodejs_deploy_spec.rb +2 -2
- data/spec/services_deploy_spec.rb +10 -11
- data/spec/spec_helper.rb +25 -48
- data/spec/sqlite3_deploy_spec.rb +2 -1
- data/spec/support/integration.rb +14 -2
- metadata +79 -94
- data/lib/engineyard-serverside/shell.rb +0 -102
- data/lib/engineyard-serverside/shell/formatter.rb +0 -73
- data/lib/engineyard-serverside/shell/helpers.rb +0 -29
- data/lib/vendor/open4/lib/open4.rb +0 -432
- data/spec/shell_spec.rb +0 -50
data/spec/deploy_hook_spec.rb
CHANGED
@@ -1,71 +1,67 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "the deploy-hook API" do
|
4
|
-
|
5
|
-
|
6
|
-
EY::Serverside::DeployHook.new(config
|
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
|
-
|
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
|
-
|
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
|
-
|
25
|
-
|
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
|
-
|
45
|
+
run_hook { respond_to?(:sudo) }.should be_true
|
32
46
|
end
|
33
47
|
|
34
48
|
it "runs things with sudo" do
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
82
|
+
run_hook { @node.nil? }.should be_false
|
87
83
|
end
|
88
84
|
|
89
85
|
it "has indifferent access" do
|
90
|
-
|
91
|
-
|
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
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
99
|
+
run_hook { @configuration.nil? }.should be_false
|
104
100
|
end
|
105
101
|
|
106
102
|
it "has the configuration in it" do
|
107
|
-
|
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
|
-
|
112
|
-
|
113
|
-
|
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
|
-
|
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
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
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(
|
147
|
-
scenarios.
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
184
|
-
where_code_runs_with(
|
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
|
-
|
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
|
-
|
198
|
-
|
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
|
-
|
205
|
+
run_hook(:current_roles => %w(a b)) { current_role.should == 'a' }
|
205
206
|
end
|
206
207
|
end
|
207
208
|
end
|
data/spec/deprecation_spec.rb
CHANGED
@@ -12,12 +12,34 @@ describe EY::Serverside do
|
|
12
12
|
$stderr = @original_stderr
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
EY::Serverside::
|
17
|
-
|
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::
|
43
|
+
lambda{ EY::WTFNotDefined }.should raise_error(NameError, /uninitialized constant.*EY::WTFNotDefined/)
|
22
44
|
end
|
23
45
|
end
|
data/spec/git_strategy_spec.rb
CHANGED
@@ -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
|
-
|
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
|
data/spec/nodejs_deploy_spec.rb
CHANGED
@@ -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 =
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
202
|
+
@deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
|
204
203
|
end
|
205
204
|
|
206
205
|
end
|