openshift-origin-controller 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of openshift-origin-controller might be problematic. Click here for more details.
- data/COPYRIGHT +1 -0
- data/Gemfile +4 -0
- data/LICENSE +12 -0
- data/README.md +3 -0
- data/Rakefile +9 -0
- data/app/controllers/app_events_controller.rb +115 -0
- data/app/controllers/application_templates_controller.rb +19 -0
- data/app/controllers/applications_controller.rb +214 -0
- data/app/controllers/base_controller.rb +367 -0
- data/app/controllers/cartridges_controller.rb +48 -0
- data/app/controllers/descriptors_controller.rb +23 -0
- data/app/controllers/dns_resolvable_controller.rb +35 -0
- data/app/controllers/domains_controller.rb +156 -0
- data/app/controllers/emb_cart_controller.rb +276 -0
- data/app/controllers/emb_cart_events_controller.rb +52 -0
- data/app/controllers/environment_controller.rb +11 -0
- data/app/controllers/estimates_controller.rb +71 -0
- data/app/controllers/gear_groups_controller.rb +53 -0
- data/app/controllers/gears_controller.rb +70 -0
- data/app/controllers/keys_controller.rb +96 -0
- data/app/controllers/legacy_broker_controller.rb +510 -0
- data/app/controllers/quickstarts_controller.rb +29 -0
- data/app/controllers/user_controller.rb +38 -0
- data/app/helpers/cartridge_helper.rb +25 -0
- data/app/helpers/legacy_broker_helper.rb +21 -0
- data/app/helpers/user_action_logger.rb +38 -0
- data/app/models/application.rb +1718 -0
- data/app/models/application_template.rb +27 -0
- data/app/models/cartridge_cache.rb +51 -0
- data/app/models/cloud_user.rb +334 -0
- data/app/models/component_instance.rb +228 -0
- data/app/models/connection_endpoint.rb +10 -0
- data/app/models/district.rb +210 -0
- data/app/models/domain.rb +234 -0
- data/app/models/gear.rb +376 -0
- data/app/models/group_instance.rb +306 -0
- data/app/models/key.rb +20 -0
- data/app/models/legacy_reply.rb +15 -0
- data/app/models/legacy_request.rb +126 -0
- data/app/models/link.rb +11 -0
- data/app/models/message.rb +10 -0
- data/app/models/name_server_cache.rb +46 -0
- data/app/models/optional_param.rb +12 -0
- data/app/models/param.rb +13 -0
- data/app/models/remote_job.rb +57 -0
- data/app/models/rest_application.rb +126 -0
- data/app/models/rest_application10.rb +106 -0
- data/app/models/rest_application12.rb +124 -0
- data/app/models/rest_application_estimate.rb +12 -0
- data/app/models/rest_application_template.rb +20 -0
- data/app/models/rest_cartridge10.rb +41 -0
- data/app/models/rest_cartridge11.rb +151 -0
- data/app/models/rest_domain.rb +43 -0
- data/app/models/rest_domain10.rb +42 -0
- data/app/models/rest_estimates.rb +16 -0
- data/app/models/rest_gear.rb +14 -0
- data/app/models/rest_gear_group.rb +26 -0
- data/app/models/rest_key.rb +24 -0
- data/app/models/rest_reply.rb +31 -0
- data/app/models/rest_user.rb +43 -0
- data/app/models/result_io.rb +67 -0
- data/app/models/usage_record.rb +37 -0
- data/app/models/validators/app_validator.rb +30 -0
- data/app/models/validators/key_validator.rb +30 -0
- data/app/models/validators/namespace_validator.rb +18 -0
- data/config/routes.rb +36 -0
- data/lib/controller_engine.rb +7 -0
- data/lib/openshift-origin-controller.rb +14 -0
- data/lib/openshift/application_container_proxy.rb +241 -0
- data/lib/openshift/auth_service.rb +101 -0
- data/lib/openshift/data_store.rb +33 -0
- data/lib/openshift/dns_service.rb +41 -0
- data/lib/openshift/mongo_data_store.rb +671 -0
- data/openshift-origin-controller.gemspec +42 -0
- data/rubygem-openshift-origin-controller.spec +274 -0
- data/test/cucumber/application-estimate.feature +25 -0
- data/test/cucumber/cartridge-10gen-mms-agent.feature +28 -0
- data/test/cucumber/cartridge-cron.feature +32 -0
- data/test/cucumber/cartridge-haproxy.feature +31 -0
- data/test/cucumber/cartridge-jenkins-build.feature +12 -0
- data/test/cucumber/cartridge-jenkins-client.feature +10 -0
- data/test/cucumber/cartridge-lifecycle-diy.feature +21 -0
- data/test/cucumber/cartridge-lifecycle-jbossas.feature +61 -0
- data/test/cucumber/cartridge-lifecycle-jbosseap.feature +61 -0
- data/test/cucumber/cartridge-lifecycle-jbossews10.feature +61 -0
- data/test/cucumber/cartridge-lifecycle-jenkins.feature +41 -0
- data/test/cucumber/cartridge-lifecycle-nodejs.feature +59 -0
- data/test/cucumber/cartridge-lifecycle-perl.feature +40 -0
- data/test/cucumber/cartridge-lifecycle-php.feature +106 -0
- data/test/cucumber/cartridge-lifecycle-python.feature +40 -0
- data/test/cucumber/cartridge-lifecycle-ruby18.feature +49 -0
- data/test/cucumber/cartridge-lifecycle-ruby19.feature +41 -0
- data/test/cucumber/cartridge-mongodb.feature +31 -0
- data/test/cucumber/cartridge-mysql.feature +30 -0
- data/test/cucumber/cartridge-php.feature +14 -0
- data/test/cucumber/cartridge-phpmyadmin.feature +32 -0
- data/test/cucumber/cartridge-postgresql.feature +32 -0
- data/test/cucumber/cartridge-runtime-extended-db.feature +64 -0
- data/test/cucumber/cartridge-runtime-extended-jboss.feature +24 -0
- data/test/cucumber/cartridge-runtime-extended-nodejs.feature +21 -0
- data/test/cucumber/cartridge-runtime-extended-perl.feature +18 -0
- data/test/cucumber/cartridge-runtime-extended-php.feature +19 -0
- data/test/cucumber/cartridge-runtime-extended-python.feature +18 -0
- data/test/cucumber/cartridge-runtime-extended-ruby.feature +22 -0
- data/test/cucumber/cartridge-runtime-standard-diy.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-jbossas.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-jbosseap.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-jbossews10.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-jenkins.feature +8 -0
- data/test/cucumber/cartridge-runtime-standard-nodejs.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-perl.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-php.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-python.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-ruby.feature +19 -0
- data/test/cucumber/cartridge-switchyard.feature +36 -0
- data/test/cucumber/descriptor.feature +40 -0
- data/test/cucumber/embedded.feature +44 -0
- data/test/cucumber/idler.feature +75 -0
- data/test/cucumber/misc/descriptor/manifest.yml +22 -0
- data/test/cucumber/misc/php/db_test.php +21 -0
- data/test/cucumber/openshift-node.feature +21 -0
- data/test/cucumber/rest-application-templates.feature +31 -0
- data/test/cucumber/rest-applications.feature +431 -0
- data/test/cucumber/rest-cartridge-types.feature +16 -0
- data/test/cucumber/rest-domains.feature +276 -0
- data/test/cucumber/rest-gears.feature +38 -0
- data/test/cucumber/rest-keys.feature +247 -0
- data/test/cucumber/rest-quickstarts.feature +27 -0
- data/test/cucumber/rest-workflow.feature +64 -0
- data/test/cucumber/step_definitions/api_steps.rb +369 -0
- data/test/cucumber/step_definitions/application-estimate-steps.rb +51 -0
- data/test/cucumber/step_definitions/application_steps.rb +215 -0
- data/test/cucumber/step_definitions/cartridge-10gen-mms-agent_steps.rb +11 -0
- data/test/cucumber/step_definitions/cartridge-cron_steps.rb +51 -0
- data/test/cucumber/step_definitions/cartridge-haproxy_steps.rb +30 -0
- data/test/cucumber/step_definitions/cartridge-jenkins_steps.rb +93 -0
- data/test/cucumber/step_definitions/cartridge-lifecycle-nodejs_steps.rb +30 -0
- data/test/cucumber/step_definitions/cartridge-mongodb_steps.rb +60 -0
- data/test/cucumber/step_definitions/cartridge-mysql_steps.rb +56 -0
- data/test/cucumber/step_definitions/cartridge-php_steps.rb +72 -0
- data/test/cucumber/step_definitions/cartridge-postgresql_steps.rb +59 -0
- data/test/cucumber/step_definitions/cartridge-switchyard_steps.rb +29 -0
- data/test/cucumber/step_definitions/client_steps.rb +12 -0
- data/test/cucumber/step_definitions/descriptor_step.rb +32 -0
- data/test/cucumber/step_definitions/idler_steps.rb +37 -0
- data/test/cucumber/step_definitions/node_steps.rb +203 -0
- data/test/cucumber/step_definitions/runtime_steps.rb +547 -0
- data/test/cucumber/step_definitions/runtime_url_steps.rb +46 -0
- data/test/cucumber/step_definitions/trap-user-extended_steps.rb +14 -0
- data/test/cucumber/step_definitions/trap-user_steps.rb +58 -0
- data/test/cucumber/support/00_setup_helper.rb +106 -0
- data/test/cucumber/support/app_helper.rb +243 -0
- data/test/cucumber/support/assertions.rb +52 -0
- data/test/cucumber/support/command_helper.rb +453 -0
- data/test/cucumber/support/dns_helper.rb +54 -0
- data/test/cucumber/support/env.rb +5 -0
- data/test/cucumber/support/process_helper.rb +44 -0
- data/test/cucumber/support/runtime_support.rb +440 -0
- data/test/cucumber/support/unused.rb +27 -0
- data/test/cucumber/support/user_helper.rb +37 -0
- data/test/cucumber/trap-user-extended.feature +53 -0
- data/test/cucumber/trap-user.feature +34 -0
- data/test/ddns/1.168.192-rev.db.init +13 -0
- data/test/ddns/HOWTO.txt +207 -0
- data/test/ddns/Kexample.com.+157+06142.key +1 -0
- data/test/ddns/Kexample.com.+157+06142.private +7 -0
- data/test/ddns/authconfig.rb +14 -0
- data/test/ddns/example.com.db.init +23 -0
- data/test/ddns/example.com.key +4 -0
- data/test/ddns/named.ca +52 -0
- data/test/ddns/named.conf +48 -0
- data/test/ddns/named.empty +10 -0
- data/test/ddns/named.localhost +10 -0
- data/test/ddns/named.loopback +11 -0
- data/test/ddns/named.rfc1912.zones +42 -0
- data/test/ddns/named.root.key +5 -0
- data/test/ddns/named_service.rb +127 -0
- data/test/unit/bind_dns_service_test.rb +167 -0
- data/test/unit/broker_auth_test.rb +28 -0
- metadata +545 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
When /^I provide application descriptor with name '([^\']*)' and dependencies:'([^\']*)' and groups:'([^\']*)'$/ do |app_name, dependencies, groups|
|
2
|
+
requires = "Requires:\n"
|
3
|
+
dependencies.split(",").each do |dep|
|
4
|
+
requires += " - #{dep}\n"
|
5
|
+
end
|
6
|
+
if !groups.empty?
|
7
|
+
groups = groups.split(";").map{ |grp| " - [#{grp}]"}
|
8
|
+
groups = groups.join("\n")
|
9
|
+
end
|
10
|
+
descriptor = "--- \nName: #{app_name}\n#{requires}"
|
11
|
+
descriptor += "GroupOverrides: \n#{groups}\n" if !groups.empty?
|
12
|
+
|
13
|
+
payload = {"descriptor" => descriptor}
|
14
|
+
url = @base_url + "/estimates/application"
|
15
|
+
@request = RestClient::Request.new(:method => :get, :url => url,
|
16
|
+
:user => @username, :password => @password, :headers => @headers,
|
17
|
+
:payload => payload)
|
18
|
+
|
19
|
+
begin
|
20
|
+
@response = @request.execute()
|
21
|
+
rescue => e
|
22
|
+
@response = e.response
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Then /^should get (\d) gears$/ do |num_gears|
|
27
|
+
page = JSON.parse(@response.body)
|
28
|
+
@gears = page["data"]
|
29
|
+
@gears.size.should be == num_gears.to_i
|
30
|
+
end
|
31
|
+
|
32
|
+
Then /^should get (\d) gear with '([^\']*)' component(s)?$/ do |num_gears, components, skip|
|
33
|
+
components = components.split(',')
|
34
|
+
matched_gears = 0
|
35
|
+
|
36
|
+
@gears.each do |g|
|
37
|
+
comps = []
|
38
|
+
g["components"].each do |comp|
|
39
|
+
comps.push comp['Name']
|
40
|
+
end
|
41
|
+
|
42
|
+
match = 0
|
43
|
+
components.each do |c|
|
44
|
+
break if !comps.include?(c)
|
45
|
+
match += 1
|
46
|
+
end
|
47
|
+
matched_gears += 1 if match == components.size
|
48
|
+
end if @gears
|
49
|
+
|
50
|
+
matched_gears.should be == num_gears.to_i
|
51
|
+
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'uri'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
include AppHelper
|
6
|
+
|
7
|
+
Given /^an existing (.+) application with an embedded (.*) cartridge$/ do |type, embed|
|
8
|
+
TestApp.find_on_fs.each do |app|
|
9
|
+
if app.type == type and app.embed.include?(embed)
|
10
|
+
@app = app
|
11
|
+
break
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
@app.should_not be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
Given /^an existing (.+) application( without an embedded cartridge)?$/ do |type, ignore|
|
19
|
+
TestApp.find_on_fs.each do |app|
|
20
|
+
if app.type == type and app.embed.empty?
|
21
|
+
@app = app
|
22
|
+
@app.update_jenkins_info if type.start_with?("jenkins")
|
23
|
+
break
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
@app.should_not be_nil
|
28
|
+
end
|
29
|
+
|
30
|
+
Given /^a new client created (.+) application$/ do |type|
|
31
|
+
@app = TestApp.create_unique(type)
|
32
|
+
register_user(@app.login, @app.password) if $registration_required
|
33
|
+
if rhc_create_domain(@app)
|
34
|
+
rhc_create_app(@app)
|
35
|
+
end
|
36
|
+
raise "Could not create domain: #{@app.create_domain_code}" unless @app.create_domain_code == 0
|
37
|
+
raise "Could not create application #{@app.create_app_code}" unless @app.create_app_code == 0
|
38
|
+
end
|
39
|
+
|
40
|
+
When /^(\d+) (.+) applications are created$/ do |app_count, type|
|
41
|
+
# Create our domain and apps
|
42
|
+
@apps = app_count.to_i.times.collect do
|
43
|
+
app = TestApp.create_unique(type)
|
44
|
+
register_user(app.login, app.password) if $registration_required
|
45
|
+
if rhc_create_domain(app)
|
46
|
+
rhc_create_app(app)
|
47
|
+
app.update_jenkins_info if type.start_with?("jenkins")
|
48
|
+
end
|
49
|
+
raise "Could not create domain: #{app.create_domain_code}" unless app.create_domain_code == 0
|
50
|
+
raise "Could not create application #{app.create_app_code}" unless app.create_app_code == 0
|
51
|
+
app
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
When /^the submodule is added$/ do
|
56
|
+
Dir.chdir(@app.repo) do
|
57
|
+
# Add a submodule created in devenv and link the index file
|
58
|
+
run("git submodule add /root/submodule_test_repo")
|
59
|
+
run("REPLACE=`cat submodule_test_repo/index`; sed -i \"s/OpenShift/${REPLACE}/\" #{@app.get_index_file}")
|
60
|
+
run("git commit -a -m 'Test submodule change'")
|
61
|
+
run("git push >> " + @app.get_log("git_push") + " 2>&1")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
When /^the embedded (.*) cartridge is added$/ do |type|
|
66
|
+
rhc_embed_add(@app, type)
|
67
|
+
end
|
68
|
+
|
69
|
+
When /^the embedded (.*) cartridge is removed$/ do |type|
|
70
|
+
rhc_embed_remove(@app, type)
|
71
|
+
end
|
72
|
+
|
73
|
+
When /^the application is changed$/ do
|
74
|
+
Dir.chdir(@app.repo) do
|
75
|
+
@update = "TEST"
|
76
|
+
|
77
|
+
# Make a change to the app index file
|
78
|
+
run("sed -i 's/Welcome/#{@update}/' #{@app.get_index_file}")
|
79
|
+
run("git commit -a -m 'Test change'")
|
80
|
+
run("git push >> " + @app.get_log("git_push") + " 2>&1")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
When /^the application uses mysql$/ do
|
85
|
+
# the mysql file path is NOT relative to the app repo
|
86
|
+
# so, fetch the mysql file before the Dir.chdir
|
87
|
+
mysql_file = @app.get_mysql_file
|
88
|
+
|
89
|
+
Dir.chdir(@app.repo) do
|
90
|
+
# Copy the MySQL file over the index and replace the variables
|
91
|
+
FileUtils.cp mysql_file, @app.get_index_file
|
92
|
+
|
93
|
+
# Make a change to the app index file
|
94
|
+
run("sed -i 's/HOSTNAME/#{@app.mysql_hostname}/' #{@app.get_index_file}")
|
95
|
+
run("sed -i 's/USER/#{@app.mysql_user}/' #{@app.get_index_file}")
|
96
|
+
run("sed -i 's/PASSWORD/#{@app.mysql_password}/' #{@app.get_index_file}")
|
97
|
+
run("git commit -a -m 'Test change'")
|
98
|
+
run("git push >> " + @app.get_log("git_push_mysql") + " 2>&1")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
When /^the application is stopped$/ do
|
103
|
+
rhc_ctl_stop(@app)
|
104
|
+
end
|
105
|
+
|
106
|
+
When /^the application is started$/ do
|
107
|
+
rhc_ctl_start(@app)
|
108
|
+
end
|
109
|
+
|
110
|
+
When /^the application is aliased$/ do
|
111
|
+
rhc_add_alias(@app)
|
112
|
+
end
|
113
|
+
|
114
|
+
When /^the application is unaliased$/ do
|
115
|
+
rhc_remove_alias(@app)
|
116
|
+
end
|
117
|
+
|
118
|
+
When /^the application is restarted$/ do
|
119
|
+
rhc_ctl_restart(@app)
|
120
|
+
end
|
121
|
+
|
122
|
+
When /^the application is destroyed$/ do
|
123
|
+
rhc_ctl_destroy(@app)
|
124
|
+
end
|
125
|
+
|
126
|
+
When /^the application namespace is updated$/ do
|
127
|
+
rhc_update_namespace(@app)
|
128
|
+
end
|
129
|
+
|
130
|
+
When /^I snapshot the application$/ do
|
131
|
+
rhc_snapshot(@app)
|
132
|
+
File.exist?(@app.snapshot).should be_true
|
133
|
+
File.size(@app.snapshot).should > 0
|
134
|
+
end
|
135
|
+
|
136
|
+
When /^I tidy the application$/ do
|
137
|
+
rhc_tidy(@app)
|
138
|
+
end
|
139
|
+
|
140
|
+
When /^I restore the application$/ do
|
141
|
+
assert_file_exists @app.snapshot
|
142
|
+
File.size(@app.snapshot).should > 0
|
143
|
+
|
144
|
+
file_list = `tar ztf #{@app.snapshot}`
|
145
|
+
["#{@app.name}_ctl.sh", "openshift.conf", "httpd.pid"].each {|file|
|
146
|
+
assert ! file_list.include?(file), "Found illegal file \'#{file} in snapshot"
|
147
|
+
}
|
148
|
+
assert file_list.include?('app-root/runtime'), "Snapshot missing required files"
|
149
|
+
|
150
|
+
rhc_restore(@app)
|
151
|
+
end
|
152
|
+
|
153
|
+
Then /^the application should respond to the alias$/ do
|
154
|
+
@app.is_accessible?(false, 120, "#{@app.name}-#{@app.namespace}.#{$alias_domain}").should be_true
|
155
|
+
end
|
156
|
+
|
157
|
+
Then /^the applications should be accessible?$/ do
|
158
|
+
@apps.each do |app|
|
159
|
+
app.is_accessible?.should be_true
|
160
|
+
app.is_accessible?(true).should be_true
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
Then /^the applications should be temporarily unavailable$/ do
|
165
|
+
@apps.each do |app|
|
166
|
+
app.is_temporarily_unavailable?.should be_true
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
Then /^the mysql response is successful$/ do
|
171
|
+
60.times do |i|
|
172
|
+
body = @app.connect
|
173
|
+
break if body and body =~ /Success/
|
174
|
+
sleep 1
|
175
|
+
end
|
176
|
+
|
177
|
+
# Check for Success
|
178
|
+
body = @app.connect
|
179
|
+
body.should match(/Success/)
|
180
|
+
end
|
181
|
+
|
182
|
+
Then /^it should be updated successfully$/ do
|
183
|
+
60.times do |i|
|
184
|
+
body = @app.connect
|
185
|
+
break if body and body =~ /#{@update}/
|
186
|
+
sleep 1
|
187
|
+
end
|
188
|
+
|
189
|
+
# Make sure the update is present
|
190
|
+
body = @app.connect
|
191
|
+
body.should_not be_nil
|
192
|
+
body.should match(/#{@update}/)
|
193
|
+
end
|
194
|
+
|
195
|
+
Then /^the submodule should be deployed successfully$/ do
|
196
|
+
60.times do |i|
|
197
|
+
body = @app.connect
|
198
|
+
break if body and body =~ /Submodule/
|
199
|
+
sleep 1
|
200
|
+
end
|
201
|
+
|
202
|
+
# Make sure the update is present
|
203
|
+
body = @app.connect
|
204
|
+
body.should_not be_nil
|
205
|
+
body.should match(/Submodule/)
|
206
|
+
end
|
207
|
+
|
208
|
+
Then /^the application should be accessible$/ do
|
209
|
+
@app.is_accessible?.should be_true
|
210
|
+
@app.is_accessible?(true).should be_true
|
211
|
+
end
|
212
|
+
|
213
|
+
Then /^the application should not be accessible$/ do
|
214
|
+
@app.is_inaccessible?.should be_true
|
215
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
Given /^an agent settings.py file is created$/ do
|
4
|
+
filepath = "/var/lib/openshift/#{@gear.uuid}/app-root/repo/.openshift/mms/settings.py"
|
5
|
+
|
6
|
+
system("mkdir -p /var/lib/openshift/#{@gear.uuid}/app-root/repo/.openshift/mms > /dev/null")
|
7
|
+
system("cp /usr/local/share/mms-agent/settings.py #{filepath} > /dev/null")
|
8
|
+
system("chown -R #{@gear.container.user.uid}:#{@gear.container.user.uid} /var/lib/openshift/#{@gear.uuid}/app-root/repo/.openshift/mms/")
|
9
|
+
|
10
|
+
assert_file_exists filepath
|
11
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
Given /^cron is (running|stopped)$/ do | status |
|
4
|
+
cron_cart = @gear.carts['cron-1.4']
|
5
|
+
|
6
|
+
cron_user_root = "#{$home_root}/#{@gear.uuid}/#{cron_cart.name}"
|
7
|
+
jobs_enabled_file = "#{cron_user_root}/run/jobs.enabled"
|
8
|
+
|
9
|
+
mark_exists = File.exists? jobs_enabled_file
|
10
|
+
$logger.info("Checking for cron jobs marker file at #{jobs_enabled_file}: #{mark_exists}")
|
11
|
+
|
12
|
+
if 'running' == status
|
13
|
+
if not mark_exists
|
14
|
+
cron_cart.start
|
15
|
+
end
|
16
|
+
exit_test = lambda {|f| ! File.exists? f}
|
17
|
+
else
|
18
|
+
if mark_exists
|
19
|
+
cron_cart.stop
|
20
|
+
end
|
21
|
+
exit_test = lambda {|f| File.exists? f}
|
22
|
+
end
|
23
|
+
|
24
|
+
$logger.info("Checking for cron jobs marker file at #{jobs_enabled_file}")
|
25
|
+
OpenShift::timeout(30) do
|
26
|
+
while exit_test.call(jobs_enabled_file)
|
27
|
+
sleep 1
|
28
|
+
$logger.info("Waiting for marker file to exist at #{marker_file}")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
if 'running' == status
|
33
|
+
assert_file_exists jobs_enabled_file
|
34
|
+
else
|
35
|
+
assert_file_not_exists jobs_enabled_file
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
Then /^cron jobs will( not)? be enabled$/ do | negate |
|
40
|
+
cron_cart = @gear.carts['cron-1.4']
|
41
|
+
|
42
|
+
cron_user_root = "#{$home_root}/#{@gear.uuid}/#{cron_cart.name}"
|
43
|
+
jobs_enabled_file = "#{cron_user_root}/run/jobs.enabled"
|
44
|
+
|
45
|
+
$logger.info("Checking for cron jobs marker at #{jobs_enabled_file}")
|
46
|
+
if negate
|
47
|
+
assert_file_not_exists jobs_enabled_file
|
48
|
+
else
|
49
|
+
assert_file_exists jobs_enabled_file
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# step descriptions for HAProxy cartridge behavior.
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
# Hack to ensure haproxy_ctld_daemon continues to work
|
6
|
+
ENV['BUNDLE_GEMFILE'] = nil
|
7
|
+
|
8
|
+
|
9
|
+
Then /^the haproxy PATH override will( not)? exist$/ do |negate|
|
10
|
+
path_location = "#{$home_root}/#{@gear.uuid}/.env/PATH"
|
11
|
+
|
12
|
+
path_override = open(path_location).grep(/haproxy-1.4/)[0]
|
13
|
+
|
14
|
+
unless negate
|
15
|
+
path_override.should be_a(String)
|
16
|
+
else
|
17
|
+
path_override.should be_nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^the haproxy configuration file will( not)? exist$/ do |negate|
|
22
|
+
haproxy_user_root = "#{$home_root}/#{@gear.uuid}/haproxy-1.4"
|
23
|
+
haproxy_config_file = "#{haproxy_user_root}/conf/haproxy.cfg.template"
|
24
|
+
|
25
|
+
if negate
|
26
|
+
assert_file_not_exists haproxy_config_file
|
27
|
+
else
|
28
|
+
assert_file_exists haproxy_config_file
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'json'
|
4
|
+
require 'logger'
|
5
|
+
require 'open4'
|
6
|
+
require 'pp'
|
7
|
+
require 'rest-client'
|
8
|
+
|
9
|
+
include AppHelper
|
10
|
+
|
11
|
+
When /^I configure a hello_world diy application with jenkins enabled$/ do
|
12
|
+
@app = TestApp.create_unique('diy-0.1', 'diy')
|
13
|
+
run "echo -e \"Host #{@app.hostname}\n\tStrictHostKeyChecking no\n\" >> ~/.ssh/config"
|
14
|
+
|
15
|
+
register_user(@app.login, @app.password) if $registration_required
|
16
|
+
if rhc_create_domain(@app)
|
17
|
+
@diy_app = rhc_create_app(@app, false, '--enable-jenkins --timeout=120')
|
18
|
+
@diy_app.create_app_code.should be == 0
|
19
|
+
else
|
20
|
+
raise "Failed to create domain: #{@app}"
|
21
|
+
end
|
22
|
+
|
23
|
+
@app.update_jenkins_info
|
24
|
+
|
25
|
+
response = `#{@app.jenkins_build}`
|
26
|
+
$logger.debug "@jenkins_build response = [#{response}]"
|
27
|
+
|
28
|
+
job = JSON.parse(response)
|
29
|
+
|
30
|
+
job.should_not be_nil
|
31
|
+
job['name'].should be == 'diy-build', "#{job['name']} not equal to diy-build"
|
32
|
+
job['color'].should be == 'grey', "job #{job['name']} has already been run."
|
33
|
+
end
|
34
|
+
|
35
|
+
When /^I push an update to the diy application$/ do
|
36
|
+
output = `awk <#{$temp}/cucumber.log '/^ *Git URL.*diy.git.$/ {print $NF}'`.split("\n")
|
37
|
+
@diy_git_url = output[-1]
|
38
|
+
$logger.debug "git url: #{@diy_git_url}"
|
39
|
+
assert_not_nil @diy_git_url, "Failed to find Git URL for diy application"
|
40
|
+
|
41
|
+
FileUtils.rm_rf 'diy' if File.exists? 'diy'
|
42
|
+
assert_directory_not_exists 'diy'
|
43
|
+
|
44
|
+
exit_code = run "git clone #{@diy_git_url} diy"
|
45
|
+
assert_equal 0, exit_code, "Failed to clone diy repo"
|
46
|
+
|
47
|
+
Dir.chdir("diy") do
|
48
|
+
exit_code = run "sed -i 's/Welcome to OpenShift/Jenkins Builder Testing/' diy/index.html"
|
49
|
+
assert_equal 0, exit_code, "Failed to update diy/index.html"
|
50
|
+
|
51
|
+
exit_code = run "git commit -a -m 'force build'"
|
52
|
+
assert_equal 0, exit_code, "Failed to commit update to diy/index.html"
|
53
|
+
|
54
|
+
exit_code = -1
|
55
|
+
begin
|
56
|
+
Timeout::timeout(300) do
|
57
|
+
exit_code = run "git push"
|
58
|
+
end
|
59
|
+
rescue Timeout::Error
|
60
|
+
$logger.warn "Timed out during git push. Usually means jenkins cartridge failing"
|
61
|
+
raise
|
62
|
+
rescue => e
|
63
|
+
$logger.error "Unexpected exception #{e.class} during git push: #{e.message}\n#{e.backtrace.join("\n")}"
|
64
|
+
raise
|
65
|
+
end
|
66
|
+
assert_equal 0, exit_code, "Failed to push update to diy/index.html"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
Then /^the application will be updated$/ do
|
71
|
+
# wait for ball to change blue...
|
72
|
+
job = {'color' => 'purple'}
|
73
|
+
OpenShift::timeout(300) do
|
74
|
+
begin
|
75
|
+
sleep 1
|
76
|
+
response = `#{@app.jenkins_build}`
|
77
|
+
$logger.debug "@jenkins_build response = #{response}"
|
78
|
+
|
79
|
+
job = JSON.parse(response)
|
80
|
+
end while job['color'] != 'blue'
|
81
|
+
end
|
82
|
+
job['color'].should be == 'blue'
|
83
|
+
|
84
|
+
app_uuid = @diy_git_url.match(TestApp::SSH_OUTPUT_PATTERN)[1]
|
85
|
+
path = "/var/lib/openshift/#{app_uuid}/app-root/repo/#{@app.name}/index.html"
|
86
|
+
$logger.debug "jenkins built application path = #{path}"
|
87
|
+
`grep 'Jenkins Builder Testing' "#{path}"`
|
88
|
+
$?.to_i.should be == 0
|
89
|
+
end
|
90
|
+
|
91
|
+
Then /^I deconfigure the diy application with jenkins enabled$/ do
|
92
|
+
rhc_ctl_destroy(@app, false)
|
93
|
+
end
|