engineyard-serverside 2.8.0.pre → 2.8.0.pre2

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 (202) hide show
  1. checksums.yaml +7 -0
  2. data/bin/engineyard-serverside-execute-service-hook +1 -1
  3. data/lib/engineyard-serverside/version.rb +1 -1
  4. metadata +208 -577
  5. data/spec/archive_deploy_spec.rb +0 -53
  6. data/spec/basic_deploy_spec.rb +0 -26
  7. data/spec/bundler_deploy_spec.rb +0 -160
  8. data/spec/configuration_spec.rb +0 -206
  9. data/spec/custom_deploy_spec.rb +0 -128
  10. data/spec/deploy_hook_spec.rb +0 -378
  11. data/spec/deprecation_spec.rb +0 -23
  12. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  13. data/spec/fixtures/gitrepo.tar.gz +0 -0
  14. data/spec/fixtures/invalid_hook.rb +0 -1
  15. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  16. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  17. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  18. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  19. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  20. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  21. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  22. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  23. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  24. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  25. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  26. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  27. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  28. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  29. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  30. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  31. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  32. data/spec/fixtures/repos/assets_detected/README +0 -1
  33. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  34. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  35. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  36. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  37. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  38. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  39. data/spec/fixtures/repos/assets_disabled/README +0 -1
  40. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  41. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  42. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  43. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  44. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  45. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  46. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  47. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  48. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  49. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  50. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  51. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  52. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  53. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  54. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  55. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  56. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  57. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  58. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  59. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  60. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  61. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  62. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  63. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  64. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  65. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  66. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  67. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  68. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  69. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  70. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  71. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  72. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  73. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  74. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  75. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  76. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  77. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  78. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  79. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  80. data/spec/fixtures/repos/assets_error/README +0 -1
  81. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  82. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  83. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  84. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  85. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  86. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  87. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  88. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  89. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  90. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  91. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  92. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  93. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  94. data/spec/fixtures/repos/bundle_fails/README +0 -1
  95. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  96. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  97. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  98. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  99. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  100. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  101. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  102. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  103. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  104. data/spec/fixtures/repos/bundler_old/README +0 -1
  105. data/spec/fixtures/repos/default/Gemfile +0 -4
  106. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  107. data/spec/fixtures/repos/default/README +0 -5
  108. data/spec/fixtures/repos/default/ey.yml +0 -3
  109. data/spec/fixtures/repos/executable_hooks/README +0 -1
  110. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  111. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  112. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  113. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  114. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  115. data/spec/fixtures/repos/ey_yml/README +0 -1
  116. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  117. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  118. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  119. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  120. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  121. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  122. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  123. data/spec/fixtures/repos/hook_fails/README +0 -1
  124. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  125. data/spec/fixtures/repos/hooks/README +0 -1
  126. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  127. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  128. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  129. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  130. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  131. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  132. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  133. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  134. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  135. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  136. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  137. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  138. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  139. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  140. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  141. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  142. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  143. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  144. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  145. data/spec/fixtures/repos/no_ey_config/README +0 -1
  146. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  147. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  148. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  149. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  150. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  151. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  152. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  153. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  154. data/spec/fixtures/repos/nodejs/README +0 -1
  155. data/spec/fixtures/repos/nodejs/package.json +0 -7
  156. data/spec/fixtures/repos/not_bundled/README +0 -1
  157. data/spec/fixtures/repos/npm_disabled/README +0 -1
  158. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  159. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  160. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  161. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  162. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  163. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  164. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  165. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  166. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  167. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  168. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  169. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  170. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  171. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  172. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  173. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  174. data/spec/fixtures/repos/public_system/README +0 -5
  175. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  176. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  177. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  178. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  179. data/spec/fixtures/repos/sqlite3/README +0 -1
  180. data/spec/fixtures/retwisj.war +0 -0
  181. data/spec/fixtures/valid_hook.rb +0 -1
  182. data/spec/git_strategy_spec.rb +0 -34
  183. data/spec/lockfile_parser_spec.rb +0 -126
  184. data/spec/maintenance_spec.rb +0 -44
  185. data/spec/multi_dependency_manager_spec.rb +0 -25
  186. data/spec/nodejs_deploy_spec.rb +0 -30
  187. data/spec/php_deploy_spec.rb +0 -81
  188. data/spec/platform_configure_spec.rb +0 -61
  189. data/spec/rails31_deploy_spec.rb +0 -172
  190. data/spec/restart_spec.rb +0 -43
  191. data/spec/rollback_spec.rb +0 -87
  192. data/spec/server_spec.rb +0 -70
  193. data/spec/services_deploy_spec.rb +0 -165
  194. data/spec/shell_spec.rb +0 -57
  195. data/spec/source/archive_spec.rb +0 -33
  196. data/spec/source/git_spec.rb +0 -44
  197. data/spec/spec_helper.rb +0 -361
  198. data/spec/sqlite3_deploy_spec.rb +0 -38
  199. data/spec/support/integration.rb +0 -103
  200. data/spec/support/source_doubles.rb +0 -28
  201. data/spec/support/timecop.rb +0 -5
  202. data/spec/symlink_spec.rb +0 -15
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
- require 'tempfile'
3
- require 'timecop'
4
-
5
- describe EY::Serverside::Shell do
6
- let(:output) { StringIO.new }
7
-
8
- if "".respond_to?(:force_encoding)
9
- it "status works for ut8" do
10
- shell = EY::Serverside::Shell.new(:verbose => true, :stdout => output, :stderr => output, :log_path => tmpdir.join("engineyard-serverside-#{Time.now.to_i}-#{$$}.log"), :start_time => Time.local(2008, 9, 1, 12, 10, 25))
11
- shell.status("\u2603".force_encoding("binary"))
12
- end
13
- end
14
-
15
- it "has a timestamp before each line" do
16
- time1 = Time.local(2008, 9, 1, 12, 0, 0)
17
- time2 = Time.local(2008, 9, 1, 12, 3, 5)
18
- time3 = Time.local(2008, 9, 1, 12, 10, 25)
19
-
20
- @shell = EY::Serverside::Shell.new(:verbose => true, :stdout => output, :stderr => output, :log_path => tmpdir.join("engineyard-serverside-#{Time.now.to_i}-#{$$}.log"), :start_time => time1)
21
-
22
- Timecop.freeze(time1) do
23
- @shell.debug('debug')
24
- @shell.notice('notice')
25
- end
26
- Timecop.freeze(time2) do
27
- @shell.status('STATUS')
28
- @shell.debug("multi\nline\ndebug")
29
- @shell.warning("multi\nline\nwarning")
30
- end
31
- Timecop.freeze(time3) do
32
- @shell.substatus("multi\nline\nsubstatus")
33
- end
34
-
35
- tstp_1 = "+ 00s "
36
- tstp_2 = "+ 3m 05s "
37
- tstp_3 = "+10m 25s "
38
- output.rewind
39
- expect(output.read).to eq <<-OUTPUT
40
- #{tstp_1} debug
41
-
42
- \e[1m\e[33m#{tstp_1} !> notice
43
- \e[0m
44
- \e[1m\e[37m#{tstp_2} ~> STATUS
45
- \e[0m#{tstp_2} multi
46
- #{tstp_2} line
47
- #{tstp_2} debug
48
-
49
- \e[1m\e[33m#{tstp_2} !> WARNING: multi
50
- #{tstp_2} !> line
51
- #{tstp_2} !> warning
52
- \e[0m#{tstp_3} ~ multi
53
- #{tstp_3} ~ line
54
- #{tstp_3} ~ substatus
55
- OUTPUT
56
- end
57
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe EY::Serverside::Source::Archive do
4
- before do
5
- allow_any_instance_of(described_class).to receive(:runner) { RunnerDouble }
6
- end
7
-
8
- context "source" do
9
- let(:shell) { ShellDouble.new }
10
- subject {
11
- described_class.new(shell,
12
- :uri => "http://server.com/app.war",
13
- :repository_cache => TMPDIR)
14
- }
15
-
16
- it "cleans cache" do
17
- expect(subject).to respond_to(:gc_repository_cache)
18
- end
19
-
20
- it "compares revisions" do
21
- expect(subject.same?("1", "1")).to be
22
- end
23
-
24
- it "understands short log message" do
25
- expect(subject).to respond_to(:short_log_message)
26
- end
27
-
28
- it "updates the cache" do
29
- subject.update_repository_cache
30
- end
31
-
32
- end
33
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe EY::Serverside::Source::Git do
4
- before do
5
- allow_any_instance_of(described_class).to receive(:runner) { RunnerDouble }
6
- end
7
-
8
- it "errors when required options are not used" do
9
- expect { described_class.new(nil, {}) }.to raise_error(ArgumentError)
10
- end
11
-
12
- context "source" do
13
- let(:shell) { ShellDouble.new }
14
- subject {
15
- described_class.new(shell,
16
- :uri => "engineyard/engineyard-serverside.git",
17
- :ref => "",
18
- :repository_cache => "cache_dir")
19
- }
20
-
21
- it "creates the correct reivison file command" do
22
- expect(subject.create_revision_file_command("directory/REVISION")).to eq(
23
- "git --git-dir cache_dir/.git --work-tree cache_dir show --pretty=format:\"%H\" | head -1 > \"directory/REVISION\""
24
- )
25
- end
26
-
27
- it "runs gc" do
28
- expect(subject.gc_repository_cache.output).to eq("git --git-dir cache_dir/.git --work-tree cache_dir gc")
29
- expect(shell.messages.last).to eq("Garbage collecting cached git repository to reduce disk usage.")
30
- end
31
-
32
- it "checks if it is the same revision" do
33
- expect(subject.same?("", "")).to be
34
- end
35
-
36
- it "runs a short log message" do
37
- expect(subject.short_log_message("rev")).to eq(
38
- "git --git-dir cache_dir/.git --work-tree cache_dir log --pretty=oneline --abbrev-commit -n 1 'rev'"
39
- )
40
- end
41
-
42
- end
43
-
44
- end
@@ -1,361 +0,0 @@
1
- $LOAD_PATH.push File.expand_path("../lib", File.dirname(__FILE__))
2
-
3
- unless defined?(Bundler)
4
- require 'rubygems'
5
- end
6
-
7
-
8
- unless RUBY_VERSION =~ /^1\.8\./
9
- require 'simplecov'
10
- SimpleCov.coverage_dir 'coverage/outside'
11
- SimpleCov.start do
12
- add_filter '/spec/'
13
- add_filter '/features/'
14
- add_filter '/mock/'
15
- add_filter '/lib/vendor/'
16
- add_group 'CLI Workflows', 'lib/engineyard-serverside/cli/workflows/'
17
- add_group 'Callbacks', 'lib/engineyard-serverside/callbacks'
18
- end
19
- end
20
-
21
- require 'pp'
22
- require 'engineyard-serverside'
23
- require 'engineyard-serverside-adapter'
24
- require 'support/integration'
25
- require 'support/source_doubles'
26
- require 'support/timecop'
27
-
28
- FIXTURES_DIR = Pathname.new(__FILE__).dirname.join("fixtures")
29
- TMPDIR = Pathname.new(__FILE__).dirname.parent.join('tmp')
30
- GROUP = `id -gn`.strip
31
- INTERNAL_KEY = Pathname.new("~/.ssh/id_rsa").expand_path
32
-
33
- module EY
34
- module Serverside
35
- def self.dna_json=(j)
36
- @dna_json = j
37
- @node = nil
38
- end
39
- end
40
- end
41
-
42
- module SpecDependencyHelpers
43
- $NPM_INSTALLED = system('which npm 2>&1')
44
- unless $NPM_INSTALLED
45
- $stderr.puts "npm not found; skipping Node.js specs."
46
- end
47
-
48
- def with_npm_mocked(&block)
49
- context("mocked") { yield true }
50
- context("unmocked") { yield false } if $NPM_INSTALLED
51
- end
52
-
53
- $COMPOSER_INSTALLED = system('command -v composer > /dev/null')
54
- if $COMPOSER_INSTALLED
55
- $stderr.puts "composer found; skipping tests that expect it to be missing."
56
- else
57
- $stderr.puts "composer not found; skipping tests that expect it to be available."
58
- end
59
-
60
- def with_composer_mocked(&block)
61
- context("mocked") { yield true }
62
- context("unmocked") { yield false } if $COMPOSER_INSTALLED
63
- end
64
- end
65
-
66
- RSpec.configure do |config|
67
- config.extend SpecDependencyHelpers
68
-
69
- config.before(:all) do
70
- make_tmpdir
71
- EY::Serverside.dna_json = MultiJson.dump({})
72
- end
73
-
74
- config.after(:all) do
75
- delete_tmpdir
76
- end
77
-
78
- class VerboseStringIO < StringIO
79
- def <<(str)
80
- if ENV['VERBOSE'] || ENV['DEBUG']
81
- STDERR << str
82
- end
83
- super
84
- end
85
- end
86
-
87
- def tmpdir
88
- TMPDIR
89
- end
90
-
91
- def make_tmpdir
92
- tmpdir.mkpath
93
- end
94
-
95
- def delete_tmpdir
96
- tmpdir.exist? && tmpdir.rmtree
97
- end
98
-
99
- def stdout
100
- @stdout ||= VerboseStringIO.new
101
- end
102
-
103
- def stderr
104
- @stderr ||= VerboseStringIO.new
105
- end
106
-
107
- def read_stdout
108
- stdout.rewind
109
- stdout.read
110
- end
111
-
112
- def read_stderr
113
- stderr.rewind
114
- stderr.read
115
- end
116
-
117
- def read_output
118
- read_stdout + "\n" + read_stderr
119
- end
120
-
121
- def capture
122
- begin
123
- $stdout = @stdout = VerboseStringIO.new
124
- $stderr = @stderr = VerboseStringIO.new
125
- yield
126
- ensure
127
- $stdout, $stderr = STDOUT, STDERR
128
- end
129
- end
130
-
131
- def test_shell(verbose=true)
132
- @test_shell ||= begin
133
- @log_path = tmpdir.join("serverside-deploy-#{Time.now.to_f}-#{$$}.log")
134
- EY::Serverside::Shell.new(:verbose => verbose, :log_path => @log_path, :stdout => stdout, :stderr => stderr)
135
- end
136
- end
137
-
138
- def exist
139
- be_exist
140
- end
141
-
142
- def bindir
143
- @bindir ||= begin
144
- dir = tmpdir.join("ey_test_cmds_#{Time.now.to_f}_#{$$}")
145
- dir.mkpath
146
- dir
147
- end
148
- end
149
-
150
- def mock_command(cmd, contents, &block)
151
- bindir.join(cmd).open('w') do |f|
152
- f.write contents
153
- f.chmod(0755)
154
- end
155
- with_mocked_commands(&block) if block_given?
156
- end
157
-
158
- def mock_bundler(failure = false, &block)
159
- mock_command('bundle', <<-SCRIPT, &block)
160
- #!#{`which ruby`}
161
- puts "Bundling gems"
162
- $stdout.flush
163
- #{failure && '$stderr.puts "bundle install failure"; exit 1'}
164
- SCRIPT
165
- end
166
-
167
- def mock_npm(&block)
168
- mock_command('npm', <<-SCRIPT, &block)
169
- #!/bin/bash
170
- echo "Running npm with $@"
171
- SCRIPT
172
- end
173
-
174
- def mock_composer(&block)
175
- mock_command('composer', <<-SCRIPT, &block)
176
- #!/bin/bash
177
- echo "Running composer with $@"
178
- SCRIPT
179
- end
180
-
181
- def mock_sudo(&block)
182
- mock_command('sudo', <<-SCRIPT, &block)
183
- #!/bin/bash
184
- echo "$@"
185
- exec "$@"
186
- SCRIPT
187
- end
188
-
189
- def with_mocked_commands(&block)
190
- with_env('PATH' => "#{bindir}:#{ENV['PATH']}", &block)
191
- end
192
-
193
- def with_env(new_env_vars)
194
- raise ArgumentError, "with_env takes a block" unless block_given?
195
-
196
- old_env_vars = {}
197
- new_env_vars.each do |k, v|
198
- if ENV.has_key?(k)
199
- old_env_vars[k] = ENV[k]
200
- end
201
- ENV[k] = v if v
202
- end
203
-
204
- yield
205
- ensure
206
- new_env_vars.keys.each do |k|
207
- if old_env_vars.has_key?(k)
208
- ENV[k] = old_env_vars[k]
209
- else
210
- ENV.delete(k)
211
- end
212
- end
213
- end
214
-
215
-
216
- def deploy_dir
217
- @deploy_dir ||= tmpdir.join("serverside-deploy-#{Time.now.to_f}-#{$$}")
218
- end
219
-
220
- def whoami
221
- ENV['USER']
222
- end
223
-
224
- # set up EY::Serverside::Server like we're on a solo
225
- def test_servers
226
- @test_servers ||= EY::Serverside::Servers.from_hashes([{:hostname => 'localhost', :roles => %w[solo], :user => whoami}], test_shell)
227
- end
228
-
229
- def default_configuration
230
- {
231
- "source_class" => "IntegrationSpec",
232
- "deploy_to" => deploy_dir.to_s,
233
- "group" => GROUP,
234
- "stack" => 'nginx_passenger',
235
- "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{deploy_dir}/path-when-migrating",
236
- "app" => 'rails31',
237
- "environment_name" => 'env',
238
- "account_name" => 'acc',
239
- "framework_env" => 'staging',
240
- "branch" => 'somebranch',
241
- "verbose" => true,
242
- "git" => FIXTURES_DIR.join('repos', 'default'),
243
- }
244
- end
245
-
246
- def test_adapter(repo_fixture_name = 'default', extra_config = {})
247
- options = default_configuration.merge({ "git" => FIXTURES_DIR.join('repos', repo_fixture_name)}).merge(extra_config)
248
-
249
- # pretend there is a shared bundled_gems directory
250
- deploy_dir.join('shared', 'bundled_gems').mkpath
251
- %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
252
- deploy_dir.join('shared', 'bundled_gems', name).open("w") { |f| f.write("old\n") }
253
- end
254
-
255
- EY::Serverside::Adapter.new do |args|
256
- args.app = options['app']
257
- args.environment_name = options['environment_name']
258
- args.account_name = options['account_name']
259
- args.migrate = options['migrate']
260
- args.ref = options['branch']
261
- args.git = options['git']
262
- args.serverside_version = Gem::Version.create(EY::Serverside::VERSION.dup).release
263
- args.config = {
264
- "services_check_command" => "which echo",
265
- "services_setup_command" => "echo 'services setup command'",
266
- "source_class" => options["source_class"],
267
- "deploy_to" => options["deploy_to"],
268
- "group" => options["group"],
269
- }.merge(options['config'] || {})
270
- args.framework_env = options['framework_env']
271
- args.stack = options['stack']
272
- args.verbose = options['verbose']
273
- args.clean = options['clean']
274
- args.instances = test_servers.map {|s| {:hostname => s.hostname, :roles => s.roles.to_a, :name => s.name} }
275
- end
276
- end
277
-
278
- # When a repo fixture name is specified, the files found in the specified
279
- # spec/fixtures/repos dir are copied into the test github repository.
280
- def deploy_test_application(repo_fixture_name = 'default', extra_config = {}, &block)
281
- Timecop.travel(1)
282
- @adapter = test_adapter(repo_fixture_name, extra_config)
283
- @argv = @adapter.deploy.commands.last.to_argv[2..-1]
284
-
285
- FullTestDeploy.on_create_callback = block
286
-
287
- mock_bundler(extra_config['bundle_install_fails'])
288
- with_mocked_commands do
289
- capture do
290
- EY::Serverside::CLI::App.start(@argv)
291
- end
292
- end
293
- ensure
294
- @deployer = EY::Serverside::Deploy.deployer
295
- @config = EY::Serverside::Deploy.config
296
- end
297
-
298
- def redeploy_test_application(extra_config = {}, &block)
299
- Timecop.travel(1)
300
- raise "Please deploy_test_application first" unless @argv
301
- bundle_install_fails = extra_config.delete('bundle_install_fails')
302
-
303
- @action = @adapter.deploy do |args|
304
- extra_config.each do |key,val|
305
- case key
306
- when 'branch' then args.ref = val
307
- when 'config' then args.config = args.config.merge(val || {})
308
- else args.send("#{key}=", val)
309
- end
310
- end
311
- end
312
-
313
- @argv = @action.commands.last.to_argv[2..-1]
314
-
315
- FullTestDeploy.on_create_callback = block
316
-
317
- mock_bundler(bundle_install_fails)
318
-
319
- with_mocked_commands do
320
- capture do
321
- EY::Serverside::CLI::App.start(@argv)
322
- end
323
- end
324
- ensure
325
- @deployer = EY::Serverside::Deploy.deployer
326
- @config = EY::Serverside::Deploy.config
327
- end
328
-
329
- def enable_maintenance(extra_adapter_config = {})
330
- @adapter = test_adapter("default", extra_adapter_config)
331
- @argv = @adapter.enable_maintenance.commands.last.to_argv[2..-1]
332
-
333
- with_mocked_commands do
334
- capture do
335
- EY::Serverside::CLI::App.start(@argv)
336
- end
337
- end
338
- end
339
-
340
- def disable_maintenance(extra_adapter_config = {})
341
- @adapter = test_adapter("default", extra_adapter_config)
342
- @argv = @adapter.disable_maintenance.commands.last.to_argv[2..-1]
343
-
344
- with_mocked_commands do
345
- capture do
346
- EY::Serverside::CLI::App.start(@argv)
347
- end
348
- end
349
- end
350
-
351
- def maintenance_status(extra_adapter_config = {})
352
- @adapter = test_adapter("default", extra_adapter_config)
353
- @argv = @adapter.maintenance_status.commands.last.to_argv[2..-1]
354
-
355
- with_mocked_commands do
356
- capture do
357
- EY::Serverside::CLI::App.start(@argv)
358
- end
359
- end
360
- end
361
- end