startapp 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/COPYRIGHT +1 -0
  3. data/LICENSE +11 -0
  4. data/README.md +95 -0
  5. data/Rakefile +6 -0
  6. data/autocomplete/rhc_bash +1672 -0
  7. data/bin/app +37 -0
  8. data/conf/express.conf +8 -0
  9. data/features/assets/deploy.tar.gz +0 -0
  10. data/features/core_feature.rb +191 -0
  11. data/features/deployments_feature.rb +129 -0
  12. data/features/domains_feature.rb +58 -0
  13. data/features/keys_feature.rb +37 -0
  14. data/features/members_feature.rb +166 -0
  15. data/lib/rhc/auth/basic.rb +64 -0
  16. data/lib/rhc/auth/token.rb +102 -0
  17. data/lib/rhc/auth/token_store.rb +53 -0
  18. data/lib/rhc/auth.rb +5 -0
  19. data/lib/rhc/autocomplete.rb +66 -0
  20. data/lib/rhc/autocomplete_templates/bash.erb +39 -0
  21. data/lib/rhc/cartridge_helpers.rb +118 -0
  22. data/lib/rhc/cli.rb +40 -0
  23. data/lib/rhc/command_runner.rb +185 -0
  24. data/lib/rhc/commands/account.rb +25 -0
  25. data/lib/rhc/commands/alias.rb +124 -0
  26. data/lib/rhc/commands/app.rb +726 -0
  27. data/lib/rhc/commands/apps.rb +20 -0
  28. data/lib/rhc/commands/authorization.rb +115 -0
  29. data/lib/rhc/commands/base.rb +174 -0
  30. data/lib/rhc/commands/cartridge.rb +329 -0
  31. data/lib/rhc/commands/clone.rb +66 -0
  32. data/lib/rhc/commands/configure.rb +20 -0
  33. data/lib/rhc/commands/create.rb +100 -0
  34. data/lib/rhc/commands/delete.rb +19 -0
  35. data/lib/rhc/commands/deploy.rb +32 -0
  36. data/lib/rhc/commands/deployment.rb +82 -0
  37. data/lib/rhc/commands/domain.rb +172 -0
  38. data/lib/rhc/commands/env.rb +142 -0
  39. data/lib/rhc/commands/force_stop.rb +17 -0
  40. data/lib/rhc/commands/git_clone.rb +34 -0
  41. data/lib/rhc/commands/logout.rb +51 -0
  42. data/lib/rhc/commands/logs.rb +21 -0
  43. data/lib/rhc/commands/member.rb +148 -0
  44. data/lib/rhc/commands/port_forward.rb +197 -0
  45. data/lib/rhc/commands/reload.rb +17 -0
  46. data/lib/rhc/commands/restart.rb +17 -0
  47. data/lib/rhc/commands/scp.rb +54 -0
  48. data/lib/rhc/commands/server.rb +40 -0
  49. data/lib/rhc/commands/setup.rb +60 -0
  50. data/lib/rhc/commands/show.rb +43 -0
  51. data/lib/rhc/commands/snapshot.rb +137 -0
  52. data/lib/rhc/commands/ssh.rb +51 -0
  53. data/lib/rhc/commands/sshkey.rb +97 -0
  54. data/lib/rhc/commands/start.rb +17 -0
  55. data/lib/rhc/commands/stop.rb +17 -0
  56. data/lib/rhc/commands/tail.rb +47 -0
  57. data/lib/rhc/commands/threaddump.rb +14 -0
  58. data/lib/rhc/commands/tidy.rb +17 -0
  59. data/lib/rhc/commands.rb +396 -0
  60. data/lib/rhc/config.rb +321 -0
  61. data/lib/rhc/context_helper.rb +121 -0
  62. data/lib/rhc/core_ext.rb +202 -0
  63. data/lib/rhc/coverage_helper.rb +33 -0
  64. data/lib/rhc/deployment_helpers.rb +111 -0
  65. data/lib/rhc/exceptions.rb +256 -0
  66. data/lib/rhc/git_helpers.rb +106 -0
  67. data/lib/rhc/help_formatter.rb +55 -0
  68. data/lib/rhc/helpers.rb +481 -0
  69. data/lib/rhc/highline_extensions.rb +479 -0
  70. data/lib/rhc/json.rb +51 -0
  71. data/lib/rhc/output_helpers.rb +260 -0
  72. data/lib/rhc/rest/activation.rb +11 -0
  73. data/lib/rhc/rest/alias.rb +42 -0
  74. data/lib/rhc/rest/api.rb +87 -0
  75. data/lib/rhc/rest/application.rb +348 -0
  76. data/lib/rhc/rest/attributes.rb +36 -0
  77. data/lib/rhc/rest/authorization.rb +8 -0
  78. data/lib/rhc/rest/base.rb +79 -0
  79. data/lib/rhc/rest/cartridge.rb +162 -0
  80. data/lib/rhc/rest/client.rb +650 -0
  81. data/lib/rhc/rest/deployment.rb +18 -0
  82. data/lib/rhc/rest/domain.rb +98 -0
  83. data/lib/rhc/rest/environment_variable.rb +15 -0
  84. data/lib/rhc/rest/gear_group.rb +16 -0
  85. data/lib/rhc/rest/httpclient.rb +145 -0
  86. data/lib/rhc/rest/key.rb +44 -0
  87. data/lib/rhc/rest/membership.rb +105 -0
  88. data/lib/rhc/rest/mock.rb +1042 -0
  89. data/lib/rhc/rest/user.rb +32 -0
  90. data/lib/rhc/rest.rb +148 -0
  91. data/lib/rhc/scp_helpers.rb +27 -0
  92. data/lib/rhc/ssh_helpers.rb +380 -0
  93. data/lib/rhc/tar_gz.rb +51 -0
  94. data/lib/rhc/usage_templates/command_help.erb +51 -0
  95. data/lib/rhc/usage_templates/command_syntax_help.erb +11 -0
  96. data/lib/rhc/usage_templates/help.erb +61 -0
  97. data/lib/rhc/usage_templates/missing_help.erb +1 -0
  98. data/lib/rhc/usage_templates/options_help.erb +12 -0
  99. data/lib/rhc/vendor/okjson.rb +600 -0
  100. data/lib/rhc/vendor/parseconfig.rb +178 -0
  101. data/lib/rhc/vendor/sshkey.rb +253 -0
  102. data/lib/rhc/vendor/zliby.rb +628 -0
  103. data/lib/rhc/version.rb +5 -0
  104. data/lib/rhc/wizard.rb +637 -0
  105. data/lib/rhc.rb +34 -0
  106. data/spec/coverage_helper.rb +82 -0
  107. data/spec/direct_execution_helper.rb +339 -0
  108. data/spec/keys/example.pem +23 -0
  109. data/spec/keys/example_private.pem +27 -0
  110. data/spec/keys/server.pem +19 -0
  111. data/spec/rest_spec_helper.rb +31 -0
  112. data/spec/rhc/assets/cert.crt +22 -0
  113. data/spec/rhc/assets/cert_key_rsa +27 -0
  114. data/spec/rhc/assets/empty.txt +0 -0
  115. data/spec/rhc/assets/env_vars.txt +7 -0
  116. data/spec/rhc/assets/env_vars_2.txt +1 -0
  117. data/spec/rhc/assets/foo.txt +1 -0
  118. data/spec/rhc/assets/targz_corrupted.tar.gz +1 -0
  119. data/spec/rhc/assets/targz_sample.tar.gz +0 -0
  120. data/spec/rhc/auth_spec.rb +442 -0
  121. data/spec/rhc/cli_spec.rb +186 -0
  122. data/spec/rhc/command_spec.rb +435 -0
  123. data/spec/rhc/commands/account_spec.rb +42 -0
  124. data/spec/rhc/commands/alias_spec.rb +333 -0
  125. data/spec/rhc/commands/app_spec.rb +777 -0
  126. data/spec/rhc/commands/apps_spec.rb +39 -0
  127. data/spec/rhc/commands/authorization_spec.rb +157 -0
  128. data/spec/rhc/commands/cartridge_spec.rb +665 -0
  129. data/spec/rhc/commands/clone_spec.rb +41 -0
  130. data/spec/rhc/commands/deployment_spec.rb +327 -0
  131. data/spec/rhc/commands/domain_spec.rb +401 -0
  132. data/spec/rhc/commands/env_spec.rb +493 -0
  133. data/spec/rhc/commands/git_clone_spec.rb +102 -0
  134. data/spec/rhc/commands/logout_spec.rb +86 -0
  135. data/spec/rhc/commands/member_spec.rb +247 -0
  136. data/spec/rhc/commands/port_forward_spec.rb +217 -0
  137. data/spec/rhc/commands/scp_spec.rb +77 -0
  138. data/spec/rhc/commands/server_spec.rb +69 -0
  139. data/spec/rhc/commands/setup_spec.rb +118 -0
  140. data/spec/rhc/commands/snapshot_spec.rb +179 -0
  141. data/spec/rhc/commands/ssh_spec.rb +163 -0
  142. data/spec/rhc/commands/sshkey_spec.rb +188 -0
  143. data/spec/rhc/commands/tail_spec.rb +81 -0
  144. data/spec/rhc/commands/threaddump_spec.rb +84 -0
  145. data/spec/rhc/config_spec.rb +407 -0
  146. data/spec/rhc/helpers_spec.rb +531 -0
  147. data/spec/rhc/highline_extensions_spec.rb +314 -0
  148. data/spec/rhc/json_spec.rb +30 -0
  149. data/spec/rhc/rest_application_spec.rb +258 -0
  150. data/spec/rhc/rest_client_spec.rb +752 -0
  151. data/spec/rhc/rest_spec.rb +740 -0
  152. data/spec/rhc/targz_spec.rb +55 -0
  153. data/spec/rhc/wizard_spec.rb +756 -0
  154. data/spec/spec_helper.rb +575 -0
  155. data/spec/wizard_spec_helper.rb +330 -0
  156. metadata +469 -0
@@ -0,0 +1,493 @@
1
+ require 'spec_helper'
2
+ require 'rest_spec_helper'
3
+ require 'rhc/commands/env'
4
+ require 'rhc/config'
5
+
6
+ describe RHC::Commands::Env do
7
+
8
+ def exit_with_code_and_message(code, message=nil)
9
+ expect{ run }.to exit_with_code(code)
10
+ run_output.should match(message) if message
11
+ end
12
+
13
+ def exit_with_code_and_without_message(code, message=nil)
14
+ expect{ run }.to exit_with_code(code)
15
+ run_output.should_not match(message) if message
16
+ end
17
+
18
+ def succeed_with_message(message="done")
19
+ exit_with_code_and_message(0, message)
20
+ end
21
+
22
+ def succeed_without_message(message="done")
23
+ exit_with_code_and_without_message(0, message)
24
+ end
25
+
26
+ let!(:rest_client) { MockRestClient.new }
27
+
28
+ before(:each) do
29
+ user_config
30
+ @rest_domain = rest_client.add_domain("mock_domain_0")
31
+ @rest_app = @rest_domain.add_application("mock_app_0", "ruby-1.8.7")
32
+ end
33
+
34
+ describe 'env help' do
35
+ let(:arguments) { ['env', '--help'] }
36
+ context 'help is run' do
37
+ it "should display help" do
38
+ expect { run }.to exit_with_code(0)
39
+ end
40
+ it('should output usage') { run_output.should match("Usage: app env <action>$") }
41
+ end
42
+ end
43
+
44
+ describe 'env set --help' do
45
+ [['env', 'set', '--help'],
46
+ ['env', 'add', '--help'],
47
+ ['set-env', '--help'],
48
+ ['env-set', '--help']
49
+ ].each_with_index do |args, i|
50
+ context "help is run run with arguments #{i}" do
51
+ let(:arguments) { args }
52
+ it "should display help" do
53
+ expect { run }.to exit_with_code(0)
54
+ end
55
+ it('should output usage') { run_output.should match("Usage: app env-set <VARIABLE=VALUE>") }
56
+ end
57
+ end
58
+ end
59
+
60
+ describe 'env unset --help' do
61
+ [['env', 'unset', '--help'],
62
+ ['env', 'remove', '--help'],
63
+ ['unset-env', '--help'],
64
+ ['env-unset', '--help']
65
+ ].each_with_index do |args, i|
66
+ context "help is run run with arguments #{i}" do
67
+ let(:arguments) { args }
68
+ it "should display help" do
69
+ expect { run }.to exit_with_code(0)
70
+ end
71
+ it('should output usage') { run_output.should match("Usage: app env-unset <VARIABLE>") }
72
+ end
73
+ end
74
+ end
75
+
76
+ describe 'env list --help' do
77
+ [['env', 'list', '--help'],
78
+ ['list-env', '--help'],
79
+ ['env-list', '--help']
80
+ ].each_with_index do |args, i|
81
+ context "help is run run with arguments #{i}" do
82
+ let(:arguments) { args }
83
+ it "should display help" do
84
+ expect { run }.to exit_with_code(0)
85
+ end
86
+ it('should output usage') { run_output.should match("Usage: app env-list <app> [--namespace NAME]") }
87
+ end
88
+ end
89
+ end
90
+
91
+ describe 'env show --help' do
92
+ [['env', 'show', '--help'],
93
+ ['show-env', '--help'],
94
+ ['env-show', '--help']
95
+ ].each_with_index do |args, i|
96
+ context "help is run run with arguments #{i}" do
97
+ let(:arguments) { args }
98
+ it "should display help" do
99
+ expect { run }.to exit_with_code(0)
100
+ end
101
+ it('should output usage') { run_output.should match("Usage: app env-show <VARIABLE>") }
102
+ end
103
+ end
104
+ end
105
+
106
+ describe 'set env' do
107
+
108
+ [['env', 'set', 'TEST_ENV_VAR=1', '--app', 'mock_app_0', '--noprompt', '--confirm'],
109
+ ['set-env', 'TEST_ENV_VAR=1', '--app', 'mock_app_0', '--noprompt', '--confirm'],
110
+ ['env', 'set', '-e', 'TEST_ENV_VAR=1', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
111
+ ['env', 'set', '--env', 'TEST_ENV_VAR=1', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
112
+ ['env', 'set', 'FOO_BAR=1', '--app', 'mock_app_0', '--noprompt', '--confirm'],
113
+ ['env', 'set', 'F1=1', '--app', 'mock_app_0', '--noprompt', '--confirm'],
114
+ ['env', 'set', 'F_=1', '--app', 'mock_app_0', '--noprompt', '--confirm'],
115
+ ['env', 'set', '_FOO=1', '--app', 'mock_app_0', '--noprompt', '--confirm'],
116
+ ['env', 'set', 'FOO=BAR=BAZ', '--app', 'mock_app_0', '--noprompt', '--confirm'],
117
+ ['env', 'set', 'FOO==', '--app', 'mock_app_0', '--noprompt', '--confirm'],
118
+ ['env', 'set', 'FOO=Test 1 2 3', '--app', 'mock_app_0', '--noprompt', '--confirm'],
119
+ ].each_with_index do |args, i|
120
+ context "when run with single env var #{i}" do
121
+ let(:arguments) { args }
122
+ it { succeed_with_message /Setting environment variable\(s\) \.\.\./ }
123
+ it { succeed_with_message /done/ }
124
+ it { succeed_without_message /TEST_ENV_VAR=1/ }
125
+ end
126
+ end
127
+
128
+
129
+ [['env', 'set', 'TEST_ENV_VAR1=1', 'TEST_ENV_VAR2=2', 'TEST_ENV_VAR3=3', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
130
+ ['set-env', 'TEST_ENV_VAR1=1', 'TEST_ENV_VAR2=2', 'TEST_ENV_VAR3=3', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
131
+ ['set-env', '-e', 'TEST_ENV_VAR1=1', '-e', 'TEST_ENV_VAR2=2', '-e', 'TEST_ENV_VAR3=3', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
132
+ ['set-env', '--env', 'TEST_ENV_VAR1=1', '--env', 'TEST_ENV_VAR2=2', '--env', 'TEST_ENV_VAR3=3', '--app', 'mock_app_0', '--noprompt', '--confirm' ]
133
+ ].each_with_index do |args, i|
134
+ context "when run with multiple env vars #{i}" do
135
+ let(:arguments) { args }
136
+ it { succeed_with_message /Setting environment variable\(s\) \.\.\./ }
137
+ it { succeed_with_message /done/ }
138
+ it { succeed_without_message /TEST_ENV_VAR1=1/ }
139
+ it { succeed_without_message /TEST_ENV_VAR2=2/ }
140
+ it { succeed_without_message /TEST_ENV_VAR3=3/ }
141
+ end
142
+ end
143
+
144
+ [['env', 'set', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
145
+ ['set-env', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
146
+ ['env', 'set', '-e', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
147
+ ['env', 'set', '--env', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
148
+ ].each_with_index do |args, i|
149
+ context "when run with no env var provided #{i}" do
150
+ let(:arguments) { args }
151
+ it "should raise env var not provided exception" do
152
+ expect{ run }.to exit_with_code(159)
153
+ run_output.should match(/Environment variable\(s\) not provided\./)
154
+ run_output.should match(/Please provide at least one environment variable using the syntax VARIABLE=VALUE\./)
155
+ end
156
+ end
157
+ end
158
+
159
+ context 'when run with multiple env vars from file' do
160
+ let(:arguments) {['env', 'set', File.expand_path('../../assets/env_vars.txt', __FILE__), '--app', 'mock_app_0', '--noprompt', '--confirm' ]}
161
+ it { succeed_with_message /FOO=123/ }
162
+ it { succeed_with_message /BAR=456/ }
163
+ it { succeed_with_message /MY_OPENSHIFT_ENV_VAR/ }
164
+ it { succeed_with_message /MY_EMPTY_ENV_VAR/ }
165
+ it { succeed_without_message /ZEE/ }
166
+ it { succeed_without_message /LOL/ }
167
+ it { succeed_without_message /MUST NOT BE INCLUDED/ }
168
+ end
169
+
170
+ context 'when run with multiple env vars from multiple files' do
171
+ let(:arguments) {['env', 'set', '-e', File.expand_path('../../assets/env_vars.txt', __FILE__), '-e', File.expand_path('../../assets/env_vars_2.txt', __FILE__), '--app', 'mock_app_0', '--noprompt', '--confirm' ]}
172
+ it { succeed_with_message /FOO=123/ }
173
+ it { succeed_with_message /BAR=456/ }
174
+ it { succeed_with_message /MY_OPENSHIFT_ENV_VAR/ }
175
+ it { succeed_with_message /MY_EMPTY_ENV_VAR/ }
176
+ it { succeed_with_message /AND=123/ }
177
+ it { succeed_without_message /ZEE/ }
178
+ it { succeed_without_message /LOL/ }
179
+ it { succeed_without_message /MUST NOT BE INCLUDED/ }
180
+ end
181
+
182
+ context 'when run with empty file' do
183
+ let(:arguments) {['env', 'set', File.expand_path('../../assets/empty.txt', __FILE__), '--app', 'mock_app_0', '--noprompt', '--confirm' ]}
184
+ it "should raise env var not provided exception" do
185
+ expect{ run }.to exit_with_code(159)
186
+ run_output.should match(/Environment variable\(s\) not found in the provided file\(s\)\./)
187
+ run_output.should match(/Please provide at least one environment variable using the syntax VARIABLE=VALUE\./)
188
+ end
189
+ end
190
+
191
+ context 'when run with --noprompt and without --confirm' do
192
+ let(:arguments) { ['env', 'set', 'TEST_ENV_VAR=1', '--app', 'mock_app_0', '--noprompt' ] }
193
+ it("should not ask for confirmation") { expect{ run }.to exit_with_code(0) }
194
+ it("should output confirmation") { run_output.should_not match("This action requires the --confirm option") }
195
+ end
196
+
197
+ context 'when run with --noprompt and without --confirm from file' do
198
+ let(:arguments) { ['env', 'set', File.expand_path('../../assets/env_vars.txt', __FILE__), '--app', 'mock_app_0', '--noprompt' ] }
199
+ it "should ask for confirmation" do
200
+ expect{ run }.to exit_with_code(1)
201
+ end
202
+ it("should output confirmation") { run_output.should match("This action requires the --confirm option") }
203
+ end
204
+
205
+ context 'when run against an unsupported server' do
206
+ before {
207
+ @rest_app.links.delete 'SET_UNSET_ENVIRONMENT_VARIABLES'
208
+ @rest_app.links.delete 'LIST_ENVIRONMENT_VARIABLES'
209
+ }
210
+ let(:arguments) { ['env', 'set', 'TEST_ENV_VAR=1', '--app', 'mock_app_0', '--noprompt', '--confirm' ] }
211
+ it "should raise env var not found exception" do
212
+ expect{ run }.to exit_with_code(158)
213
+ run_output.should match(/Server does not support environment variables/)
214
+ end
215
+ end
216
+
217
+ [['env', 'set', 'FOO.Z=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
218
+ ['env', 'set', '2FOO=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
219
+ ['env', 'set', 'FO$O=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
220
+ ['env', 'set', 'FO%O=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
221
+ ['env', 'set', 'FO*O=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
222
+ ['env', 'set', 'FOO.=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
223
+ ['env', 'set', '=BAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
224
+ ['env', 'set', '==', '--app', 'mock_app_0', '--noprompt', '--confirm'],
225
+ ].each_with_index do |args, i|
226
+ context "when run with invalid env var names #{i}" do
227
+ let(:arguments) { args }
228
+ it "should raise env var not provided exception" do
229
+ expect{ run }.to exit_with_code(159)
230
+ run_output.should match(/Environment variable\(s\) not provided\./)
231
+ run_output.should match(/Please provide at least one environment variable using the syntax VARIABLE=VALUE\./)
232
+ end
233
+ end
234
+ end
235
+
236
+ end
237
+
238
+ describe 'unset env' do
239
+
240
+ [['env', 'unset', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
241
+ ['unset-env', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm'],
242
+ ['env', 'unset', '-e', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
243
+ ['env', 'unset', '--env', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt', '--confirm' ]
244
+ ].each_with_index do |args, i|
245
+ context "when run with single env var #{i}" do
246
+ let(:arguments) { args }
247
+ it { succeed_with_message /TEST_ENV_VAR/ }
248
+ it { succeed_with_message /Removing environment variable\(s\) \.\.\./ }
249
+ it { succeed_with_message /removed/ }
250
+ end
251
+ end
252
+
253
+ [['env', 'unset', 'TEST_ENV_VAR1', 'TEST_ENV_VAR2', 'TEST_ENV_VAR3', '--app', 'mock_app_0', '--noprompt', '--confirm' ],
254
+ ['unset-env', 'TEST_ENV_VAR1', 'TEST_ENV_VAR2', 'TEST_ENV_VAR3', '--app', 'mock_app_0', '--noprompt', '--confirm' ]
255
+ ].each_with_index do |args, i|
256
+ context "when run with multiple env vars #{i}" do
257
+ let(:arguments) { args }
258
+ it { succeed_with_message /TEST_ENV_VAR1/ }
259
+ it { succeed_with_message /TEST_ENV_VAR2/ }
260
+ it { succeed_with_message /TEST_ENV_VAR3/ }
261
+ it { succeed_with_message /Removing environment variable\(s\) \.\.\./ }
262
+ it { succeed_with_message /removed/ }
263
+ end
264
+ end
265
+
266
+ context 'when run with --noprompt and without --confirm' do
267
+ let(:arguments) { ['env', 'unset', 'TEST_ENV_VAR', '--app', 'mock_app_0', '--noprompt' ] }
268
+ it "should ask for confirmation" do
269
+ expect{ run }.to exit_with_code(1)
270
+ end
271
+ it("should output confirmation") { run_output.should match("This action requires the --confirm option") }
272
+ end
273
+ end
274
+
275
+ describe 'list env' do
276
+ context 'when list with default format' do
277
+ before(:each) do
278
+ @rest_app.set_environment_variables(
279
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
280
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
281
+ end
282
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0'] }
283
+ it { succeed_with_message /FOO=123/ }
284
+ it { succeed_with_message /BAR=456/ }
285
+ it "should contain the environment variables" do
286
+ @rest_app.environment_variables.length.should == 2
287
+ end
288
+ end
289
+
290
+ context 'when list with default format and empty env vars' do
291
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0'] }
292
+ it "should exit with no message" do
293
+ expect{ run }.to exit_with_code(0)
294
+ end
295
+ end
296
+
297
+ context 'when list with quotes format' do
298
+ before(:each) do
299
+ @rest_app.set_environment_variables(
300
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
301
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
302
+ end
303
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0', '--quotes'] }
304
+ it { succeed_with_message /FOO="123"/ }
305
+ it { succeed_with_message /BAR="456"/ }
306
+ it "should contain the environment variables" do
307
+ @rest_app.environment_variables.length.should == 2
308
+ end
309
+ end
310
+
311
+ context 'when list with quotes format and empty env vars' do
312
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0', '--quotes'] }
313
+ it "should exit with no message" do
314
+ expect{ run }.to exit_with_code(0)
315
+ end
316
+ end
317
+
318
+ context 'when list with table format' do
319
+ before(:each) do
320
+ @rest_app.set_environment_variables(
321
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
322
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
323
+ end
324
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0', '--table'] }
325
+ it { succeed_with_message /Name\s+Value/ }
326
+ it { succeed_with_message /FOO\s+123/ }
327
+ it { succeed_with_message /BAR\s+456/ }
328
+ it "should contain the right number of env vars" do
329
+ @rest_app.environment_variables.length.should == 2
330
+ end
331
+ end
332
+
333
+ context 'when list with table and quotes format' do
334
+ before(:each) do
335
+ @rest_app.set_environment_variables(
336
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
337
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
338
+ end
339
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0', '--table', '--quotes'] }
340
+ it { succeed_with_message /Name\s+Value/ }
341
+ it { succeed_with_message /FOO\s+"123"/ }
342
+ it { succeed_with_message /BAR\s+"456"/ }
343
+ it "should contain the right number of env vars" do
344
+ @rest_app.environment_variables.length.should == 2
345
+ end
346
+ end
347
+
348
+ context 'when list with table format and empty env vars' do
349
+ let(:arguments) { ['env', 'list', '--app', 'mock_app_0', '--table'] }
350
+ it "should exit with no message" do
351
+ expect{ run }.to exit_with_code(0)
352
+ end
353
+ end
354
+ end
355
+
356
+ describe 'show env' do
357
+ context 'when show with default format' do
358
+ before(:each) do
359
+ @rest_app.set_environment_variables(
360
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
361
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
362
+ end
363
+ let(:arguments) { ['env', 'show', 'FOO', '--app', 'mock_app_0'] }
364
+ it { succeed_with_message /FOO=123/ }
365
+ it "should not contain env vars not specified to show" do
366
+ run_output.should_not match(/BAR=456/)
367
+ end
368
+ it "should contain the right number of env vars" do
369
+ @rest_app.environment_variables.length.should == 2
370
+ end
371
+ end
372
+
373
+ context 'when show with default format and not found env var' do
374
+ let(:arguments) { ['env', 'show', 'FOO', '--app', 'mock_app_0'] }
375
+ it "should raise env var not found exception" do
376
+ expect{ run }.to exit_with_code(157)
377
+ run_output.should match(/Environment variable\(s\) FOO can't be found in application mock_app_0/)
378
+ end
379
+ end
380
+
381
+ context 'when show with default format and not found env var' do
382
+ before(:each) do
383
+ @rest_app.set_environment_variables(
384
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
385
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
386
+ end
387
+ let(:arguments) { ['env', 'show', 'ZEE', '--app', 'mock_app_0'] }
388
+ it "should contain the right number of env vars" do
389
+ @rest_app.environment_variables.length.should == 2
390
+ end
391
+ it "should not contain env vars not specified to show" do
392
+ run_output.should_not match(/FOO=123/)
393
+ run_output.should_not match(/BAR=456/)
394
+ end
395
+ it "should raise env var not found exception" do
396
+ expect{ run }.to exit_with_code(157)
397
+ run_output.should match(/Environment variable\(s\) ZEE can't be found in application mock_app_0/)
398
+ end
399
+ end
400
+
401
+ context 'when show with quotes format' do
402
+ before(:each) do
403
+ @rest_app.set_environment_variables(
404
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
405
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
406
+ end
407
+ let(:arguments) { ['env', 'show', 'FOO', '--app', 'mock_app_0', '--quotes'] }
408
+ it { succeed_with_message /FOO="123"/ }
409
+ it "should not contain env vars not specified to show" do
410
+ run_output.should_not match(/BAR="456"/)
411
+ end
412
+ it "should contain the right number of env vars" do
413
+ @rest_app.environment_variables.length.should == 2
414
+ end
415
+ end
416
+
417
+ context 'when show with quotes format and not found env var' do
418
+ before(:each) do
419
+ @rest_app.set_environment_variables(
420
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
421
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
422
+ end
423
+ let(:arguments) { ['env', 'show', 'ZEE', '--app', 'mock_app_0', '--quotes'] }
424
+ it "should contain the right number of env vars" do
425
+ @rest_app.environment_variables.length.should == 2
426
+ end
427
+ it "should not contain env vars not specified to show" do
428
+ run_output.should_not match(/FOO=123/)
429
+ run_output.should_not match(/BAR=456/)
430
+ end
431
+ it "should raise env var not found exception" do
432
+ expect{ run }.to exit_with_code(157)
433
+ run_output.should match(/Environment variable\(s\) ZEE can't be found in application mock_app_0/)
434
+ end
435
+ end
436
+
437
+ context 'when show with table format' do
438
+ before(:each) do
439
+ @rest_app.set_environment_variables(
440
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
441
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
442
+ end
443
+ let(:arguments) { ['env', 'show', 'FOO', '--app', 'mock_app_0', '--table'] }
444
+ it { succeed_with_message /Name\s+Value/ }
445
+ it { succeed_with_message /FOO\s+123/ }
446
+ it "should not contain env vars not specified to show" do
447
+ run_output.should_not match(/BAR/)
448
+ end
449
+ it "should contain the right number of env vars" do
450
+ @rest_app.environment_variables.length.should == 2
451
+ end
452
+ end
453
+
454
+ context 'when show with table and quotes format' do
455
+ before(:each) do
456
+ @rest_app.set_environment_variables(
457
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
458
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
459
+ end
460
+ let(:arguments) { ['env', 'show', 'FOO', '--app', 'mock_app_0', '--table', '--quotes'] }
461
+ it { succeed_with_message /Name\s+Value/ }
462
+ it { succeed_with_message /FOO\s+"123"/ }
463
+ it "should not contain env vars not specified to show" do
464
+ run_output.should_not match(/BAR/)
465
+ end
466
+ it "should contain the right number of env vars" do
467
+ @rest_app.environment_variables.length.should == 2
468
+ end
469
+ end
470
+
471
+ context 'when show with table format and not found env var' do
472
+ before(:each) do
473
+ @rest_app.set_environment_variables(
474
+ [RHC::Rest::EnvironmentVariable.new({:name => 'FOO', :value => '123'}),
475
+ RHC::Rest::EnvironmentVariable.new({:name => 'BAR', :value => '456'})])
476
+ end
477
+ let(:arguments) { ['env', 'show', 'ZEE', '--app', 'mock_app_0', '--table'] }
478
+ it "should contain the right number of env vars" do
479
+ @rest_app.environment_variables.length.should == 2
480
+ end
481
+ it "should not contain env vars not specified to show" do
482
+ run_output.should_not match(/FOO/)
483
+ run_output.should_not match(/BAR/)
484
+ end
485
+ it "should raise env var not found exception" do
486
+ expect{ run }.to exit_with_code(157)
487
+ run_output.should match(/Environment variable\(s\) ZEE can't be found in application mock_app_0/)
488
+ end
489
+ end
490
+
491
+ end
492
+
493
+ end
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+ require 'rest_spec_helper'
3
+ require 'rhc/commands/git_clone'
4
+ require 'fileutils'
5
+
6
+ describe RHC::Commands::GitClone do
7
+ before(:each) do
8
+ FakeFS.activate!
9
+ FakeFS::FileSystem.clear
10
+ user_config
11
+ @instance = RHC::Commands::GitClone.new
12
+ RHC::Commands::GitClone.stub(:new) do
13
+ @instance.stub(:git_config_get) { "" }
14
+ @instance.stub(:git_config_set) { "" }
15
+ Kernel.stub(:sleep) { }
16
+ @instance.stub(:host_exists?) do |host|
17
+ host.match("dnserror") ? false : true
18
+ end
19
+ @instance
20
+ end
21
+ end
22
+ let!(:rest_client){ MockRestClient.new }
23
+ before(:each) do
24
+ @domain = rest_client.add_domain("mockdomain")
25
+ @app = @domain.add_application("app1", "mock_unique_standalone_cart")
26
+ end
27
+
28
+ after(:each) do
29
+ FakeFS.deactivate!
30
+ end
31
+
32
+ describe 'git-clone' do
33
+ let(:arguments) { ['app', 'git-clone', 'app1'] }
34
+
35
+ context 'when run without git installed' do
36
+ before do
37
+ @instance.stub(:has_git?) { false }
38
+ end
39
+ it "should print out git warning" do
40
+ run_output.should match("You do not have git installed")
41
+ end
42
+ end
43
+
44
+ context "stubbing git_clone_repo" do
45
+ context "reports success successfully" do
46
+ before do
47
+ @instance.stub(:git_clone_repo) do |git_url, repo_dir|
48
+ Dir::mkdir(repo_dir)
49
+ say "Cloned"
50
+ true
51
+ end
52
+ end
53
+
54
+ it { expect { run }.to exit_with_code(0) }
55
+ it { run_output.should match("Cloned") }
56
+
57
+ context 'when app has an initial git url' do
58
+ before do
59
+ @app2 = @domain.add_application("app2", "mock_unique_standalone_cart", nil, "default", "git://test")
60
+ @instance.stub(:git_remote_add) do |remote_name, remote_url|
61
+ say "Added remote #{remote_name} pointing to #{remote_url}"
62
+ true
63
+ end
64
+ end
65
+ let(:arguments) { ['git-clone', 'app2'] }
66
+ it { run_output.should match("Added remote startapp pointing to git://test") }
67
+ end
68
+
69
+ end
70
+
71
+ context "testing git_clone_deploy_hooks" do
72
+ before do
73
+ @instance.stub(:git_clone_repo) do |git_url, repo_dir|
74
+ FileUtils.mkdir_p "#{repo_dir}/.git/hooks"
75
+ FileUtils.mkdir_p "#{repo_dir}/.openshift/git_hooks"
76
+ FileUtils.touch "#{repo_dir}/.openshift/git_hooks/pre_commit"
77
+ @instance.git_clone_deploy_hooks(repo_dir)
78
+ say "Copied" if File.exists?("#{repo_dir}/.git/hooks/pre_commit")
79
+ true
80
+ end
81
+
82
+ # Get around the FakeFS bug (defunkt/fakefs#177) by
83
+ # stubbing the #cp call to inject a expected fs entry
84
+ FileUtils.stub(:cp) do |hook, dir|
85
+ FakeFS::FileSystem.add(
86
+ File.join(dir, File.basename(hook)),
87
+ FakeFS::FileSystem.find(hook))
88
+ end
89
+ end
90
+ it { expect { run }.to exit_with_code(0) }
91
+ it { run_output.should match("Copied") }
92
+ end
93
+
94
+ context "reports failure" do
95
+ before{ @instance.stub(:git_clone_repo).and_raise(RHC::GitException) }
96
+
97
+ it { expect { run }.to exit_with_code(216) }
98
+ it { run_output.should match("Git returned an error") }
99
+ end
100
+ end
101
+ end
102
+ end