openshift-origin-controller 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|