capistrano 2.8.0 → 3.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. data/.docker/Dockerfile +7 -0
  3. data/.docker/ssh_key_rsa +49 -0
  4. data/.docker/ssh_key_rsa.pub +1 -0
  5. data/.docker/ubuntu_setup.sh +23 -0
  6. data/.github/issue_template.md +19 -0
  7. data/.github/pull_request_template.md +22 -0
  8. data/.github/release-drafter.yml +25 -0
  9. data/.github/workflows/ci.yml +80 -0
  10. data/.github/workflows/release-drafter.yml +18 -0
  11. data/.gitignore +23 -8
  12. data/.rubocop.yml +62 -0
  13. data/CHANGELOG.md +1 -0
  14. data/CONTRIBUTING.md +63 -0
  15. data/DEVELOPMENT.md +112 -0
  16. data/Gemfile +42 -9
  17. data/LICENSE.txt +21 -0
  18. data/README.md +221 -0
  19. data/RELEASING.md +17 -0
  20. data/Rakefile +17 -8
  21. data/UPGRADING-3.7.md +86 -0
  22. data/bin/cap +2 -3
  23. data/bin/capify +7 -89
  24. data/capistrano.gemspec +29 -43
  25. data/docker-compose.yml +8 -0
  26. data/features/configuration.feature +28 -0
  27. data/features/deploy.feature +92 -0
  28. data/features/deploy_failure.feature +17 -0
  29. data/features/doctor.feature +11 -0
  30. data/features/installation.feature +21 -0
  31. data/features/sshconnect.feature +11 -0
  32. data/features/stage_failure.feature +9 -0
  33. data/features/step_definitions/assertions.rb +162 -0
  34. data/features/step_definitions/cap_commands.rb +21 -0
  35. data/features/step_definitions/setup.rb +91 -0
  36. data/features/subdirectory.feature +9 -0
  37. data/features/support/docker_gateway.rb +53 -0
  38. data/features/support/env.rb +1 -0
  39. data/features/support/remote_command_helpers.rb +29 -0
  40. data/features/support/remote_ssh_helpers.rb +33 -0
  41. data/lib/Capfile +3 -0
  42. data/lib/capistrano/all.rb +17 -0
  43. data/lib/capistrano/application.rb +153 -0
  44. data/lib/capistrano/configuration/empty_filter.rb +9 -0
  45. data/lib/capistrano/configuration/filter.rb +26 -0
  46. data/lib/capistrano/configuration/host_filter.rb +29 -0
  47. data/lib/capistrano/configuration/null_filter.rb +9 -0
  48. data/lib/capistrano/configuration/plugin_installer.rb +51 -0
  49. data/lib/capistrano/configuration/question.rb +76 -0
  50. data/lib/capistrano/configuration/role_filter.rb +29 -0
  51. data/lib/capistrano/configuration/scm_resolver.rb +149 -0
  52. data/lib/capistrano/configuration/server.rb +137 -0
  53. data/lib/capistrano/configuration/servers.rb +56 -96
  54. data/lib/capistrano/configuration/validated_variables.rb +110 -0
  55. data/lib/capistrano/configuration/variables.rb +79 -94
  56. data/lib/capistrano/configuration.rb +178 -33
  57. data/lib/capistrano/console.rb +1 -0
  58. data/lib/capistrano/defaults.rb +36 -0
  59. data/lib/capistrano/deploy.rb +3 -0
  60. data/lib/capistrano/doctor/environment_doctor.rb +19 -0
  61. data/lib/capistrano/doctor/gems_doctor.rb +45 -0
  62. data/lib/capistrano/doctor/output_helpers.rb +79 -0
  63. data/lib/capistrano/doctor/servers_doctor.rb +105 -0
  64. data/lib/capistrano/doctor/variables_doctor.rb +74 -0
  65. data/lib/capistrano/doctor.rb +6 -0
  66. data/lib/capistrano/dotfile.rb +2 -0
  67. data/lib/capistrano/dsl/env.rb +43 -0
  68. data/lib/capistrano/dsl/paths.rb +89 -0
  69. data/lib/capistrano/dsl/stages.rb +31 -0
  70. data/lib/capistrano/dsl/task_enhancements.rb +61 -0
  71. data/lib/capistrano/dsl.rb +95 -0
  72. data/lib/capistrano/framework.rb +2 -0
  73. data/lib/capistrano/i18n.rb +46 -0
  74. data/lib/capistrano/immutable_task.rb +30 -0
  75. data/lib/capistrano/install.rb +1 -0
  76. data/lib/capistrano/plugin.rb +95 -0
  77. data/lib/capistrano/proc_helpers.rb +13 -0
  78. data/lib/capistrano/scm/git.rb +105 -0
  79. data/lib/capistrano/scm/hg.rb +55 -0
  80. data/lib/capistrano/scm/plugin.rb +13 -0
  81. data/lib/capistrano/scm/svn.rb +56 -0
  82. data/lib/capistrano/scm/tasks/git.rake +84 -0
  83. data/lib/capistrano/scm/tasks/hg.rake +53 -0
  84. data/lib/capistrano/scm/tasks/svn.rake +53 -0
  85. data/lib/capistrano/scm.rb +115 -0
  86. data/lib/capistrano/setup.rb +36 -0
  87. data/lib/capistrano/tasks/console.rake +25 -0
  88. data/lib/capistrano/tasks/deploy.rake +280 -0
  89. data/lib/capistrano/tasks/doctor.rake +24 -0
  90. data/lib/capistrano/tasks/framework.rake +67 -0
  91. data/lib/capistrano/tasks/install.rake +41 -0
  92. data/lib/capistrano/templates/Capfile +38 -0
  93. data/lib/capistrano/templates/deploy.rb.erb +39 -0
  94. data/lib/capistrano/templates/stage.rb.erb +61 -0
  95. data/lib/capistrano/upload_task.rb +9 -0
  96. data/lib/capistrano/version.rb +1 -14
  97. data/lib/capistrano/version_validator.rb +32 -0
  98. data/lib/capistrano.rb +0 -3
  99. data/spec/integration/dsl_spec.rb +632 -0
  100. data/spec/integration_spec_helper.rb +5 -0
  101. data/spec/lib/capistrano/application_spec.rb +60 -0
  102. data/spec/lib/capistrano/configuration/empty_filter_spec.rb +17 -0
  103. data/spec/lib/capistrano/configuration/filter_spec.rb +109 -0
  104. data/spec/lib/capistrano/configuration/host_filter_spec.rb +71 -0
  105. data/spec/lib/capistrano/configuration/null_filter_spec.rb +17 -0
  106. data/spec/lib/capistrano/configuration/plugin_installer_spec.rb +98 -0
  107. data/spec/lib/capistrano/configuration/question_spec.rb +92 -0
  108. data/spec/lib/capistrano/configuration/role_filter_spec.rb +80 -0
  109. data/spec/lib/capistrano/configuration/scm_resolver_spec.rb +56 -0
  110. data/spec/lib/capistrano/configuration/server_spec.rb +309 -0
  111. data/spec/lib/capistrano/configuration/servers_spec.rb +331 -0
  112. data/spec/lib/capistrano/configuration_spec.rb +357 -0
  113. data/spec/lib/capistrano/doctor/environment_doctor_spec.rb +44 -0
  114. data/spec/lib/capistrano/doctor/gems_doctor_spec.rb +67 -0
  115. data/spec/lib/capistrano/doctor/output_helpers_spec.rb +47 -0
  116. data/spec/lib/capistrano/doctor/servers_doctor_spec.rb +86 -0
  117. data/spec/lib/capistrano/doctor/variables_doctor_spec.rb +89 -0
  118. data/spec/lib/capistrano/dsl/paths_spec.rb +228 -0
  119. data/spec/lib/capistrano/dsl/task_enhancements_spec.rb +108 -0
  120. data/spec/lib/capistrano/dsl_spec.rb +125 -0
  121. data/spec/lib/capistrano/immutable_task_spec.rb +31 -0
  122. data/spec/lib/capistrano/plugin_spec.rb +84 -0
  123. data/spec/lib/capistrano/scm/git_spec.rb +194 -0
  124. data/spec/lib/capistrano/scm/hg_spec.rb +109 -0
  125. data/spec/lib/capistrano/scm/svn_spec.rb +137 -0
  126. data/spec/lib/capistrano/scm_spec.rb +103 -0
  127. data/spec/lib/capistrano/upload_task_spec.rb +19 -0
  128. data/spec/lib/capistrano/version_validator_spec.rb +118 -0
  129. data/spec/lib/capistrano_spec.rb +7 -0
  130. data/spec/spec_helper.rb +29 -0
  131. data/spec/support/matchers.rb +5 -0
  132. data/spec/support/tasks/database.rake +11 -0
  133. data/spec/support/tasks/fail.rake +8 -0
  134. data/spec/support/tasks/failed.rake +5 -0
  135. data/spec/support/tasks/plugin.rake +6 -0
  136. data/spec/support/tasks/root.rake +11 -0
  137. data/spec/support/test_app.rb +205 -0
  138. metadata +234 -208
  139. data/.rvmrc +0 -1
  140. data/CHANGELOG +0 -954
  141. data/README.mdown +0 -76
  142. data/lib/capistrano/callback.rb +0 -45
  143. data/lib/capistrano/cli/execute.rb +0 -85
  144. data/lib/capistrano/cli/help.rb +0 -125
  145. data/lib/capistrano/cli/help.txt +0 -81
  146. data/lib/capistrano/cli/options.rb +0 -243
  147. data/lib/capistrano/cli/ui.rb +0 -40
  148. data/lib/capistrano/cli.rb +0 -47
  149. data/lib/capistrano/command.rb +0 -286
  150. data/lib/capistrano/configuration/actions/file_transfer.rb +0 -51
  151. data/lib/capistrano/configuration/actions/inspect.rb +0 -46
  152. data/lib/capistrano/configuration/actions/invocation.rb +0 -298
  153. data/lib/capistrano/configuration/callbacks.rb +0 -148
  154. data/lib/capistrano/configuration/connections.rb +0 -230
  155. data/lib/capistrano/configuration/execution.rb +0 -143
  156. data/lib/capistrano/configuration/loading.rb +0 -197
  157. data/lib/capistrano/configuration/namespaces.rb +0 -197
  158. data/lib/capistrano/configuration/roles.rb +0 -73
  159. data/lib/capistrano/errors.rb +0 -19
  160. data/lib/capistrano/ext/string.rb +0 -5
  161. data/lib/capistrano/extensions.rb +0 -57
  162. data/lib/capistrano/logger.rb +0 -59
  163. data/lib/capistrano/processable.rb +0 -53
  164. data/lib/capistrano/recipes/compat.rb +0 -32
  165. data/lib/capistrano/recipes/deploy/assets.rb +0 -57
  166. data/lib/capistrano/recipes/deploy/dependencies.rb +0 -44
  167. data/lib/capistrano/recipes/deploy/local_dependency.rb +0 -54
  168. data/lib/capistrano/recipes/deploy/remote_dependency.rb +0 -111
  169. data/lib/capistrano/recipes/deploy/scm/accurev.rb +0 -169
  170. data/lib/capistrano/recipes/deploy/scm/base.rb +0 -196
  171. data/lib/capistrano/recipes/deploy/scm/bzr.rb +0 -86
  172. data/lib/capistrano/recipes/deploy/scm/cvs.rb +0 -153
  173. data/lib/capistrano/recipes/deploy/scm/darcs.rb +0 -96
  174. data/lib/capistrano/recipes/deploy/scm/git.rb +0 -282
  175. data/lib/capistrano/recipes/deploy/scm/mercurial.rb +0 -137
  176. data/lib/capistrano/recipes/deploy/scm/none.rb +0 -44
  177. data/lib/capistrano/recipes/deploy/scm/perforce.rb +0 -138
  178. data/lib/capistrano/recipes/deploy/scm/subversion.rb +0 -121
  179. data/lib/capistrano/recipes/deploy/scm.rb +0 -19
  180. data/lib/capistrano/recipes/deploy/strategy/base.rb +0 -88
  181. data/lib/capistrano/recipes/deploy/strategy/checkout.rb +0 -20
  182. data/lib/capistrano/recipes/deploy/strategy/copy.rb +0 -224
  183. data/lib/capistrano/recipes/deploy/strategy/export.rb +0 -20
  184. data/lib/capistrano/recipes/deploy/strategy/remote.rb +0 -52
  185. data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +0 -57
  186. data/lib/capistrano/recipes/deploy/strategy.rb +0 -19
  187. data/lib/capistrano/recipes/deploy/templates/maintenance.rhtml +0 -53
  188. data/lib/capistrano/recipes/deploy.rb +0 -568
  189. data/lib/capistrano/recipes/standard.rb +0 -37
  190. data/lib/capistrano/recipes/templates/maintenance.rhtml +0 -53
  191. data/lib/capistrano/role.rb +0 -102
  192. data/lib/capistrano/server_definition.rb +0 -56
  193. data/lib/capistrano/shell.rb +0 -260
  194. data/lib/capistrano/ssh.rb +0 -101
  195. data/lib/capistrano/task_definition.rb +0 -75
  196. data/lib/capistrano/transfer.rb +0 -216
  197. data/rvmrc.sample +0 -1
  198. data/test/cli/execute_test.rb +0 -132
  199. data/test/cli/help_test.rb +0 -165
  200. data/test/cli/options_test.rb +0 -329
  201. data/test/cli/ui_test.rb +0 -28
  202. data/test/cli_test.rb +0 -17
  203. data/test/command_test.rb +0 -289
  204. data/test/configuration/actions/file_transfer_test.rb +0 -61
  205. data/test/configuration/actions/inspect_test.rb +0 -65
  206. data/test/configuration/actions/invocation_test.rb +0 -247
  207. data/test/configuration/callbacks_test.rb +0 -220
  208. data/test/configuration/connections_test.rb +0 -420
  209. data/test/configuration/execution_test.rb +0 -175
  210. data/test/configuration/loading_test.rb +0 -132
  211. data/test/configuration/namespace_dsl_test.rb +0 -311
  212. data/test/configuration/roles_test.rb +0 -144
  213. data/test/configuration/servers_test.rb +0 -183
  214. data/test/configuration/variables_test.rb +0 -190
  215. data/test/configuration_test.rb +0 -88
  216. data/test/deploy/local_dependency_test.rb +0 -76
  217. data/test/deploy/remote_dependency_test.rb +0 -135
  218. data/test/deploy/scm/accurev_test.rb +0 -23
  219. data/test/deploy/scm/base_test.rb +0 -55
  220. data/test/deploy/scm/bzr_test.rb +0 -51
  221. data/test/deploy/scm/darcs_test.rb +0 -37
  222. data/test/deploy/scm/git_test.rb +0 -184
  223. data/test/deploy/scm/mercurial_test.rb +0 -134
  224. data/test/deploy/scm/none_test.rb +0 -35
  225. data/test/deploy/scm/subversion_test.rb +0 -32
  226. data/test/deploy/strategy/copy_test.rb +0 -321
  227. data/test/extensions_test.rb +0 -69
  228. data/test/fixtures/cli_integration.rb +0 -5
  229. data/test/fixtures/config.rb +0 -5
  230. data/test/fixtures/custom.rb +0 -3
  231. data/test/logger_test.rb +0 -123
  232. data/test/recipes_test.rb +0 -25
  233. data/test/role_test.rb +0 -11
  234. data/test/server_definition_test.rb +0 -121
  235. data/test/shell_test.rb +0 -90
  236. data/test/ssh_test.rb +0 -113
  237. data/test/task_definition_test.rb +0 -116
  238. data/test/transfer_test.rb +0 -160
  239. data/test/utils.rb +0 -37
@@ -1,329 +0,0 @@
1
- require "utils"
2
- require 'capistrano/cli/options'
3
-
4
- class CLIOptionsTest < Test::Unit::TestCase
5
- class ExitException < Exception; end
6
-
7
- class MockCLI
8
- def initialize
9
- @args = []
10
- end
11
-
12
- attr_reader :args
13
-
14
- include Capistrano::CLI::Options
15
- end
16
-
17
- def setup
18
- @cli = MockCLI.new
19
- end
20
-
21
- def test_parse_options_should_require_non_empty_args_list
22
- @cli.stubs(:warn)
23
- @cli.expects(:exit).raises(ExitException)
24
- assert_raises(ExitException) { @cli.parse_options! }
25
- end
26
-
27
- def test_parse_options_with_d_should_set_debug_option
28
- @cli.args << "-d"
29
- @cli.parse_options!
30
- assert @cli.options[:debug]
31
- end
32
-
33
- def test_parse_options_with_n_should_set_dry_run_option
34
- @cli.args << "-n"
35
- @cli.parse_options!
36
- assert @cli.options[:dry_run]
37
- end
38
-
39
- def test_parse_options_with_dry_run_should_set_dry_run_option
40
- @cli.args << "--dry-run"
41
- @cli.parse_options!
42
- assert @cli.options[:dry_run]
43
- end
44
-
45
- def test_parse_options_with_e_should_set_explain_option
46
- @cli.args << "-e" << "sample"
47
- @cli.parse_options!
48
- assert_equal "sample", @cli.options[:explain]
49
- end
50
-
51
- def test_parse_options_with_f_should_add_recipe_file
52
- @cli.args << "-f" << "deploy"
53
- @cli.parse_options!
54
- assert_equal %w(deploy), @cli.options[:recipes]
55
- end
56
-
57
- def test_parse_options_with_multiple_f_should_add_each_as_recipe_file
58
- @cli.args << "-f" << "deploy" << "-f" << "monitor"
59
- @cli.parse_options!
60
- assert_equal %w(deploy monitor), @cli.options[:recipes]
61
- end
62
-
63
- def test_parse_options_with_H_should_show_verbose_help_and_exit
64
- @cli.expects(:exit).raises(ExitException)
65
- @cli.expects(:long_help)
66
- @cli.args << "-H"
67
- assert_raises(ExitException) { @cli.parse_options! }
68
- end
69
-
70
- def test_parse_options_with_h_should_show_options_and_exit
71
- @cli.expects(:puts).with(@cli.option_parser)
72
- @cli.expects(:exit).raises(ExitException)
73
- @cli.args << "-h"
74
- assert_raises(ExitException) { @cli.parse_options! }
75
- end
76
-
77
- def test_parse_options_with_p_should_prompt_for_password
78
- MockCLI.expects(:password_prompt).returns(:the_password)
79
- @cli.args << "-p"
80
- @cli.parse_options!
81
- assert_equal :the_password, @cli.options[:password]
82
- end
83
-
84
- def test_parse_options_without_p_should_set_proc_for_password
85
- @cli.args << "-e" << "sample"
86
- @cli.parse_options!
87
- assert_instance_of Proc, @cli.options[:password]
88
- end
89
-
90
- def test_parse_options_with_q_should_set_verbose_to_0
91
- @cli.args << "-q"
92
- @cli.parse_options!
93
- assert_equal 0, @cli.options[:verbose]
94
- end
95
-
96
- def test_parse_options_with_r_should_set_preserve_roles_option
97
- @cli.args << "-r"
98
- @cli.parse_options!
99
- assert @cli.options[:preserve_roles]
100
- end
101
-
102
- def test_parse_options_with_preserve_roles_should_set_preserve_roles_option
103
- @cli.args << "--preserve-roles"
104
- @cli.parse_options!
105
- assert @cli.options[:preserve_roles]
106
- end
107
-
108
- def test_parse_options_with_S_should_set_pre_vars
109
- @cli.args << "-S" << "foo=bar"
110
- @cli.parse_options!
111
- assert_equal "bar", @cli.options[:pre_vars][:foo]
112
- end
113
-
114
- def test_S_should_coerce_digits_to_integers
115
- @cli.args << "-S" << "foo=1234"
116
- @cli.parse_options!
117
- assert_equal 1234, @cli.options[:pre_vars][:foo]
118
- end
119
-
120
- def test_S_should_treat_quoted_integers_as_string
121
- @cli.args << "-S" << "foo=\"1234\""
122
- @cli.parse_options!
123
- assert_equal "1234", @cli.options[:pre_vars][:foo]
124
- end
125
-
126
- def test_S_should_treat_digits_with_dot_as_floating_point
127
- @cli.args << "-S" << "foo=3.1415"
128
- @cli.parse_options!
129
- assert_equal 3.1415, @cli.options[:pre_vars][:foo]
130
- end
131
-
132
- def test_S_should_treat_true_as_boolean_true
133
- @cli.args << "-S" << "foo=true"
134
- @cli.parse_options!
135
- assert_equal true, @cli.options[:pre_vars][:foo]
136
- end
137
-
138
- def test_S_should_treat_false_as_boolean_false
139
- @cli.args << "-S" << "foo=false"
140
- @cli.parse_options!
141
- assert_equal false, @cli.options[:pre_vars][:foo]
142
- end
143
-
144
- def test_S_should_treat_nil_as_nil
145
- @cli.args << "-S" << "foo=nil"
146
- @cli.parse_options!
147
- assert_equal nil, @cli.options[:pre_vars][:foo]
148
- end
149
-
150
- def test_parse_options_with_s_should_set_vars
151
- @cli.args << "-s" << "foo=bar"
152
- @cli.parse_options!
153
- assert_equal "bar", @cli.options[:vars][:foo]
154
- end
155
-
156
- def test_s_should_coerce_digits_to_integers
157
- @cli.args << "-s" << "foo=1234"
158
- @cli.parse_options!
159
- assert_equal 1234, @cli.options[:vars][:foo]
160
- end
161
-
162
- def test_s_should_treat_quoted_integers_as_string
163
- @cli.args << "-s" << "foo=\"1234\""
164
- @cli.parse_options!
165
- assert_equal "1234", @cli.options[:vars][:foo]
166
- end
167
-
168
- def test_s_should_treat_digits_with_dot_as_floating_point
169
- @cli.args << "-s" << "foo=3.1415"
170
- @cli.parse_options!
171
- assert_equal 3.1415, @cli.options[:vars][:foo]
172
- end
173
-
174
- def test_s_should_treat_true_as_boolean_true
175
- @cli.args << "-s" << "foo=true"
176
- @cli.parse_options!
177
- assert_equal true, @cli.options[:vars][:foo]
178
- end
179
-
180
- def test_s_should_treat_false_as_boolean_false
181
- @cli.args << "-s" << "foo=false"
182
- @cli.parse_options!
183
- assert_equal false, @cli.options[:vars][:foo]
184
- end
185
-
186
- def test_s_should_treat_nil_as_nil
187
- @cli.args << "-s" << "foo=nil"
188
- @cli.parse_options!
189
- assert_equal nil, @cli.options[:vars][:foo]
190
- end
191
-
192
- def test_parse_options_with_T_should_set_tasks_option_and_set_verbose_off
193
- @cli.args << "-T"
194
- @cli.parse_options!
195
- assert @cli.options[:tasks]
196
- assert_equal 0, @cli.options[:verbose]
197
- end
198
-
199
- def test_parse_options_with_V_should_show_version_and_exit
200
- @cli.args << "-V"
201
- @cli.expects(:puts).with { |s| s.include?(Capistrano::Version.to_s) }
202
- @cli.expects(:exit).raises(ExitException)
203
- assert_raises(ExitException) { @cli.parse_options! }
204
- end
205
-
206
- def test_parse_options_with_v_should_set_verbose_to_1
207
- @cli.args << "-v"
208
- @cli.parse_options!
209
- assert_equal 1, @cli.options[:verbose]
210
- end
211
-
212
- def test_parse_options_with_multiple_v_should_set_verbose_accordingly
213
- @cli.args << "-vvvvvvv"
214
- @cli.parse_options!
215
- assert_equal 7, @cli.options[:verbose]
216
- end
217
-
218
- def test_parse_options_without_X_should_set_sysconf
219
- @cli.args << "-v"
220
- @cli.parse_options!
221
- assert @cli.options.key?(:sysconf)
222
- end
223
-
224
- def test_parse_options_with_X_should_unset_sysconf
225
- @cli.args << "-X"
226
- @cli.parse_options!
227
- assert !@cli.options.key?(:sysconf)
228
- end
229
-
230
- def test_parse_options_without_x_should_set_dotfile
231
- @cli.args << "-v"
232
- @cli.parse_options!
233
- assert @cli.options.key?(:dotfile)
234
- end
235
-
236
- def test_parse_options_with_x_should_unset_dotfile
237
- @cli.args << "-x"
238
- @cli.parse_options!
239
- assert !@cli.options.key?(:dotfile)
240
- end
241
-
242
- def test_parse_options_without_q_or_v_should_set_verbose_to_3
243
- @cli.args << "-x"
244
- @cli.parse_options!
245
- assert_equal 3, @cli.options[:verbose]
246
- end
247
-
248
- def test_should_search_for_default_recipes_if_f_not_given
249
- @cli.expects(:look_for_default_recipe_file!)
250
- @cli.args << "-v"
251
- @cli.parse_options!
252
- end
253
-
254
- def test_should_not_search_for_default_recipes_if_f_given
255
- @cli.expects(:look_for_default_recipe_file!).never
256
- @cli.args << "-f" << "hello"
257
- @cli.parse_options!
258
- end
259
-
260
- def test_F_should_search_for_default_recipes_even_if_f_is_given
261
- @cli.expects(:look_for_default_recipe_file!)
262
- @cli.args << "-Ff" << "hello"
263
- @cli.parse_options!
264
- end
265
-
266
- def test_should_extract_env_vars_from_command_line
267
- assert_nil ENV["HELLO"]
268
- assert_nil ENV["ANOTHER"]
269
-
270
- @cli.args << "HELLO=world" << "hello" << "ANOTHER=value"
271
- @cli.parse_options!
272
-
273
- assert_equal "world", ENV["HELLO"]
274
- assert_equal "value", ENV["ANOTHER"]
275
- ensure
276
- ENV.delete("HELLO")
277
- ENV.delete("ANOTHER")
278
- end
279
-
280
- def test_remaining_args_should_be_added_to_actions_list
281
- @cli.args << "-v" << "HELLO=world" << "-f" << "foo" << "something" << "else"
282
- @cli.parse_options!
283
- assert_equal %w(something else), @cli.args
284
- ensure
285
- ENV.delete("HELLO")
286
- end
287
-
288
- def test_search_for_default_recipe_file_should_look_for_Capfile
289
- File.stubs(:file?).returns(false)
290
- File.expects(:file?).with("Capfile").returns(true)
291
- @cli.args << "-v"
292
- @cli.parse_options!
293
- assert_equal %w(Capfile), @cli.options[:recipes]
294
- end
295
-
296
- def test_search_for_default_recipe_file_should_look_for_capfile
297
- File.stubs(:file?).returns(false)
298
- File.expects(:file?).with("capfile").returns(true)
299
- @cli.args << "-v"
300
- @cli.parse_options!
301
- assert_equal %w(capfile), @cli.options[:recipes]
302
- end
303
-
304
- def test_search_for_default_recipe_should_hike_up_the_directory_tree_until_it_finds_default_recipe
305
- File.stubs(:file?).returns(false)
306
- File.expects(:file?).with("capfile").times(2).returns(false,true)
307
- Dir.expects(:pwd).times(3).returns(*%w(/bar/baz /bar/baz /bar))
308
- Dir.expects(:chdir).with("..")
309
- @cli.args << "-v"
310
- @cli.parse_options!
311
- assert_equal %w(capfile), @cli.options[:recipes]
312
- end
313
-
314
- def test_search_for_default_recipe_should_halt_at_root_directory
315
- File.stubs(:file?).returns(false)
316
- Dir.expects(:pwd).times(7).returns(*%w(/bar/baz /bar/baz /bar /bar / / /))
317
- Dir.expects(:chdir).with("..").times(3)
318
- Dir.expects(:chdir).with("/bar/baz")
319
- @cli.args << "-v"
320
- @cli.parse_options!
321
- assert @cli.options[:recipes].empty?
322
- end
323
-
324
- def test_parse_should_instantiate_new_cli_and_call_parse_options
325
- cli = mock("cli", :parse_options! => nil)
326
- MockCLI.expects(:new).with(%w(a b c)).returns(cli)
327
- assert_equal cli, MockCLI.parse(%w(a b c))
328
- end
329
- end
data/test/cli/ui_test.rb DELETED
@@ -1,28 +0,0 @@
1
- require "utils"
2
- require 'capistrano/cli/ui'
3
-
4
- class CLIUITest < Test::Unit::TestCase
5
- class MockCLI
6
- include Capistrano::CLI::UI
7
- end
8
-
9
- def test_ui_should_return_highline_instance
10
- assert_instance_of HighLine, MockCLI.ui
11
- end
12
-
13
- def test_password_prompt_should_have_default_prompt_and_set_echo_false
14
- q = mock("question")
15
- q.expects(:echo=).with(false)
16
- ui = mock("ui")
17
- ui.expects(:ask).with("Password: ").yields(q).returns("sayuncle")
18
- MockCLI.expects(:ui).returns(ui)
19
- assert_equal "sayuncle", MockCLI.password_prompt
20
- end
21
-
22
- def test_password_prompt_with_custom_prompt_should_use_custom_prompt
23
- ui = mock("ui")
24
- ui.expects(:ask).with("Give the passphrase: ").returns("sayuncle")
25
- MockCLI.expects(:ui).returns(ui)
26
- assert_equal "sayuncle", MockCLI.password_prompt("Give the passphrase: ")
27
- end
28
- end
data/test/cli_test.rb DELETED
@@ -1,17 +0,0 @@
1
- require "utils"
2
- require 'capistrano/cli'
3
-
4
- class CLI_Test < Test::Unit::TestCase
5
- def test_options_ui_and_help_modules_should_integrate_successfully_with_configuration
6
- cli = Capistrano::CLI.parse(%w(-T -x -X))
7
- cli.expects(:puts).at_least_once
8
- cli.execute!
9
- end
10
-
11
- def test_options_and_execute_modules_should_integrate_successfully_with_configuration
12
- path = "#{File.dirname(__FILE__)}/fixtures/cli_integration.rb"
13
- cli = Capistrano::CLI.parse(%W(-x -X -q -f #{path} testing))
14
- config = cli.execute!
15
- assert config[:testing_occurred]
16
- end
17
- end
data/test/command_test.rb DELETED
@@ -1,289 +0,0 @@
1
- require "utils"
2
- require 'capistrano/command'
3
- require 'capistrano/configuration'
4
-
5
- class CommandTest < Test::Unit::TestCase
6
- def test_command_should_open_channels_on_all_sessions
7
- s1, s2, s3 = mock_session, mock_session, mock_session
8
- assert_equal "ls", Capistrano::Command.new("ls", [s1, s2, s3]).tree.fallback.command
9
- end
10
-
11
- def test_command_with_newlines_should_be_properly_escaped
12
- cmd = Capistrano::Command.new("ls\necho", [mock_session])
13
- assert_equal "ls\\\necho", cmd.tree.fallback.command
14
- end
15
-
16
- def test_command_with_windows_newlines_should_be_properly_escaped
17
- cmd = Capistrano::Command.new("ls\r\necho", [mock_session])
18
- assert_equal "ls\\\necho", cmd.tree.fallback.command
19
- end
20
-
21
- def test_command_with_pty_should_request_pty_and_register_success_callback
22
- session = setup_for_extracting_channel_action(:request_pty, true) do |ch|
23
- ch.expects(:exec).with(%(sh -c 'ls'))
24
- end
25
- Capistrano::Command.new("ls", [session], :pty => true)
26
- end
27
-
28
- def test_command_with_env_key_should_have_environment_constructed_and_prepended
29
- session = setup_for_extracting_channel_action do |ch|
30
- ch.expects(:request_pty).never
31
- ch.expects(:exec).with(%(env FOO=bar sh -c 'ls'))
32
- end
33
- Capistrano::Command.new("ls", [session], :env => { "FOO" => "bar" })
34
- end
35
-
36
- def test_env_with_symbolic_key_should_be_accepted_as_a_string
37
- session = setup_for_extracting_channel_action do |ch|
38
- ch.expects(:exec).with(%(env FOO=bar sh -c 'ls'))
39
- end
40
- Capistrano::Command.new("ls", [session], :env => { :FOO => "bar" })
41
- end
42
-
43
- def test_env_as_string_should_be_substituted_in_directly
44
- session = setup_for_extracting_channel_action do |ch|
45
- ch.expects(:exec).with(%(env HOWDY=there sh -c 'ls'))
46
- end
47
- Capistrano::Command.new("ls", [session], :env => "HOWDY=there")
48
- end
49
-
50
- def test_env_with_symbolic_value_should_be_accepted_as_string
51
- session = setup_for_extracting_channel_action do |ch|
52
- ch.expects(:exec).with(%(env FOO=bar sh -c 'ls'))
53
- end
54
- Capistrano::Command.new("ls", [session], :env => { "FOO" => :bar })
55
- end
56
-
57
- def test_env_value_should_be_escaped
58
- session = setup_for_extracting_channel_action do |ch|
59
- ch.expects(:exec).with(%(env FOO=(\\ \\\"bar\\\"\\ ) sh -c 'ls'))
60
- end
61
- Capistrano::Command.new("ls", [session], :env => { "FOO" => '( "bar" )' })
62
- end
63
-
64
- def test_env_with_multiple_keys_should_chain_the_entries_together
65
- session = setup_for_extracting_channel_action do |ch|
66
- ch.expects(:exec).with do |command|
67
- command =~ /^env / &&
68
- command =~ /\ba=b\b/ &&
69
- command =~ /\bc=d\b/ &&
70
- command =~ /\be=f\b/ &&
71
- command =~ / sh -c 'ls'$/
72
- end
73
- end
74
- Capistrano::Command.new("ls", [session], :env => { :a => :b, :c => :d, :e => :f })
75
- end
76
-
77
- def test_open_channel_should_set_host_key_on_channel
78
- channel = nil
79
- session = setup_for_extracting_channel_action { |ch| channel = ch }
80
- Capistrano::Command.new("ls", [session])
81
- assert_equal "capistrano", channel[:host]
82
- end
83
-
84
- def test_open_channel_should_set_options_key_on_channel
85
- channel = nil
86
- session = setup_for_extracting_channel_action { |ch| channel = ch }
87
- Capistrano::Command.new("ls", [session], :data => "here we go")
88
- assert_equal({ :data => 'here we go' }, channel[:options])
89
- end
90
-
91
- def test_successful_channel_should_send_command
92
- session = setup_for_extracting_channel_action do |ch|
93
- ch.expects(:exec).with(%(sh -c 'ls'))
94
- end
95
- Capistrano::Command.new("ls", [session])
96
- end
97
-
98
- def test_successful_channel_with_shell_option_should_send_command_via_specified_shell
99
- session = setup_for_extracting_channel_action do |ch|
100
- ch.expects(:exec).with(%(/bin/bash -c 'ls'))
101
- end
102
- Capistrano::Command.new("ls", [session], :shell => "/bin/bash")
103
- end
104
-
105
- def test_successful_channel_with_shell_false_should_send_command_without_shell
106
- session = setup_for_extracting_channel_action do |ch|
107
- ch.expects(:exec).with(%(echo `hostname`))
108
- end
109
- Capistrano::Command.new("echo `hostname`", [session], :shell => false)
110
- end
111
-
112
- def test_successful_channel_should_send_data_if_data_key_is_present
113
- session = setup_for_extracting_channel_action do |ch|
114
- ch.expects(:exec).with(%(sh -c 'ls'))
115
- ch.expects(:send_data).with("here we go")
116
- end
117
- Capistrano::Command.new("ls", [session], :data => "here we go")
118
- end
119
-
120
- def test_unsuccessful_pty_request_should_close_channel
121
- session = setup_for_extracting_channel_action(:request_pty, false) do |ch|
122
- ch.expects(:close)
123
- end
124
- Capistrano::Command.new("ls", [session], :pty => true)
125
- end
126
-
127
- def test_on_data_should_invoke_callback_as_stdout
128
- session = setup_for_extracting_channel_action(:on_data, "hello")
129
- called = false
130
- Capistrano::Command.new("ls", [session]) do |ch, stream, data|
131
- called = true
132
- assert_equal :out, stream
133
- assert_equal "hello", data
134
- end
135
- assert called
136
- end
137
-
138
- def test_on_extended_data_should_invoke_callback_as_stderr
139
- session = setup_for_extracting_channel_action(:on_extended_data, 2, "hello")
140
- called = false
141
- Capistrano::Command.new("ls", [session]) do |ch, stream, data|
142
- called = true
143
- assert_equal :err, stream
144
- assert_equal "hello", data
145
- end
146
- assert called
147
- end
148
-
149
- def test_on_request_should_record_exit_status
150
- data = mock(:read_long => 5)
151
- channel = nil
152
- session = setup_for_extracting_channel_action([:on_request, "exit-status"], data) { |ch| channel = ch }
153
- Capistrano::Command.new("ls", [session])
154
- assert_equal 5, channel[:status]
155
- end
156
-
157
- def test_on_close_should_set_channel_closed
158
- channel = nil
159
- session = setup_for_extracting_channel_action(:on_close) { |ch| channel = ch }
160
- Capistrano::Command.new("ls", [session])
161
- assert channel[:closed]
162
- end
163
-
164
- def test_stop_should_close_all_open_channels
165
- sessions = [mock_session(new_channel(false)),
166
- mock_session(new_channel(true)),
167
- mock_session(new_channel(false))]
168
-
169
- cmd = Capistrano::Command.new("ls", sessions)
170
- cmd.stop!
171
- end
172
-
173
- def test_process_should_return_cleanly_if_all_channels_have_zero_exit_status
174
- sessions = [mock_session(new_channel(true, 0)),
175
- mock_session(new_channel(true, 0)),
176
- mock_session(new_channel(true, 0))]
177
- cmd = Capistrano::Command.new("ls", sessions)
178
- assert_nothing_raised { cmd.process! }
179
- end
180
-
181
- def test_process_should_raise_error_if_any_channel_has_non_zero_exit_status
182
- sessions = [mock_session(new_channel(true, 0)),
183
- mock_session(new_channel(true, 0)),
184
- mock_session(new_channel(true, 1))]
185
- cmd = Capistrano::Command.new("ls", sessions)
186
- assert_raises(Capistrano::CommandError) { cmd.process! }
187
- end
188
-
189
- def test_command_error_should_include_accessor_with_host_array
190
- sessions = [mock_session(new_channel(true, 0)),
191
- mock_session(new_channel(true, 0)),
192
- mock_session(new_channel(true, 1))]
193
- cmd = Capistrano::Command.new("ls", sessions)
194
-
195
- begin
196
- cmd.process!
197
- flunk "expected an exception to be raised"
198
- rescue Capistrano::CommandError => e
199
- assert e.respond_to?(:hosts)
200
- assert_equal %w(capistrano), e.hosts.map { |h| h.to_s }
201
- end
202
- end
203
-
204
- def test_process_should_loop_until_all_channels_are_closed
205
- new_channel = Proc.new do |times|
206
- ch = mock("channel")
207
- returns = [false] * (times-1)
208
- ch.stubs(:[]).with(:closed).returns(*(returns + [true]))
209
- ch.expects(:[]).with(:status).returns(0)
210
- ch
211
- end
212
-
213
- sessions = [mock_session(new_channel[5]),
214
- mock_session(new_channel[10]),
215
- mock_session(new_channel[7])]
216
- cmd = Capistrano::Command.new("ls", sessions)
217
- assert_nothing_raised do
218
- cmd.process!
219
- end
220
- end
221
-
222
- def test_process_should_instantiate_command_and_process!
223
- cmd = mock("command", :process! => nil)
224
- Capistrano::Command.expects(:new).with("ls -l", %w(a b c), {:foo => "bar"}).returns(cmd)
225
- Capistrano::Command.process("ls -l", %w(a b c), :foo => "bar")
226
- end
227
-
228
- def test_process_with_host_placeholder_should_substitute_placeholder_with_each_host
229
- session = setup_for_extracting_channel_action do |ch|
230
- ch.expects(:exec).with(%(sh -c 'echo capistrano'))
231
- end
232
- Capistrano::Command.new("echo $CAPISTRANO:HOST$", [session])
233
- end
234
-
235
- def test_process_with_unknown_placeholder_should_not_replace_placeholder
236
- session = setup_for_extracting_channel_action do |ch|
237
- ch.expects(:exec).with(%(sh -c 'echo $CAPISTRANO:OTHER$'))
238
- end
239
- Capistrano::Command.new("echo $CAPISTRANO:OTHER$", [session])
240
- end
241
-
242
- private
243
-
244
- def mock_session(channel=nil)
245
- stub('session',
246
- :open_channel => channel,
247
- :preprocess => true,
248
- :postprocess => true,
249
- :listeners => {},
250
- :xserver => server("capistrano"))
251
- end
252
-
253
- class MockChannel < Hash
254
- def close
255
- end
256
- end
257
-
258
- def new_channel(closed, status=nil)
259
- ch = MockChannel.new
260
- ch.update({ :closed => closed, :host => "capistrano", :server => server("capistrano") })
261
- ch[:status] = status if status
262
- ch.expects(:close) unless closed
263
- ch
264
- end
265
-
266
- def setup_for_extracting_channel_action(action=nil, *args)
267
- s = server("capistrano")
268
- session = mock("session", :xserver => s)
269
-
270
- channel = {}
271
- session.expects(:open_channel).yields(channel)
272
-
273
- channel.stubs(:on_data)
274
- channel.stubs(:on_extended_data)
275
- channel.stubs(:on_request)
276
- channel.stubs(:on_close)
277
- channel.stubs(:exec)
278
- channel.stubs(:send_data)
279
-
280
- if action
281
- action = Array(action)
282
- channel.expects(action.first).with(*action[1..-1]).yields(channel, *args)
283
- end
284
-
285
- yield channel if block_given?
286
-
287
- session
288
- end
289
- end