rhc 1.16.9 → 1.17.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -45,7 +45,7 @@ describe "rhc core scenarios" do
45
45
 
46
46
  context "when creating an app" do
47
47
  when_running 'create-app', 'test1', a_web_cartridge
48
- before{ no_applications(/^test1/) }
48
+ before{ no_applications }
49
49
  it "returns the proper info and is in the rest api" do
50
50
  status.should == 0
51
51
  output.should match "Your application 'test1' is now available"
@@ -146,4 +146,36 @@ describe "rhc core scenarios" do
146
146
  end
147
147
  end
148
148
  end
149
+
150
+ context "when adding a cartridge" do
151
+ context "with a scalable app" do
152
+ before(:all) do
153
+ standard_config
154
+ @app = has_a_scalable_application
155
+ end
156
+
157
+ after(:all) do
158
+ debug.puts "cleaning up scalable app" if debug?
159
+ @app.destroy
160
+ end
161
+
162
+ let(:app){ @app }
163
+
164
+ it "should add a cartridge with small gear size" do
165
+ cartridge = a_random_cartridge(['embedded', 'service', 'database'])
166
+ r = rhc 'add-cartridge', cartridge, '-a', app.name, '--gear-size', 'small'
167
+ r.stdout.should match /#{cartridge}/
168
+ r.stdout.should match /Gears:\s+1 small/
169
+ r.status.should == 0
170
+ end
171
+
172
+ it "should fail for a cartridge with not allowed gear size" do
173
+ cartridge = a_random_cartridge(['embedded', 'service', 'database'])
174
+ r = rhc 'add-cartridge', cartridge, '-a', app.name, '--gear-size', 'medium'
175
+ r.stdout.should match "The gear size 'medium' is not valid for this domain. Allowed sizes: small."
176
+ r.status.should_not == 0
177
+ end
178
+ end
179
+
180
+ end
149
181
  end
@@ -34,12 +34,21 @@ describe "rhc domain scenarios" do
34
34
 
35
35
  it "should reject invalid gear size configuration changes" do
36
36
  all_sizes = client.user.capabilities.gear_sizes
37
+ valid_sizes = client.api.links['ADD_DOMAIN']['optional_params'].inject([]) {|sizes, p| sizes += p['valid_options'] if p['name'] == 'allowed_gear_sizes' } rescue []
38
+ disallowed_sizes = valid_sizes - all_sizes
37
39
 
38
40
  r = rhc 'configure-domain', domain.name, '--allowed-gear-sizes', '_not_a_size_'
39
41
  r.status.should_not == 1
40
42
  r.stdout.should match "Updating domain configuration.*The following gear sizes are invalid: _not_a_size_"
41
43
  client.reset.find_domain(domain.name).allowed_gear_sizes.should == all_sizes
42
44
 
45
+ if disallowed_sizes.first
46
+ r = rhc 'configure-domain', domain.name, '--allowed-gear-sizes', disallowed_sizes.first
47
+ r.status.should_not == 1
48
+ r.stdout.should match "Updating domain configuration.*The following gear sizes are not available.*: #{disallowed_sizes.first}"
49
+ client.reset.find_domain(domain.name).allowed_gear_sizes.should == all_sizes
50
+ end
51
+
43
52
  r = rhc 'configure-domain', domain.name, '--allowed-gear-sizes'
44
53
  r.status.should_not == 1
45
54
  r.stdout.should match "invalid option: Provide a comma delimited .* --allowed-gear-sizes"
@@ -51,7 +51,7 @@ module RHC
51
51
  ].compact.any?{ |s| s.present? && s.downcase.gsub(/[_\-\s]/,' ').include?(search) } ||
52
52
  search.length > 2 && [
53
53
  cart.description
54
- ].compact.any?{ |s| s.present? && !s.downcase.match(/\b#{search}\b/).nil? }
54
+ ].compact.any?{ |s| s.present? && !s.downcase.match(/\b#{Regexp.escape(search)}\b/).nil? }
55
55
  end
56
56
 
57
57
  def web_carts_only
@@ -72,6 +72,7 @@ module RHC::Commands
72
72
  syntax "<cartridge_type> [--namespace NAME] [--app NAME]"
73
73
  takes_application
74
74
  option ["-e", "--env VARIABLE=VALUE"], "Environment variable(s) to be set on this cartridge, or path to a file containing environment variables", :type => :list
75
+ option ["-g", "--gear-size SIZE"], "Gear size controls how much memory and CPU your cartridge can use"
75
76
  argument :cart_type, "The type of the cartridge you are adding (run 'rhc cartridge list' to obtain a list of available cartridges)", ["-c", "--cartridge cart_type"]
76
77
  alias_action :"app cartridge add", :root_command => true, :deprecated => true
77
78
  def add(cart_type)
@@ -84,7 +85,10 @@ module RHC::Commands
84
85
  rest_app = find_app(:include => :cartridges)
85
86
 
86
87
  supports_env_vars = rest_app.supports_add_cartridge_with_env_vars?
88
+ supports_gear_size = rest_app.supports_add_cartridge_with_gear_size?
89
+
87
90
  cart.environment_variables = collect_env_vars(options.env).map { |item| item.to_hash } if options.env && supports_env_vars
91
+ cart.gear_size = options.gear_size if options.gear_size && supports_gear_size
88
92
 
89
93
  rest_cartridge = rest_app.add_cartridge(cart)
90
94
 
@@ -95,6 +99,7 @@ module RHC::Commands
95
99
  paragraph{ display_cart(rest_cartridge) }
96
100
  paragraph{ say "Use 'rhc env --help' to manage environment variable(s) on this cartridge and application." } if cart.environment_variables.present?
97
101
  paragraph{ warn "Server does not support environment variables." if options.env && !supports_env_vars }
102
+ paragraph{ warn "Server does not support gear sizes for cartridges." if options.gear_size && !supports_gear_size }
98
103
  paragraph{ rest_cartridge.messages.each { |msg| success msg } }
99
104
 
100
105
  0
@@ -194,7 +199,7 @@ module RHC::Commands
194
199
  cartridges such as databases may require specific increments of scaling (1, 3, 5) in order to
195
200
  properly function. Please consult the cartridge documentation for more on specifics of scaling.
196
201
 
197
- Set both values the same to guarantee a scale value. You may pecify both values with the argument
202
+ Set both values the same to guarantee a scale value. You may specify both values with the argument
198
203
  'multiplier' or use '--min' and '--max' independently.
199
204
 
200
205
  Scaling may take several minutes or more if the server must provision multiple gears. Your operation
@@ -37,7 +37,8 @@ module RHC::Commands
37
37
  '--allowed-gear-sizes' option. If '--no-allowed-gear-sizes' is set, no applications
38
38
  can be created in the domain. Older servers may not support this option.
39
39
  DESC
40
- option ['--[no-]allowed-gear-sizes [SIZES]'], 'A comma-delimited list of the gear sizes that will be allowed in this domain.', :optional => true
40
+ option ['--no-allowed-gear-sizes'], 'Do not allow any gear sizes in this domain.', :optional => true
41
+ option ['--allowed-gear-sizes [SIZES]'], 'A comma-delimited list of the gear sizes that will be allowed in this domain.', :optional => true
41
42
  argument :namespace, "New domain name (letters and numbers, max 16 chars)", ["-n", "--namespace NAME"]
42
43
  def create(namespace)
43
44
  say "Creating domain '#{namespace}' ... "
@@ -68,12 +69,13 @@ module RHC::Commands
68
69
 
69
70
  summary "Change one or more configuration settings on the domain"
70
71
  syntax "<namespace>"
71
- option ['--[no-]allowed-gear-sizes [SIZES]'], 'A comma-delimited list of the gear sizes that will be allowed in this domain.', :optional => true
72
+ option ['--no-allowed-gear-sizes'], 'Do not allow any gear sizes in this domain.', :optional => true
73
+ option ['--allowed-gear-sizes [SIZES]'], "A comma-delimited list of gear sizes allowed in this domain. To see available sizes, run 'rhc account'.", :optional => true
72
74
  takes_domain :argument => true
73
75
  def configure(_)
74
76
  domain = find_domain
75
77
  payload = {}
76
- payload[:allowed_gear_sizes] = check_allowed_gear_sizes unless options.allowed_gear_sizes.nil?
78
+ payload[:allowed_gear_sizes] = check_allowed_gear_sizes unless options.allowed_gear_sizes.nil? and options.no_allowed_gear_sizes.nil?
77
79
 
78
80
  if payload.present?
79
81
  say "Updating domain configuration ... "
@@ -128,11 +130,12 @@ module RHC::Commands
128
130
  summary "Delete a domain"
129
131
  syntax "<namespace>"
130
132
  takes_domain :argument => true
133
+ option ["-f", "--force"], "Force the action"
131
134
  def delete(_)
132
135
  domain = find_domain
133
136
 
134
137
  say "Deleting domain '#{domain.name}' ... "
135
- domain.destroy
138
+ domain.destroy(options.force.present?)
136
139
  success "deleted"
137
140
 
138
141
  0
@@ -153,7 +156,8 @@ module RHC::Commands
153
156
 
154
157
  protected
155
158
  def check_allowed_gear_sizes
156
- sizes = options.allowed_gear_sizes
159
+ raise OptionParser::InvalidOption, "--allowed-gear-sizes and --no-allowed-gear-sizes cannot both be specified" unless options.allowed_gear_sizes.nil? or options.no_allowed_gear_sizes.nil?
160
+ sizes = options.no_allowed_gear_sizes.nil? ? options.allowed_gear_sizes : false
157
161
  raise OptionParser::InvalidOption, "The server does not support --allowed-gear-sizes" unless sizes.nil? || rest_client.api.has_param?(:add_domain, 'allowed_gear_sizes')
158
162
  if sizes.is_a? String
159
163
  sizes.split(',').map(&:strip).map(&:presence)
@@ -2,7 +2,7 @@ module RHC::Commands
2
2
  class Server < Base
3
3
  suppress_wizard
4
4
 
5
- summary "Display information about the status of the OpenShift service."
5
+ summary "Display information about the status of the OpenShift service"
6
6
  description <<-DESC
7
7
  Retrieves any open issues or notices about the operation of the
8
8
  OpenShift service and displays them in the order they were opened.
@@ -10,11 +10,34 @@ module RHC
10
10
  protected
11
11
 
12
12
  def deploy_artifact(rest_app, artifact, hot_deploy, force_clean_build)
13
- File.file?(artifact) ?
14
- deploy_local_file(rest_app, artifact, hot_deploy, force_clean_build) :
15
- artifact =~ /^#{URI::regexp}$/ ?
16
- deploy_file_from_url(rest_app, artifact, hot_deploy, force_clean_build) :
17
- deploy_git_ref(rest_app, artifact, hot_deploy, force_clean_build)
13
+ is_file = File.file?(artifact)
14
+ is_url = URI::ABS_URI.match(artifact).present?
15
+
16
+ if rest_app.deployment_type == 'binary'
17
+ if is_file
18
+ deploy_local_file(rest_app, artifact, hot_deploy, force_clean_build)
19
+ elsif is_url
20
+ deploy_file_from_url(rest_app, artifact, hot_deploy, force_clean_build)
21
+ else
22
+ paragraph do
23
+ warn "The application '#{rest_app.name}' is configured for binary deployments but the artifact "\
24
+ "provided ('#{artifact}') is not a binary file. Please provide the path to a deployable file on "\
25
+ "your local filesystem or a url, or configure your app to deploy from a git reference with 'rhc "\
26
+ "configure-app #{rest_app.name} --deployment-type git'."
27
+ end
28
+ raise IncompatibleDeploymentTypeException
29
+ end
30
+ elsif is_file || is_url
31
+ paragraph do
32
+ warn "The application '#{rest_app.name}' is configured for git "\
33
+ "reference deployments but the artifact provided ('#{artifact}') is #{is_file ? 'a file' : 'a url'}. Please "\
34
+ "provide a git reference to deploy (branch, tag or commit SHA1) or configure your app to deploy from binaries "\
35
+ "with 'rhc configure-app #{rest_app.name} --deployment-type binary'."
36
+ end
37
+ raise IncompatibleDeploymentTypeException
38
+ else
39
+ deploy_git_ref(rest_app, artifact, hot_deploy, force_clean_build)
40
+ end
18
41
  end
19
42
 
20
43
  def deploy_git_ref(rest_app, ref, hot_deploy, force_clean_build)
@@ -132,6 +132,12 @@ module RHC
132
132
  end
133
133
  end
134
134
 
135
+ class IncompatibleDeploymentTypeException < Exception
136
+ def initialize(message="The artifact provided is not compatible with the app deployment type.")
137
+ super message, 133
138
+ end
139
+ end
140
+
135
141
  class MissingScalingValueException < Exception
136
142
  def initialize(message="Must provide either a min or max value for scaling")
137
143
  super message
@@ -45,6 +45,9 @@ module RHC
45
45
  if cart.respond_to?(:environment_variables) && cart.environment_variables.present?
46
46
  c[:environment_variables] = cart.environment_variables
47
47
  end
48
+ if cart.respond_to?(:gear_size) && cart.gear_size.present?
49
+ c[:gear_size] = cart.gear_size
50
+ end
48
51
  cart = c
49
52
  end
50
53
 
@@ -178,6 +181,10 @@ module RHC
178
181
  has_param?('ADD_CARTRIDGE', 'environment_variables')
179
182
  end
180
183
 
184
+ def supports_add_cartridge_with_gear_size?
185
+ has_param?('ADD_CARTRIDGE', 'gear_size')
186
+ end
187
+
181
188
  def deployments
182
189
  debug "Listing deployments for application #{name}"
183
190
  raise RHC::DeploymentsNotSupportedException if !supports? "LIST_DEPLOYMENTS"
@@ -5,7 +5,7 @@ module RHC
5
5
 
6
6
  define_attr :type, :name, :display_name, :properties, :gear_profile, :status_messages, :scales_to, :scales_from, :scales_with,
7
7
  :current_scale, :supported_scales_to, :supported_scales_from, :tags, :description, :collocated_with, :base_gear_storage,
8
- :additional_gear_storage, :url, :environment_variables
8
+ :additional_gear_storage, :url, :environment_variables, :gear_size
9
9
 
10
10
  def scalable?
11
11
  supported_scales_to != supported_scales_from
@@ -667,8 +667,8 @@ module RHC::Rest::Mock
667
667
  self
668
668
  end
669
669
 
670
- def destroy
671
- raise RHC::Rest::ClientErrorException.new("Applications must be empty.") unless @applications.empty?
670
+ def destroy(force=false)
671
+ raise RHC::Rest::ClientErrorException.new("Applications must be empty.") unless @applications.empty? or force.present?
672
672
  client.domains.delete_if { |d| d.name == @name }
673
673
 
674
674
  @applications = nil
@@ -929,9 +929,10 @@ module RHC::Rest::Mock
929
929
 
930
930
  attr_accessor :usage_rate
931
931
 
932
- def initialize(client, name, type, app=nil, tags=[], properties=[{'type' => 'cart_data', 'name' => 'connection_url', 'value' => "http://fake.url" }])
932
+ def initialize(client, name, type, app=nil, tags=[], properties=[{'type' => 'cart_data', 'name' => 'connection_url', 'value' => "http://fake.url" }], description=nil)
933
933
  super({}, client)
934
934
  @name = name
935
+ @description = description || "Description of #{name}"
935
936
  @type = type
936
937
  @app = app
937
938
  @tags = tags
@@ -36,6 +36,11 @@ module RhcExecutionHelper
36
36
  end
37
37
  end
38
38
 
39
+ def a_random_cartridge(with_tags=nil, for_user=nil)
40
+ c = for_user ? for_user.client : client
41
+ c.cartridges.select{|cartridge| with_tags.nil? || (with_tags - cartridge.tags).empty?}.shuffle.first.name
42
+ end
43
+
39
44
  def rhc(*args)
40
45
  opts = args.pop if args.last.is_a? Hash
41
46
  opts ||= {}
@@ -139,13 +144,24 @@ module RhcExecutionHelper
139
144
  c = for_user ? for_user.client : client
140
145
  debug.puts "Creating or reusing an app" if debug?
141
146
  apps = c.applications
142
- apps.first or begin
147
+ apps.find{|app| !app.scalable?} or begin
143
148
  domain = has_a_domain(for_user)
144
149
  debug.puts " creating a new application" if debug?
145
150
  c.domains.first.add_application("test#{random}", :cartridges => [a_web_cartridge])
146
151
  end
147
152
  end
148
153
 
154
+ def has_a_scalable_application(for_user=nil)
155
+ c = for_user ? for_user.client : client
156
+ debug.puts "Creating or reusing a scalable app" if debug?
157
+ apps = c.applications
158
+ apps.find(&:scalable?) or begin
159
+ domain = has_a_domain(for_user)
160
+ debug.puts " creating a new scalable application" if debug?
161
+ c.domains.first.add_application("scalable#{random}", :cartridges => [a_web_cartridge], :scale => true)
162
+ end
163
+ end
164
+
149
165
  def has_a_domain(for_user=nil)
150
166
  c = for_user ? for_user.client : client
151
167
  debug.puts "Creating or reusing a domain" if debug?
@@ -92,6 +92,38 @@ describe RHC::Commands::Cartridge do
92
92
  end
93
93
  end
94
94
 
95
+ describe 'cartridge add' do
96
+ let!(:rest_client){ MockRestClient.new }
97
+ let(:arguments) { ['cartridge', 'add', 'mock_cart-1', '--app', 'app1', '--gear-size', 'small'] }
98
+
99
+ context 'with gear size' do
100
+ before do
101
+ domain = rest_client.add_domain("mock_domain")
102
+ app = domain.add_application("app1", "mock_type", true)
103
+ end
104
+ it { succeed_with_message /Adding mock_cart-1 to application 'app1' \.\.\. / }
105
+ it { succeed_with_message /Connection URL:\s+http\:\/\/fake\.url/ }
106
+ it { succeed_with_message /Prop1:\s+value1/ }
107
+ it { succeed_with_message /Cartridge added with properties/ }
108
+ it "should not contain env var info" do
109
+ run_output.should_not match(/Environment Variables/)
110
+ end
111
+ it { succeed_with_message /Gears:\s+1 small/ }
112
+ end
113
+
114
+ context 'with gear size on unsupported server' do
115
+ let(:arguments) { ['cartridge', 'add', 'mock_cart-1', '--app', 'app1', '--gear-size', 'small'] }
116
+ before do
117
+ domain = rest_client.add_domain("mock_domain")
118
+ app = domain.add_application("app1", "mock_type", true)
119
+ @app.stub(:has_param?).with('ADD_CARTRIDGE','environment_variables').and_return(true)
120
+ @app.stub(:has_param?).with('ADD_CARTRIDGE','gear_size').and_return(false)
121
+ end
122
+ it { expect { run }.to exit_with_code(0) }
123
+ it { run_output.should match(/Server does not support gear sizes for cartridges/) }
124
+ end
125
+ end
126
+
95
127
  describe 'cartridge add' do
96
128
  let!(:rest_client){ MockRestClient.new }
97
129
  let(:instance) do
@@ -152,6 +184,15 @@ describe RHC::Commands::Cartridge do
152
184
  }
153
185
  end
154
186
 
187
+ context 'when cartridge with regex breaking name does not exist' do
188
+ let(:arguments) { ['cartridge', 'add', '*##', '--app', 'app1'] }
189
+ before do
190
+ domain = rest_client.add_domain("mock_domain")
191
+ app = domain.add_application("app1", "mock_type")
192
+ end
193
+ it{ fail_with_code 154 }
194
+ end
195
+
155
196
  context 'when cartridge does not exist' do
156
197
  let(:arguments) { ['cartridge', 'add', 'nomatch_cart', '--app', 'app1'] }
157
198
  before do
@@ -595,7 +636,10 @@ describe RHC::Commands::Cartridge do
595
636
  ].each_with_index do |args, i|
596
637
  context "when run against a server without env vars support #{i}" do
597
638
  let(:arguments) { args }
598
- before{ @app.should_receive(:has_param?).with('ADD_CARTRIDGE','environment_variables').and_return(false) }
639
+ before do
640
+ @app.stub(:has_param?).with('ADD_CARTRIDGE','environment_variables').and_return(false)
641
+ @app.stub(:has_param?).with('ADD_CARTRIDGE','gear_size').and_return(true)
642
+ end
599
643
  it { expect { run }.to exit_with_code(0) }
600
644
  it { run_output.should match(/Server does not support environment variables/) }
601
645
  it { run_output.should_not match(/Environment Variables:\s+FOO=BAR/) }
@@ -58,6 +58,7 @@ describe RHC::Commands::Deployment do
58
58
 
59
59
  context "binary file successfully" do
60
60
  before do
61
+ @rest_app.stub(:deployment_type).and_return('binary')
61
62
  ssh = double(Net::SSH)
62
63
  session = double(Net::SSH::Connection::Session)
63
64
  channel = double(Net::SSH::Connection::Channel)
@@ -92,6 +93,7 @@ describe RHC::Commands::Deployment do
92
93
  URI('https://foo.com/path/to/file/' + DEPLOYMENT_APP_NAME + '.tar.gz')].each do |uri|
93
94
  context "url file successfully" do
94
95
  before do
96
+ @rest_app.stub(:deployment_type).and_return('binary')
95
97
  ssh = double(Net::SSH)
96
98
  session = double(Net::SSH::Connection::Session)
97
99
  channel = double(Net::SSH::Connection::Channel)
@@ -126,6 +128,7 @@ describe RHC::Commands::Deployment do
126
128
 
127
129
  context "binary file with corrupted file" do
128
130
  before do
131
+ @rest_app.stub(:deployment_type).and_return('binary')
129
132
  ssh = double(Net::SSH)
130
133
  session = double(Net::SSH::Connection::Session)
131
134
  channel = double(Net::SSH::Connection::Channel)
@@ -165,7 +168,10 @@ describe RHC::Commands::Deployment do
165
168
  end
166
169
 
167
170
  context "fails when deploying binary file" do
168
- before (:each) { Net::SSH.should_receive(:start).and_raise(Errno::ECONNREFUSED) }
171
+ before (:each) do
172
+ @rest_app.stub(:deployment_type).and_return('binary')
173
+ Net::SSH.should_receive(:start).and_raise(Errno::ECONNREFUSED)
174
+ end
169
175
  let(:arguments) {['app', 'deploy', @targz_filename, '--app', DEPLOYMENT_APP_NAME]}
170
176
  it "should exit with error" do
171
177
  expect{ run }.to exit_with_code(1)
@@ -173,7 +179,10 @@ describe RHC::Commands::Deployment do
173
179
  end
174
180
 
175
181
  context "fails when deploying binary file" do
176
- before (:each) { Net::SSH.should_receive(:start).and_raise(SocketError) }
182
+ before (:each) do
183
+ @rest_app.stub(:deployment_type).and_return('binary')
184
+ Net::SSH.should_receive(:start).and_raise(SocketError)
185
+ end
177
186
  let(:arguments) {['app', 'deploy', @targz_filename, '--app', DEPLOYMENT_APP_NAME]}
178
187
  it "should exit with error" do
179
188
  expect{ run }.to exit_with_code(1)
@@ -181,7 +190,10 @@ describe RHC::Commands::Deployment do
181
190
  end
182
191
 
183
192
  context "fails when deploying url file" do
184
- before (:each) { Net::SSH.should_receive(:start).and_raise(Errno::ECONNREFUSED) }
193
+ before (:each) do
194
+ @rest_app.stub(:deployment_type).and_return('binary')
195
+ Net::SSH.should_receive(:start).and_raise(Errno::ECONNREFUSED)
196
+ end
185
197
  let(:arguments) {['app', 'deploy', 'http://foo.com/deploy.tar.gz', '--app', DEPLOYMENT_APP_NAME]}
186
198
  it "should exit with error" do
187
199
  expect{ run }.to exit_with_code(1)
@@ -189,7 +201,10 @@ describe RHC::Commands::Deployment do
189
201
  end
190
202
 
191
203
  context "fails when deploying url file" do
192
- before (:each) { Net::SSH.should_receive(:start).and_raise(SocketError) }
204
+ before (:each) do
205
+ @rest_app.stub(:deployment_type).and_return('binary')
206
+ Net::SSH.should_receive(:start).and_raise(SocketError)
207
+ end
193
208
  let(:arguments) {['app', 'deploy', 'http://foo.com/deploy.tar.gz', '--app', DEPLOYMENT_APP_NAME]}
194
209
  it "should exit with error" do
195
210
  expect{ run }.to exit_with_code(1)
@@ -217,6 +232,32 @@ describe RHC::Commands::Deployment do
217
232
  end
218
233
  end
219
234
 
235
+ context "fails when deploying git reference on an app configured to deployment_type = binary" do
236
+ before { @rest_app.stub(:deployment_type).and_return('binary') }
237
+ let(:arguments) {['app', 'deploy', 'master', '--app', DEPLOYMENT_APP_NAME]}
238
+ it "should exit with error" do
239
+ expect{ run }.to exit_with_code(133)
240
+ end
241
+ end
242
+
243
+ context "fails when deploying file on an app configured to deployment_type = git" do
244
+ before { @rest_app.stub(:deployment_type).and_return('git') }
245
+ let(:arguments) {['app', 'deploy', @targz_filename, '--app', DEPLOYMENT_APP_NAME]}
246
+ it "should exit with error" do
247
+ expect{ run }.to exit_with_code(133)
248
+ end
249
+ end
250
+
251
+ [URI('http://foo.com/path/to/file/' + DEPLOYMENT_APP_NAME + '.tar.gz'),
252
+ URI('https://foo.com/path/to/file/' + DEPLOYMENT_APP_NAME + '.tar.gz')].each do |uri|
253
+ context "fails when deploying url on an app configured to deployment_type = git" do
254
+ before { @rest_app.stub(:deployment_type).and_return('git') }
255
+ let(:arguments) {['app', 'deploy', uri.to_s, '--app', DEPLOYMENT_APP_NAME]}
256
+ it "should exit with error" do
257
+ expect{ run }.to exit_with_code(133)
258
+ end
259
+ end
260
+ end
220
261
  end
221
262
 
222
263
  describe "activate deployment" do
@@ -321,6 +321,11 @@ describe RHC::Commands::Domain do
321
321
  it("should succeed"){ expect { run }.to exit_with_code(0) }
322
322
  it("should display the domain config"){ run_output.should match(/Domain domain1 configuration.*Allowed Gear Sizes:\s+<none>/m) }
323
323
  end
324
+
325
+ context "with --allowed-gear-sizes and --no-allowed-gear-sizes" do
326
+ let(:arguments) { ['domain', 'configure', 'domain1', '--trace', '--no-allowed-gear-sizes', '--allowed-gear-sizes', 'small'] }
327
+ it("raise an invalid option"){ expect{ run }.to raise_error(OptionParser::InvalidOption, /--allowed-gear-sizes.*--no-allowed-gear-sizes/) }
328
+ end
324
329
  end
325
330
  end
326
331
 
@@ -368,6 +373,19 @@ describe RHC::Commands::Domain do
368
373
  end
369
374
  it { run_output.should match("Applications must be empty") }
370
375
  end
376
+
377
+ context 'when delete is forced' do
378
+ let(:arguments) { ['domain', 'delete', 'deleteme', '--force'] }
379
+ before do
380
+ domain = rest_client.add_domain("deleteme")
381
+ domain.add_application 'testapp1', 'mock-1.0'
382
+ end
383
+ it "should delete successfully" do
384
+ expect { run }.to exit_with_code(0)
385
+ rest_client.domains.empty?.should be_true
386
+ end
387
+ end
388
+
371
389
  end
372
390
 
373
391
  describe 'help' do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 69
4
+ hash: 95
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 16
9
- - 9
10
- version: 1.16.9
8
+ - 17
9
+ - 6
10
+ version: 1.17.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Red Hat
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-11-05 00:00:00 Z
18
+ date: 2013-12-02 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: net-ssh