engineyard-serverside 2.0.0.pre3 → 2.0.0.pre4

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.
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Rolling back" do
4
+ context "without bundler" do
5
+ before(:all) do
6
+ deploy_test_application('not_bundled', 'migrate' => nil)
7
+ @good_revision = deploy_dir.join('current', 'REVISION').read.strip
8
+ deploy_dir.join('current', 'REVISION').should exist
9
+ deploy_dir.join('current', 'restart').delete
10
+ deploy_test_application('not_bundled', 'migrate' => nil)
11
+ deploy_dir.join('current', 'REVISION').should exist
12
+ deploy_dir.join('current', 'restart').delete
13
+ end
14
+
15
+ it "rolls back to the older deploy" do
16
+ releases = @deployer.config.paths.all_releases
17
+ releases.size.should == 2
18
+ good_release = releases.first
19
+ bad_release = releases.last
20
+
21
+ @deployer.rollback
22
+ out = read_output
23
+ out.should =~ /Rolling back to previous release.*#{@good_revision}/
24
+ out.should =~ /Restarting with previous release./
25
+ out.should =~ /Finished rollback/
26
+
27
+ deploy_dir.join('current', 'restart').should exist
28
+ bad_release.should_not exist
29
+ good_release.join('restart').should exist
30
+ end
31
+ end
32
+
33
+ context "with complex config" do
34
+ before(:all) do
35
+ deploy_test_application('ey_yml', 'migrate' => nil)
36
+ @good_revision = deploy_dir.join('current', 'REVISION').read.strip
37
+ deploy_dir.join('current', 'REVISION').should exist
38
+ deploy_dir.join('current', 'restart').delete
39
+ deploy_test_application('ey_yml', 'migrate' => nil)
40
+ deploy_dir.join('current', 'REVISION').should exist
41
+ deploy_dir.join('current', 'restart').delete
42
+ end
43
+
44
+ it "rolls back to the older deploy" do
45
+ releases = @deployer.config.paths.all_releases
46
+ releases.size.should == 2
47
+ good_release = releases.first
48
+ bad_release = releases.last
49
+
50
+ @deployer.rollback
51
+ out = read_output
52
+ out.should =~ /Rolling back to previous release.*#{@good_revision}/
53
+ out.should =~ /Restarting with previous release./
54
+ out.should =~ /Finished rollback/
55
+
56
+ deploy_dir.join('current', 'restart').should exist
57
+ bad_release.should_not exist
58
+ good_release.join('restart').should exist
59
+ end
60
+ end
61
+ end
data/spec/server_spec.rb CHANGED
@@ -1,76 +1,70 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe EY::Serverside::Server do
4
- before(:each) do
5
- EY::Serverside::Server.reset
4
+ it "starts off empty" do
5
+ EY::Serverside::Servers.new([]).should be_empty
6
6
  end
7
7
 
8
- context ".all" do
9
- it "starts off empty" do
10
- EY::Serverside::Server.all.should be_empty
11
- end
12
-
13
- it "is added to with .add" do
14
- EY::Serverside::Server.add(:hostname => 'otherhost', :roles => %w[fire water])
15
- EY::Serverside::Server.all.size.should == 1
16
-
17
- EY::Serverside::Server.by_hostname('otherhost').should_not be_nil
18
- end
8
+ it "loads from hashes" do
9
+ servers = EY::Serverside::Servers.from_hashes([{:hostname => 'otherhost', :roles => %w[fire water]}])
10
+ servers.size.should == 1
11
+ end
19
12
 
20
- it "rejects duplicates" do
21
- EY::Serverside::Server.add(:hostname => 'otherhost')
22
- lambda do
23
- EY::Serverside::Server.add(:hostname => 'otherhost')
24
- end.should raise_error(EY::Serverside::Server::DuplicateHostname)
25
- end
13
+ it "rejects duplicates" do
14
+ lambda do
15
+ EY::Serverside::Servers.from_hashes([
16
+ {:hostname => 'otherhost', :roles => [:fire]},
17
+ {:hostname => 'otherhost', :roles => [:water]},
18
+ ])
19
+ end.should raise_error(EY::Serverside::Servers::DuplicateHostname)
26
20
  end
27
21
 
28
22
  it "makes sure your roles are symbols at creation time" do
29
- EY::Serverside::Server.add(:hostname => 'otherhost', :roles => ['beerguy'])
30
-
31
- EY::Serverside::Server.by_hostname('otherhost').roles.should == [:beerguy]
23
+ servers = EY::Serverside::Servers.from_hashes([{:hostname => 'otherhost', :roles => %w[fire water]}])
24
+ servers.each { |server| server.roles.should == Set[:fire, :water] }
32
25
  end
33
26
 
34
- it "makes sure your roles are symbols when updated" do
35
- EY::Serverside::Server.add(:hostname => 'otherhost')
27
+ context "filtering" do
28
+ before(:each) do
29
+ @servers = EY::Serverside::Servers.from_hashes([
30
+ {:hostname => 'localhost', :roles => [:ice, :cold]},
31
+ {:hostname => 'firewater', :roles => [:fire, :water]},
32
+ {:hostname => 'icewater', :roles => [:ice, :water]},
33
+ ])
34
+ end
36
35
 
37
- server = EY::Serverside::Server.by_hostname('otherhost')
38
- server.roles = %w[bourbon scotch beer]
39
- server.roles.should == [:bourbon, :scotch, :beer]
40
- end
36
+ it "#roles works with strings or symbols" do
37
+ @servers.roles(:fire ).map{|s| s.hostname}.should == ['firewater']
38
+ @servers.roles('fire').map{|s| s.hostname}.should == ['firewater'] # hits the cache the second time
39
+ end
41
40
 
42
- context ".from_roles" do
43
- before(:each) do
44
- @localhost = EY::Serverside::Server.add(:hostname => 'localhost', :roles => [:ice, :cold])
45
- @host1 = EY::Serverside::Server.add(:hostname => 'host1', :roles => [:fire, :water])
46
- @host2 = EY::Serverside::Server.add(:hostname => 'host2', :roles => [:ice, :water])
41
+ it "#roles finds all servers with the specified role" do
42
+ @servers.roles(:ice).size.should == 2
43
+ @servers.roles(:ice).map{|s| s.hostname}.sort.should == ['icewater','localhost']
47
44
  end
48
45
 
49
- it "works with strings or symbols" do
50
- EY::Serverside::Server.from_roles(:fire).should == [@host1]
51
- EY::Serverside::Server.from_roles('fire').should == [@host1]
46
+ it "#roles finds all servers with any of the specified roles" do
47
+ @servers.roles(:ice, :water).should == @servers
52
48
  end
53
49
 
54
- it "finds all servers with the specified role" do
55
- EY::Serverside::Server.from_roles('ice').size.should == 2
56
- EY::Serverside::Server.from_roles('ice').sort do |a, b|
57
- a.hostname <=> b.hostname
58
- end.should == [@host2, @localhost]
50
+ it "#roles returns everything when asked for :all" do
51
+ @servers.roles(:all).should == @servers
59
52
  end
60
53
 
61
- it "finds all servers with any of the specified roles" do
62
- EY::Serverside::Server.from_roles(:ice, :water).should == EY::Serverside::Server.all
54
+ it "#roles also yields filtered server set" do
55
+ @servers.roles(:ice) do |servers|
56
+ servers.size.should == 2
57
+ servers.map{|s| s.hostname}.sort.should == ['icewater','localhost']
58
+ end
63
59
  end
64
60
 
65
- it "returns everything when asked for :all" do
66
- EY::Serverside::Server.from_roles(:all).should == EY::Serverside::Server.all
61
+ it "#localhost returns the localhost server" do
62
+ @servers.localhost.hostname.should == 'localhost'
67
63
  end
68
- end
69
64
 
70
- context "#local?" do
71
- it "is true only for localhost" do
72
- EY::Serverside::Server.new('localhost').should be_local
73
- EY::Serverside::Server.new('neighborhost').should_not be_local
65
+ it "#remote returns non-localhost servers" do
66
+ @servers.remote.size.should == 2
67
+ @servers.remote.map {|s| s.hostname}.sort.should == ['firewater','icewater']
74
68
  end
75
69
  end
76
70
  end
data/spec/spec_helper.rb CHANGED
@@ -83,30 +83,37 @@ Spec::Runner.configure do |config|
83
83
  end
84
84
 
85
85
  def test_shell
86
- log_path = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}.log")
87
- EY::Serverside::Shell.new(:verbose => true, :log_path => log_path, :stdout => stdout, :stderr => stderr)
86
+ @test_shell ||= begin
87
+ log_path = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}.log")
88
+ EY::Serverside::Shell.new(:verbose => true, :log_path => log_path, :stdout => stdout, :stderr => stderr)
89
+ end
88
90
  end
89
91
 
90
92
  def exist
91
93
  be_exist
92
94
  end
93
95
 
96
+ def deploy_dir
97
+ @deploy_dir ||= Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
98
+ end
99
+
100
+ # set up EY::Serverside::Server like we're on a solo
101
+ def test_servers
102
+ EY::Serverside::Servers.from_hashes([{:hostname => 'localhost', :roles => %w[solo]}])
103
+ end
104
+
94
105
  # When a repo fixture name is specified, the files found in the specified
95
106
  # spec/fixtures/repos dir are copied into the test github repository.
96
107
  def deploy_test_application(repo_fixture_name = 'default', extra_config = {}, &block)
97
- @deploy_dir = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
98
-
99
- # set up EY::Serverside::Server like we're on a solo
100
- EY::Serverside::Server.reset
101
- EY::Serverside::Server.add(:hostname => 'localhost', :roles => %w[solo])
108
+ servers = test_servers
102
109
 
103
110
  # run a deploy
104
111
  @config = EY::Serverside::Deploy::Configuration.new({
105
112
  "strategy" => "IntegrationSpec",
106
- "deploy_to" => @deploy_dir.to_s,
113
+ "deploy_to" => deploy_dir.to_s,
107
114
  "group" => GROUP,
108
115
  "stack" => 'nginx_passenger',
109
- "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{@deploy_dir}/path-when-migrating",
116
+ "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{deploy_dir}/path-when-migrating",
110
117
  'app' => 'rails31',
111
118
  'environment_name' => 'env',
112
119
  'account_name' => 'acc',
@@ -116,13 +123,13 @@ Spec::Runner.configure do |config|
116
123
  }.merge(extra_config))
117
124
 
118
125
  # pretend there is a shared bundled_gems directory
119
- @deploy_dir.join('shared', 'bundled_gems').mkpath
126
+ deploy_dir.join('shared', 'bundled_gems').mkpath
120
127
  %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
121
- @deploy_dir.join('shared', 'bundled_gems', name).open("w") { |f| f.write("old\n") }
128
+ deploy_dir.join('shared', 'bundled_gems', name).open("w") { |f| f.write("old\n") }
122
129
  end
123
130
 
124
131
  @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
125
- @deployer = FullTestDeploy.new(@config, test_shell)
132
+ @deployer = FullTestDeploy.new(servers, @config, test_shell)
126
133
  yield @deployer if block_given?
127
134
  @deployer.deploy
128
135
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
3
  version: !ruby/object:Gem::Version
4
- hash: 74746199
4
+ hash: 883885311
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
9
  - 0
10
10
  - pre
11
- - 3
12
- version: 2.0.0.pre3
11
+ - 4
12
+ version: 2.0.0.pre4
13
13
  platform: ruby
14
14
  authors:
15
15
  - EY Cloud Team
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-06-06 00:00:00 Z
20
+ date: 2012-06-13 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rspec
@@ -105,6 +105,7 @@ extra_rdoc_files: []
105
105
  files:
106
106
  - bin/engineyard-serverside
107
107
  - lib/engineyard-serverside/cli.rb
108
+ - lib/engineyard-serverside/cli_helpers.rb
108
109
  - lib/engineyard-serverside/configuration.rb
109
110
  - lib/engineyard-serverside/default_maintenance_page.html
110
111
  - lib/engineyard-serverside/deploy.rb
@@ -114,8 +115,10 @@ files:
114
115
  - lib/engineyard-serverside/futures/celluloid.rb
115
116
  - lib/engineyard-serverside/futures/dataflow.rb
116
117
  - lib/engineyard-serverside/lockfile_parser.rb
118
+ - lib/engineyard-serverside/paths.rb
117
119
  - lib/engineyard-serverside/rails_asset_support.rb
118
120
  - lib/engineyard-serverside/server.rb
121
+ - lib/engineyard-serverside/servers.rb
119
122
  - lib/engineyard-serverside/shell/formatter.rb
120
123
  - lib/engineyard-serverside/shell/helpers.rb
121
124
  - lib/engineyard-serverside/shell.rb
@@ -364,17 +367,20 @@ files:
364
367
  - spec/fixtures/lockfiles/1.0.6-with-any-bundler
365
368
  - spec/fixtures/lockfiles/1.0.6-with-bundler
366
369
  - spec/fixtures/lockfiles/not-a-lockfile
370
+ - spec/fixtures/repos/assets_disabled/app/assets/empty
367
371
  - spec/fixtures/repos/assets_disabled/config/application.rb
368
372
  - spec/fixtures/repos/assets_disabled/Gemfile
369
373
  - spec/fixtures/repos/assets_disabled/Gemfile.lock
370
374
  - spec/fixtures/repos/assets_disabled/Rakefile
371
375
  - spec/fixtures/repos/assets_disabled/README
376
+ - spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty
372
377
  - spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb
373
378
  - spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml
374
379
  - spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile
375
380
  - spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock
376
381
  - spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile
377
382
  - spec/fixtures/repos/assets_disabled_in_ey_yml/README
383
+ - spec/fixtures/repos/assets_enabled/app/assets/empty
378
384
  - spec/fixtures/repos/assets_enabled/config/application.rb
379
385
  - spec/fixtures/repos/assets_enabled/Gemfile
380
386
  - spec/fixtures/repos/assets_enabled/Gemfile.lock
@@ -385,6 +391,7 @@ files:
385
391
  - spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock
386
392
  - spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile
387
393
  - spec/fixtures/repos/assets_enabled_in_ey_yml/README
394
+ - spec/fixtures/repos/assets_in_hook/app/assets/empty
388
395
  - spec/fixtures/repos/assets_in_hook/config/application.rb
389
396
  - spec/fixtures/repos/assets_in_hook/deploy/before_migrate.rb
390
397
  - spec/fixtures/repos/assets_in_hook/Gemfile
@@ -434,6 +441,7 @@ files:
434
441
  - spec/nodejs_deploy_spec.rb
435
442
  - spec/rails31_deploy_spec.rb
436
443
  - spec/restart_spec.rb
444
+ - spec/rollback_spec.rb
437
445
  - spec/server_spec.rb
438
446
  - spec/services_deploy_spec.rb
439
447
  - spec/shell_spec.rb
@@ -500,17 +508,20 @@ test_files:
500
508
  - spec/fixtures/lockfiles/1.0.6-with-any-bundler
501
509
  - spec/fixtures/lockfiles/1.0.6-with-bundler
502
510
  - spec/fixtures/lockfiles/not-a-lockfile
511
+ - spec/fixtures/repos/assets_disabled/app/assets/empty
503
512
  - spec/fixtures/repos/assets_disabled/config/application.rb
504
513
  - spec/fixtures/repos/assets_disabled/Gemfile
505
514
  - spec/fixtures/repos/assets_disabled/Gemfile.lock
506
515
  - spec/fixtures/repos/assets_disabled/Rakefile
507
516
  - spec/fixtures/repos/assets_disabled/README
517
+ - spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty
508
518
  - spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb
509
519
  - spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml
510
520
  - spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile
511
521
  - spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock
512
522
  - spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile
513
523
  - spec/fixtures/repos/assets_disabled_in_ey_yml/README
524
+ - spec/fixtures/repos/assets_enabled/app/assets/empty
514
525
  - spec/fixtures/repos/assets_enabled/config/application.rb
515
526
  - spec/fixtures/repos/assets_enabled/Gemfile
516
527
  - spec/fixtures/repos/assets_enabled/Gemfile.lock
@@ -521,6 +532,7 @@ test_files:
521
532
  - spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock
522
533
  - spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile
523
534
  - spec/fixtures/repos/assets_enabled_in_ey_yml/README
535
+ - spec/fixtures/repos/assets_in_hook/app/assets/empty
524
536
  - spec/fixtures/repos/assets_in_hook/config/application.rb
525
537
  - spec/fixtures/repos/assets_in_hook/deploy/before_migrate.rb
526
538
  - spec/fixtures/repos/assets_in_hook/Gemfile
@@ -570,6 +582,7 @@ test_files:
570
582
  - spec/nodejs_deploy_spec.rb
571
583
  - spec/rails31_deploy_spec.rb
572
584
  - spec/restart_spec.rb
585
+ - spec/rollback_spec.rb
573
586
  - spec/server_spec.rb
574
587
  - spec/services_deploy_spec.rb
575
588
  - spec/shell_spec.rb