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.

Files changed (180) hide show
  1. data/COPYRIGHT +1 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +12 -0
  4. data/README.md +3 -0
  5. data/Rakefile +9 -0
  6. data/app/controllers/app_events_controller.rb +115 -0
  7. data/app/controllers/application_templates_controller.rb +19 -0
  8. data/app/controllers/applications_controller.rb +214 -0
  9. data/app/controllers/base_controller.rb +367 -0
  10. data/app/controllers/cartridges_controller.rb +48 -0
  11. data/app/controllers/descriptors_controller.rb +23 -0
  12. data/app/controllers/dns_resolvable_controller.rb +35 -0
  13. data/app/controllers/domains_controller.rb +156 -0
  14. data/app/controllers/emb_cart_controller.rb +276 -0
  15. data/app/controllers/emb_cart_events_controller.rb +52 -0
  16. data/app/controllers/environment_controller.rb +11 -0
  17. data/app/controllers/estimates_controller.rb +71 -0
  18. data/app/controllers/gear_groups_controller.rb +53 -0
  19. data/app/controllers/gears_controller.rb +70 -0
  20. data/app/controllers/keys_controller.rb +96 -0
  21. data/app/controllers/legacy_broker_controller.rb +510 -0
  22. data/app/controllers/quickstarts_controller.rb +29 -0
  23. data/app/controllers/user_controller.rb +38 -0
  24. data/app/helpers/cartridge_helper.rb +25 -0
  25. data/app/helpers/legacy_broker_helper.rb +21 -0
  26. data/app/helpers/user_action_logger.rb +38 -0
  27. data/app/models/application.rb +1718 -0
  28. data/app/models/application_template.rb +27 -0
  29. data/app/models/cartridge_cache.rb +51 -0
  30. data/app/models/cloud_user.rb +334 -0
  31. data/app/models/component_instance.rb +228 -0
  32. data/app/models/connection_endpoint.rb +10 -0
  33. data/app/models/district.rb +210 -0
  34. data/app/models/domain.rb +234 -0
  35. data/app/models/gear.rb +376 -0
  36. data/app/models/group_instance.rb +306 -0
  37. data/app/models/key.rb +20 -0
  38. data/app/models/legacy_reply.rb +15 -0
  39. data/app/models/legacy_request.rb +126 -0
  40. data/app/models/link.rb +11 -0
  41. data/app/models/message.rb +10 -0
  42. data/app/models/name_server_cache.rb +46 -0
  43. data/app/models/optional_param.rb +12 -0
  44. data/app/models/param.rb +13 -0
  45. data/app/models/remote_job.rb +57 -0
  46. data/app/models/rest_application.rb +126 -0
  47. data/app/models/rest_application10.rb +106 -0
  48. data/app/models/rest_application12.rb +124 -0
  49. data/app/models/rest_application_estimate.rb +12 -0
  50. data/app/models/rest_application_template.rb +20 -0
  51. data/app/models/rest_cartridge10.rb +41 -0
  52. data/app/models/rest_cartridge11.rb +151 -0
  53. data/app/models/rest_domain.rb +43 -0
  54. data/app/models/rest_domain10.rb +42 -0
  55. data/app/models/rest_estimates.rb +16 -0
  56. data/app/models/rest_gear.rb +14 -0
  57. data/app/models/rest_gear_group.rb +26 -0
  58. data/app/models/rest_key.rb +24 -0
  59. data/app/models/rest_reply.rb +31 -0
  60. data/app/models/rest_user.rb +43 -0
  61. data/app/models/result_io.rb +67 -0
  62. data/app/models/usage_record.rb +37 -0
  63. data/app/models/validators/app_validator.rb +30 -0
  64. data/app/models/validators/key_validator.rb +30 -0
  65. data/app/models/validators/namespace_validator.rb +18 -0
  66. data/config/routes.rb +36 -0
  67. data/lib/controller_engine.rb +7 -0
  68. data/lib/openshift-origin-controller.rb +14 -0
  69. data/lib/openshift/application_container_proxy.rb +241 -0
  70. data/lib/openshift/auth_service.rb +101 -0
  71. data/lib/openshift/data_store.rb +33 -0
  72. data/lib/openshift/dns_service.rb +41 -0
  73. data/lib/openshift/mongo_data_store.rb +671 -0
  74. data/openshift-origin-controller.gemspec +42 -0
  75. data/rubygem-openshift-origin-controller.spec +274 -0
  76. data/test/cucumber/application-estimate.feature +25 -0
  77. data/test/cucumber/cartridge-10gen-mms-agent.feature +28 -0
  78. data/test/cucumber/cartridge-cron.feature +32 -0
  79. data/test/cucumber/cartridge-haproxy.feature +31 -0
  80. data/test/cucumber/cartridge-jenkins-build.feature +12 -0
  81. data/test/cucumber/cartridge-jenkins-client.feature +10 -0
  82. data/test/cucumber/cartridge-lifecycle-diy.feature +21 -0
  83. data/test/cucumber/cartridge-lifecycle-jbossas.feature +61 -0
  84. data/test/cucumber/cartridge-lifecycle-jbosseap.feature +61 -0
  85. data/test/cucumber/cartridge-lifecycle-jbossews10.feature +61 -0
  86. data/test/cucumber/cartridge-lifecycle-jenkins.feature +41 -0
  87. data/test/cucumber/cartridge-lifecycle-nodejs.feature +59 -0
  88. data/test/cucumber/cartridge-lifecycle-perl.feature +40 -0
  89. data/test/cucumber/cartridge-lifecycle-php.feature +106 -0
  90. data/test/cucumber/cartridge-lifecycle-python.feature +40 -0
  91. data/test/cucumber/cartridge-lifecycle-ruby18.feature +49 -0
  92. data/test/cucumber/cartridge-lifecycle-ruby19.feature +41 -0
  93. data/test/cucumber/cartridge-mongodb.feature +31 -0
  94. data/test/cucumber/cartridge-mysql.feature +30 -0
  95. data/test/cucumber/cartridge-php.feature +14 -0
  96. data/test/cucumber/cartridge-phpmyadmin.feature +32 -0
  97. data/test/cucumber/cartridge-postgresql.feature +32 -0
  98. data/test/cucumber/cartridge-runtime-extended-db.feature +64 -0
  99. data/test/cucumber/cartridge-runtime-extended-jboss.feature +24 -0
  100. data/test/cucumber/cartridge-runtime-extended-nodejs.feature +21 -0
  101. data/test/cucumber/cartridge-runtime-extended-perl.feature +18 -0
  102. data/test/cucumber/cartridge-runtime-extended-php.feature +19 -0
  103. data/test/cucumber/cartridge-runtime-extended-python.feature +18 -0
  104. data/test/cucumber/cartridge-runtime-extended-ruby.feature +22 -0
  105. data/test/cucumber/cartridge-runtime-standard-diy.feature +6 -0
  106. data/test/cucumber/cartridge-runtime-standard-jbossas.feature +7 -0
  107. data/test/cucumber/cartridge-runtime-standard-jbosseap.feature +7 -0
  108. data/test/cucumber/cartridge-runtime-standard-jbossews10.feature +7 -0
  109. data/test/cucumber/cartridge-runtime-standard-jenkins.feature +8 -0
  110. data/test/cucumber/cartridge-runtime-standard-nodejs.feature +7 -0
  111. data/test/cucumber/cartridge-runtime-standard-perl.feature +6 -0
  112. data/test/cucumber/cartridge-runtime-standard-php.feature +6 -0
  113. data/test/cucumber/cartridge-runtime-standard-python.feature +6 -0
  114. data/test/cucumber/cartridge-runtime-standard-ruby.feature +19 -0
  115. data/test/cucumber/cartridge-switchyard.feature +36 -0
  116. data/test/cucumber/descriptor.feature +40 -0
  117. data/test/cucumber/embedded.feature +44 -0
  118. data/test/cucumber/idler.feature +75 -0
  119. data/test/cucumber/misc/descriptor/manifest.yml +22 -0
  120. data/test/cucumber/misc/php/db_test.php +21 -0
  121. data/test/cucumber/openshift-node.feature +21 -0
  122. data/test/cucumber/rest-application-templates.feature +31 -0
  123. data/test/cucumber/rest-applications.feature +431 -0
  124. data/test/cucumber/rest-cartridge-types.feature +16 -0
  125. data/test/cucumber/rest-domains.feature +276 -0
  126. data/test/cucumber/rest-gears.feature +38 -0
  127. data/test/cucumber/rest-keys.feature +247 -0
  128. data/test/cucumber/rest-quickstarts.feature +27 -0
  129. data/test/cucumber/rest-workflow.feature +64 -0
  130. data/test/cucumber/step_definitions/api_steps.rb +369 -0
  131. data/test/cucumber/step_definitions/application-estimate-steps.rb +51 -0
  132. data/test/cucumber/step_definitions/application_steps.rb +215 -0
  133. data/test/cucumber/step_definitions/cartridge-10gen-mms-agent_steps.rb +11 -0
  134. data/test/cucumber/step_definitions/cartridge-cron_steps.rb +51 -0
  135. data/test/cucumber/step_definitions/cartridge-haproxy_steps.rb +30 -0
  136. data/test/cucumber/step_definitions/cartridge-jenkins_steps.rb +93 -0
  137. data/test/cucumber/step_definitions/cartridge-lifecycle-nodejs_steps.rb +30 -0
  138. data/test/cucumber/step_definitions/cartridge-mongodb_steps.rb +60 -0
  139. data/test/cucumber/step_definitions/cartridge-mysql_steps.rb +56 -0
  140. data/test/cucumber/step_definitions/cartridge-php_steps.rb +72 -0
  141. data/test/cucumber/step_definitions/cartridge-postgresql_steps.rb +59 -0
  142. data/test/cucumber/step_definitions/cartridge-switchyard_steps.rb +29 -0
  143. data/test/cucumber/step_definitions/client_steps.rb +12 -0
  144. data/test/cucumber/step_definitions/descriptor_step.rb +32 -0
  145. data/test/cucumber/step_definitions/idler_steps.rb +37 -0
  146. data/test/cucumber/step_definitions/node_steps.rb +203 -0
  147. data/test/cucumber/step_definitions/runtime_steps.rb +547 -0
  148. data/test/cucumber/step_definitions/runtime_url_steps.rb +46 -0
  149. data/test/cucumber/step_definitions/trap-user-extended_steps.rb +14 -0
  150. data/test/cucumber/step_definitions/trap-user_steps.rb +58 -0
  151. data/test/cucumber/support/00_setup_helper.rb +106 -0
  152. data/test/cucumber/support/app_helper.rb +243 -0
  153. data/test/cucumber/support/assertions.rb +52 -0
  154. data/test/cucumber/support/command_helper.rb +453 -0
  155. data/test/cucumber/support/dns_helper.rb +54 -0
  156. data/test/cucumber/support/env.rb +5 -0
  157. data/test/cucumber/support/process_helper.rb +44 -0
  158. data/test/cucumber/support/runtime_support.rb +440 -0
  159. data/test/cucumber/support/unused.rb +27 -0
  160. data/test/cucumber/support/user_helper.rb +37 -0
  161. data/test/cucumber/trap-user-extended.feature +53 -0
  162. data/test/cucumber/trap-user.feature +34 -0
  163. data/test/ddns/1.168.192-rev.db.init +13 -0
  164. data/test/ddns/HOWTO.txt +207 -0
  165. data/test/ddns/Kexample.com.+157+06142.key +1 -0
  166. data/test/ddns/Kexample.com.+157+06142.private +7 -0
  167. data/test/ddns/authconfig.rb +14 -0
  168. data/test/ddns/example.com.db.init +23 -0
  169. data/test/ddns/example.com.key +4 -0
  170. data/test/ddns/named.ca +52 -0
  171. data/test/ddns/named.conf +48 -0
  172. data/test/ddns/named.empty +10 -0
  173. data/test/ddns/named.localhost +10 -0
  174. data/test/ddns/named.loopback +11 -0
  175. data/test/ddns/named.rfc1912.zones +42 -0
  176. data/test/ddns/named.root.key +5 -0
  177. data/test/ddns/named_service.rb +127 -0
  178. data/test/unit/bind_dns_service_test.rb +167 -0
  179. data/test/unit/broker_auth_test.rb +28 -0
  180. metadata +545 -0
@@ -0,0 +1,30 @@
1
+ require 'json'
2
+
3
+ When /^I add dependencies to (deplist.txt|package.json) on node modules(.*)$/ do |depfile, modules|
4
+ Dir.chdir(@app.repo) do
5
+ case depfile.strip
6
+ when "deplist.txt"
7
+ run("echo -e '#{modules.gsub(" ", "\n")}' >> ./deplist.txt")
8
+ when "package.json"
9
+ pkg = ""
10
+ File.open("package.json") { |f| pkg = JSON.parse(f.read) }
11
+ modules.split.each { |m| pkg['dependencies'][m] = "*" }
12
+ File.open("package.json", "w") { |f| f.write(JSON.dump(pkg)) }
13
+ end
14
+ run("git commit -a -m 'Test change'")
15
+ run("git push >> " + @app.get_log("git_push_nodejs_deps") + " 2>&1")
16
+ end
17
+ end
18
+
19
+ Then /^the application will have the (.*) node modules installed$/ do |modules|
20
+ app_dir = File.join("/var/lib/openshift", @app.uid, @app.type)
21
+ node_mods_dir = File.join(app_dir, "node_modules")
22
+ repo_mods_dir = File.join(app_dir, "repo", "node_modules")
23
+ modules.split.each do |m|
24
+ if !File.directory?(File.join(node_mods_dir, m)) &&
25
+ !File.directory?(File.join(repo_mods_dir, m))
26
+ raise "Missing node_modules dir for #{m}"
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,60 @@
1
+ # step descriptions for MongoDB cartridge behavior.
2
+
3
+ require 'mongo'
4
+ require 'fileutils'
5
+
6
+ Then /^the mongodb configuration file will( not)? exist$/ do |negate|
7
+ cart = @gear.carts['mongodb-2.2']
8
+ user_root = "#{$home_root}/#{@gear.uuid}/#{cart.name}"
9
+ config_file = "#{user_root}/etc/mongodb.conf"
10
+
11
+ begin
12
+ cnffile = File.new config_file
13
+ rescue Errno::ENOENT
14
+ cnffile = nil
15
+ end
16
+
17
+ unless negate
18
+ cnffile.should be_a(File)
19
+ else
20
+ cnffile.should be_nil
21
+ end
22
+ end
23
+
24
+
25
+ Then /^the mongodb database will( not)? +exist$/ do |negate|
26
+ cart = @gear.carts['mongodb-2.2']
27
+ user_root = "#{$home_root}/#{@gear.uuid}/#{cart.name}"
28
+ config_file = "#{user_root}/etc/mongodb.conf"
29
+ data_dir = "#{user_root}/data/"
30
+
31
+ begin
32
+ datadir = Dir.new data_dir
33
+ rescue Errno::ENOENT
34
+ datadir = nil
35
+ end
36
+
37
+ unless negate
38
+ datadir.should include "#{@app.name}.0"
39
+ datadir.should include "#{@app.name}.ns"
40
+ datadir.should include "mongod.lock"
41
+ datadir.should include "admin.0"
42
+ datadir.should include "admin.ns"
43
+ else
44
+ datadir.should be_nil
45
+ end
46
+ end
47
+
48
+ Then /^the mongodb admin user will have access$/ do
49
+ mongo_cart = @gear.carts['mongodb-2.2']
50
+
51
+ begin
52
+ dbh = Mongo::Connection.new(mongo_cart.db.ip.to_s).db(@app.name)
53
+ dbh.authenticate(mongo_cart.db.username.to_s, mongo_cart.db.password.to_s)
54
+ rescue Mongo::ConnectionError
55
+ dbh = nil
56
+ end
57
+
58
+ dbh.should be_a(Mongo::DB)
59
+ dbh.logout if dbh
60
+ end
@@ -0,0 +1,56 @@
1
+ # step descriptions for MySQL cartridge behavior.
2
+
3
+ require 'mysql'
4
+ require 'fileutils'
5
+
6
+ Then /^the mysql configuration file will( not)? exist$/ do |negate|
7
+ mysql_cart = @gear.carts['mysql-5.1']
8
+
9
+ mysql_user_root = "#{$home_root}/#{@gear.uuid}/#{mysql_cart.name}"
10
+ mysql_config_file = "#{mysql_user_root}/etc/my.cnf"
11
+
12
+ if negate
13
+ assert_file_not_exists mysql_config_file
14
+ else
15
+ assert_file_exists mysql_config_file
16
+ end
17
+ end
18
+
19
+
20
+ Then /^the mysql database will( not)? +exist$/ do |negate|
21
+ mysql_cart = @gear.carts['mysql-5.1']
22
+
23
+ mysql_user_root = "#{$home_root}/#{@gear.uuid}/#{mysql_cart.name}"
24
+ mysql_data_dir = "#{mysql_user_root}/data"
25
+
26
+ begin
27
+ datadir = Dir.new mysql_data_dir
28
+ rescue Errno::ENOENT
29
+ datadir = nil
30
+ end
31
+
32
+ unless negate
33
+ datadir.should include "ibdata1"
34
+ datadir.should include "ib_logfile0"
35
+ datadir.should include "mysql"
36
+ datadir.should include @app.name
37
+ else
38
+ datadir.should be_nil
39
+ end
40
+ end
41
+
42
+ Then /^the mysql admin user will have access$/ do
43
+ mysql_cart = @gear.carts['mysql-5.1']
44
+
45
+ begin
46
+ dbh = Mysql.real_connect(mysql_cart.db.ip,
47
+ mysql_cart.db.username,
48
+ mysql_cart.db.password,
49
+ 'mysql')
50
+ rescue Mysql::Error
51
+ dbh = nil
52
+ end
53
+
54
+ dbh.should be_a(Mysql)
55
+ dbh.close if dbh
56
+ end
@@ -0,0 +1,72 @@
1
+ # Steps specific to the php-5.3 cartridge.
2
+ require 'test/unit'
3
+ require 'test/unit/assertions'
4
+
5
+ include Test::Unit::Assertions
6
+
7
+ # NOTE: Assumes the test context is the basic steps provided
8
+ # by runtime_steps.rb
9
+ Then /^the php application will( not)? be aliased$/ do | negate |
10
+ good_status = negate ? 1 : 0
11
+
12
+ exit_status = -1
13
+ OpenShift::timeout(20) do
14
+ begin
15
+ sleep 1
16
+ command = "/usr/bin/curl -L -H 'Host: #{@app.name}.#{$alias_domain}' -s http://localhost/health_check.php | /bin/grep -q -e '^1$'"
17
+ exit_status = runcon command, $selinux_user, $selinux_role, $selinux_type
18
+ end while exit_status != good_status
19
+ end
20
+ exit_status.should == good_status
21
+ end
22
+
23
+ When /^I (expose-port|conceal-port) the php application$/ do |action|
24
+ @cart.run_hook action, 0
25
+ end
26
+
27
+ Then /^the php application will( not)? be exposed$/ do | negate |
28
+ exitcode, output = @cart.run_hook_output 'show-port', 0
29
+
30
+ if negate
31
+ assert_nil output[0].index('PROXY_PORT')
32
+ else
33
+ assert_not_nil output[0].index('PROXY_PORT')
34
+ end
35
+ end
36
+
37
+ Then /^the php file permissions are correct/ do
38
+ gear_uuid = @gear.uuid
39
+ app_home = "/var/lib/openshift/#{gear_uuid}"
40
+ uid = Etc.getpwnam(gear_uuid).uid
41
+ gid = Etc.getpwnam(gear_uuid).gid
42
+ mcs = get_mcs_level(uid)
43
+ se_context = "unconfined_u:object_r:openshift_var_lib_t:#{mcs}"
44
+ se_context2 = "unconfined_u:object_r:openshift_rw_file_t:#{mcs}"
45
+ # Configure files (relative to app_home)
46
+ configure_files = { "php-5.3" => ['root', 'root', '40755', se_context],
47
+ "php-5.3/" => ['root', 'root', '40755', se_context],
48
+ ".pearrc" => ['root', 'root', '100644', se_context],
49
+ "php-5.3/conf/" => ['root', 'root', '40755', se_context],
50
+ "php-5.3/conf/php.ini" => ['root', 'root', '100644', se_context],
51
+ "php-5.3/conf/magic" => ['root', 'root', '100644', se_context],
52
+ "php-5.3/conf.d/" => ['root', 'root', '40755', se_context],
53
+ "php-5.3/conf.d/openshift.conf" => ['root', 'root', '100644', se_context],
54
+ "app-root/data/" => [gear_uuid, gear_uuid, '40755', se_context2],
55
+ "php-5.3/logs/" => [gear_uuid, gear_uuid, '40755', se_context],
56
+ "php-5.3/phplib/pear/" => [gear_uuid, gear_uuid, '40755', se_context],
57
+ "app-root/data/" => [gear_uuid, gear_uuid, '40750', se_context2],
58
+ "app-root/repo/" => [gear_uuid, gear_uuid, '40750', se_context],
59
+ "php-5.3/run/" => [gear_uuid, gear_uuid, '40755', se_context],
60
+ "php-5.3/run/httpd.pid" => [gear_uuid, gear_uuid, '100644', se_context],
61
+ "app-root/repo/php/index.php" => [gear_uuid, gear_uuid, '100664', se_context],
62
+ "php-5.3/sessions/" => [gear_uuid, gear_uuid, '40755', se_context],
63
+ "php-5.3/tmp/" => [gear_uuid, gear_uuid, '40755', se_context]
64
+ }
65
+ configure_files.each do | file, permissions |
66
+ raise "Invalid permissions for #{file}" unless mode?("#{app_home}/#{file}", permissions[2])
67
+ raise "Invalid context for #{file}" unless context?("#{app_home}/#{file}", permissions[3])
68
+ target_uid = Etc.getpwnam(permissions[0]).uid.to_i
69
+ target_gid = Etc.getgrnam(permissions[1]).gid.to_i
70
+ raise "Invalid ownership for #{file}" unless owner?("#{app_home}/#{file}", target_uid, target_gid)
71
+ end
72
+ end
@@ -0,0 +1,59 @@
1
+ # step descriptions for PostgreSQL cartridge behavior.
2
+
3
+ require 'pg'
4
+ require 'fileutils'
5
+
6
+
7
+ Then /^the postgresql configuration file will( not)? exist$/ do |negate|
8
+ pgsql_cart = @gear.carts['postgresql-8.4']
9
+
10
+ pgsql_user_root = "#{$home_root}/#{@gear.uuid}/#{pgsql_cart.name}"
11
+ pgsql_config_file = "#{pgsql_user_root}/data/postgresql.conf"
12
+
13
+ if negate
14
+ assert_file_not_exists pgsql_config_file
15
+ else
16
+ assert_file_exists pgsql_config_file
17
+ end
18
+ end
19
+
20
+
21
+ Then /^the postgresql database will( not)? +exist$/ do |negate|
22
+ pgsql_cart = @gear.carts['postgresql-8.4']
23
+
24
+ pgsql_user_root = "#{$home_root}/#{@gear.uuid}/#{pgsql_cart.name}"
25
+ pgsql_data_dir = "#{pgsql_user_root}/data"
26
+
27
+ begin
28
+ datadir = Dir.new pgsql_data_dir
29
+ rescue Errno::ENOENT
30
+ datadir = nil
31
+ end
32
+
33
+ unless negate
34
+ datadir.should include "base"
35
+ datadir.should include "global"
36
+ datadir.should include "pg_clog"
37
+ datadir.should include "pg_log"
38
+ datadir.should include "pg_xlog"
39
+ else
40
+ datadir.should be_nil
41
+ end
42
+ end
43
+
44
+
45
+ Then /^the postgresql admin user will have access$/ do
46
+ pgsql_cart = @gear.carts['postgresql-8.4']
47
+
48
+ begin
49
+ # FIXME: For now use psql -- we should try programatically later.
50
+ dbconn = PGconn.connect(pgsql_cart.db.ip, 5432, '', '', 'postgres',
51
+ pgsql_cart.db.username, pgsql_cart.db.password)
52
+ rescue PGError
53
+ $logger.error("Couldn't connect to Postgres, ip=#{pgsql_cart.db.ip}, user=#{pgsql_cart.db.username}, pwd=#{pgsql_cart.db.password}")
54
+ dbconn = nil
55
+ end
56
+
57
+ dbconn.should be_a(PGconn)
58
+ dbconn.close if dbconn
59
+ end
@@ -0,0 +1,29 @@
1
+ # step descriptions for MySQL cartridge behavior.
2
+
3
+ require 'fileutils'
4
+
5
+ Then /^the eap module configuration file will( not)? exist$/ do |negate|
6
+
7
+ env_dir = "#{$home_root}/#{@gear.uuid}/.env"
8
+ module_config_file = "#{env_dir}/OPENSHIFT_JBOSSEAP_MODULE_PATH"
9
+
10
+ if negate
11
+ assert_file_not_exists module_config_file
12
+ else
13
+ assert_file_exists module_config_file
14
+ end
15
+ end
16
+
17
+ Then /^the as module configuration file will( not)? exist$/ do |negate|
18
+
19
+ env_dir = "#{$home_root}/#{@gear.uuid}/.env"
20
+ module_config_file = "#{env_dir}/OPENSHIFT_JBOSSAS_MODULE_PATH"
21
+
22
+ if negate
23
+ assert_file_not_exists module_config_file
24
+ else
25
+ assert_file_exists module_config_file
26
+ end
27
+ end
28
+
29
+
@@ -0,0 +1,12 @@
1
+ Given /^an accepted node$/ do
2
+ # TODO: Add any required checks here
3
+ end
4
+
5
+ Given /^the libra client tools$/ do
6
+ File.exists?($create_app_script).should be_true
7
+ File.exists?($create_domain_script).should be_true
8
+ File.exists?($client_config).should be_true
9
+ File.exists?($ctl_app_script).should be_true
10
+
11
+ File.exists?($rhc_script).should be_true
12
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'openshift-origin-controller'
3
+
4
+
5
+ When /^a descriptor file is provided$/ do
6
+ @descriptor_file = File.expand_path("../misc/descriptor/manifest.yml", File.expand_path(File.dirname(__FILE__)))
7
+ end
8
+
9
+ When /^the descriptor file is parsed as a cartridge$/ do
10
+ f = File.open(@descriptor_file)
11
+ @app = OpenShift::Cartridge.new.from_descriptor(YAML.load(f))
12
+ f.close
13
+ end
14
+
15
+ Then /^the descriptor profile exists$/ do
16
+ @app.default_profile.nil?.should be_false
17
+ end
18
+
19
+ Then /^atleast (\d+) group exists$/ do |count|
20
+ len = @app.profiles[0].groups.length
21
+ check = (len >= Integer(count))
22
+ check.should be_true
23
+ end
24
+
25
+ Then /^atleast (\d+) component exists$/ do |count|
26
+ g = @app.profiles[0].groups[0]
27
+ comp = @app.profiles[0].components(g.component_refs[0].component)
28
+ check = (not comp.nil?)
29
+ check.should be_true
30
+ end
31
+
32
+
@@ -0,0 +1,37 @@
1
+ # match against oo-idle and oo-restore to avoid conflict
2
+ When /^I oo-(idle|restore) the application$/ do |action|
3
+ cmd = nil
4
+
5
+ case action
6
+ when "idle"
7
+ cmd = "/usr/sbin/oo-idler -u #{@gear.uuid}"
8
+ when "restore"
9
+ cmd = "/usr/sbin/oo-restorer -u #{@gear.uuid}"
10
+ end
11
+
12
+ exit_code = run cmd
13
+ assert_equal 0, exit_code, "Failed to #{action} application running #{cmd}"
14
+ end
15
+
16
+ Then /^I record the active capacity( after idling)?$/ do |negate|
17
+ @active_capacity = `facter active_capacity`.to_f
18
+
19
+ if (negate)
20
+ # active capacity may be 0.0 after idling.
21
+ @active_capacity.should be >= 0.0
22
+ else
23
+ @active_capacity.should be > 0.0
24
+ end
25
+ end
26
+
27
+ Then /^the active capacity has been (reduced|increased)$/ do |change|
28
+ current_capacity = `facter active_capacity`.to_f
29
+ current_capacity.should be >= 0.0
30
+
31
+ case change
32
+ when "reduced"
33
+ @active_capacity.should be > current_capacity
34
+ when "increased"
35
+ @active_capacity.should be < current_capacity
36
+ end
37
+ end
@@ -0,0 +1,203 @@
1
+ #
2
+ #
3
+ # Steps that can be used to check applications installed on a server (node)
4
+ #
5
+ #require 'etc'
6
+
7
+ require 'open4'
8
+ require 'dnsruby'
9
+
10
+ # Controller cartridge command paths
11
+ $cartridge_root = '/usr/libexec/openshift/cartridges'
12
+ $controller_config_path = "oo-app-create"
13
+ $controller_config_format = "#{$controller_config_path} -c '%s' -a '%s' --with-namespace '%s' --with-app-name '%s'"
14
+ $controller_deconfig_path = "oo-app-destroy"
15
+ $controller_deconfig_format = "#{$controller_deconfig_path} -c '%s' -a '%s' --with-namespace '%s' --with-app-name '%s'"
16
+ $home_root = "/var/lib/openshift"
17
+
18
+ # --------------------------------------------------------------------------
19
+ # Account Checks
20
+ # --------------------------------------------------------------------------
21
+ # These must run after server_steps.rb: I create a <name> app for <framework>
22
+
23
+ # These depend on test data of this form:
24
+ # And the following test data
25
+ # | accountname
26
+ # | 00112233445566778899aabbccdde000
27
+
28
+
29
+ # copied from server-common/openshift/user.rb 20110630
30
+ def gen_small_uuid()
31
+ # Put config option for rhlogin here so we can ignore uuid for dev environments
32
+ %x[/usr/bin/uuidgen].gsub('-', '').strip
33
+ end
34
+
35
+ def gen_unique_login_and_namespace(namespace=nil)
36
+ if !namespace
37
+ chars = ("1".."9").to_a
38
+ namespace = "ci" + Array.new(8, '').collect{chars[rand(chars.size)]}.join
39
+ end
40
+ login = "cucumber-test_#{namespace}@example.com"
41
+ [ login, namespace ]
42
+ end
43
+
44
+ def gen_unique_app_name
45
+ chars = ("1".."9").to_a
46
+ "app" + Array.new(4, '').collect{chars[rand(chars.size)]}.join
47
+ end
48
+
49
+ Given /^a new gear with namespace "([^\"]*)" and app name "([^\"]*)"$/ do |namespace, name|
50
+ # generate a random account name and use the stock SSH keys
51
+ # generate a random UUID and use the stock keys
52
+ acctname = gen_small_uuid
53
+ login, namespace = gen_unique_login_and_namespace(namespace)
54
+ @account = {
55
+ 'accountname' => acctname,
56
+ 'login' => login,
57
+ 'namespace' => namespace,
58
+ 'appnames' => [ name ],
59
+ }
60
+
61
+ command = $controller_config_format % [acctname, acctname, namespace, name]
62
+ runcon(command, $selinux_user, $selinux_role, $selinux_type)
63
+
64
+ # get and store the account UID's by name
65
+ @account['uid'] = Etc.getpwnam(acctname).uid
66
+ end
67
+
68
+ Given /^a new guest account$/ do
69
+ # generate a random account name and use the stock SSH keys
70
+ # generate a random UUID and use the stock keys
71
+ acctname = gen_small_uuid
72
+ login, namespace = gen_unique_login_and_namespace
73
+ appname = gen_unique_app_name
74
+ @account = {
75
+ 'accountname' => acctname,
76
+ 'login' => login,
77
+ 'namespace' => namespace,
78
+ 'appnames' => [ appname ],
79
+ }
80
+
81
+ command = $controller_config_format % [acctname, acctname, namespace, appname]
82
+ runcon(command, $selinux_user, $selinux_role, $selinux_type)
83
+
84
+ # get and store the account UID's by name
85
+ @account['uid'] = Etc.getpwnam(acctname).uid
86
+ end
87
+
88
+ Given /^the guest account has no application installed$/ do
89
+ # Assume this is true
90
+ end
91
+
92
+ When /^I create a guest account$/ do
93
+ # call /usr/libexec/openshift/cartridges @table.hashes.each do |row|
94
+ # generate a random account name and use the stock SSH keys
95
+ # generate a random UUID and use the stock keys
96
+ acctname = gen_small_uuid
97
+ login, namespace = gen_unique_login_and_namespace
98
+ appname = gen_unique_app_name
99
+ @account = {
100
+ 'accountname' => acctname,
101
+ 'login' => login,
102
+ 'namespace' => namespace,
103
+ 'appnames' => [ appname ],
104
+ }
105
+
106
+ command = $controller_config_format % [acctname, acctname, namespace, appname]
107
+ runcon(command, $selinux_user, $selinux_role, $selinux_type)
108
+
109
+ # get and store the account UID's by name
110
+ @account['uid'] = Etc.getpwnam(acctname).uid
111
+ end
112
+
113
+ When /^I delete the guest account$/ do
114
+ # call /usr/libexec/openshift/cartridges @table.hashes.each do |row|
115
+
116
+ command = $controller_deconfig_format % [@account['accountname'],
117
+ @account['accountname'],
118
+ @account['namespace'],
119
+ @account['appnames'][0]]
120
+ runcon(command, $selinux_user, $selinux_role, $selinux_type)
121
+
122
+ end
123
+
124
+ When /^I create a new namespace$/ do
125
+ acctname = gen_small_uuid
126
+ login, namespace = gen_unique_login_and_namespace
127
+ @account = {
128
+ 'accountname' => acctname,
129
+ 'login' => login,
130
+ 'password' => 'xyz123',
131
+ 'namespace' => namespace
132
+ }
133
+ register_user(login, "xyz123") if $registration_required
134
+ ec = run("#{$rhc_script} domain create #{namespace} -l #{login} -p #{@account['password']} -d")
135
+ end
136
+
137
+ When /^I delete the namespace$/ do
138
+ ec = run("#{$rhc_script} domain destroy #{@account['namespace']} -l #{@account['login']} -p #{@account['password']} -d")
139
+ ec.should be == 0
140
+ end
141
+
142
+ Then /^a namespace should get deleted$/ do
143
+ res = Dnsruby::Resolver.new
144
+ begin
145
+ maxttl=300
146
+ minretry=5
147
+ Timeout::timeout(maxttl + 20) do
148
+ while true
149
+ Dnsruby::PacketSender.clear_caches
150
+ ret = res.query("#{@account['namespace']}.dev.rhcloud.com", Dnsruby::Types.TXT)
151
+ if ret.answer.length >= 1
152
+ if ret.answer[0].ttl > maxttl
153
+ retryin = maxttl
154
+ elsif ret.answer[0].ttl < minretry
155
+ retryin = minretry
156
+ else
157
+ retryin = ret.answer[0].ttl
158
+ end
159
+ else
160
+ retryin = maxttl
161
+ end
162
+ $logger.debug "The domain is still resolvable. Waiting for the TTL to expire in #{retryin} seconds."
163
+ sleep(retryin)
164
+ end
165
+ end
166
+ rescue Timeout::Error
167
+ $logger.warn "Timed out while waiting for the domain name to disappear."
168
+ raise
169
+ rescue Dnsruby::NXDomain
170
+ true
171
+ end
172
+ end
173
+
174
+ Then /^an account password entry should( not)? exist$/ do |negate|
175
+ # use @app['uuid'] for account name
176
+
177
+ begin
178
+ @pwent = Etc.getpwnam @account['accountname']
179
+ rescue
180
+ nil
181
+ end
182
+
183
+ if negate
184
+ @pwent.should be_nil
185
+ else
186
+ @pwent.should_not be_nil
187
+ end
188
+ end
189
+
190
+ Then /^an HTTP proxy config file should( not)? exist$/ do |negate|
191
+
192
+ end
193
+
194
+ Then /^an account home directory should( not)? exist$/ do |negate|
195
+ @homedir = File.directory? "#{$home_root}/#{@account['accountname']}"
196
+
197
+ if negate
198
+ @homedir.should_not be_true
199
+ else
200
+ @homedir.should be_true
201
+ end
202
+ end
203
+