openshift-origin-console 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.
Files changed (291) hide show
  1. data/COPYRIGHT +1 -0
  2. data/Gemfile +21 -0
  3. data/LICENSE +203 -0
  4. data/README.md +123 -0
  5. data/Rakefile +44 -0
  6. data/app/assets/images/cartridge-edge.gif +0 -0
  7. data/app/assets/images/console/arrow-down.png +0 -0
  8. data/app/assets/images/console/console-sprite.png +0 -0
  9. data/app/assets/images/favicon-32.png +0 -0
  10. data/app/assets/images/loader-dark.gif +0 -0
  11. data/app/assets/images/loader.gif +0 -0
  12. data/app/assets/images/sprite-vert.png +0 -0
  13. data/app/assets/javascripts/console.js +10 -0
  14. data/app/assets/javascripts/console/form.js.coffee +51 -0
  15. data/app/assets/stylesheets/_alerts.scss +84 -0
  16. data/app/assets/stylesheets/_breadcrumbs.scss +31 -0
  17. data/app/assets/stylesheets/_buttons.scss +229 -0
  18. data/app/assets/stylesheets/_code.scss +86 -0
  19. data/app/assets/stylesheets/_custom.scss +207 -0
  20. data/app/assets/stylesheets/_footer.scss +54 -0
  21. data/app/assets/stylesheets/_forms.scss +710 -0
  22. data/app/assets/stylesheets/_grid.scss +28 -0
  23. data/app/assets/stylesheets/_input-prepend-append.scss +138 -0
  24. data/app/assets/stylesheets/_labels.scss +40 -0
  25. data/app/assets/stylesheets/_mixins.scss +76 -0
  26. data/app/assets/stylesheets/_override-variables.scss +1 -0
  27. data/app/assets/stylesheets/_responsive.scss +438 -0
  28. data/app/assets/stylesheets/_ribbon.scss +57 -0
  29. data/app/assets/stylesheets/_type.scss +306 -0
  30. data/app/assets/stylesheets/_utilities.scss +10 -0
  31. data/app/assets/stylesheets/_variables.scss +131 -0
  32. data/app/assets/stylesheets/common.css.scss +82 -0
  33. data/app/assets/stylesheets/console/_application.scss +194 -0
  34. data/app/assets/stylesheets/console/_base.scss +26 -0
  35. data/app/assets/stylesheets/console/_breadcrumbs.scss +32 -0
  36. data/app/assets/stylesheets/console/_buttons.scss +214 -0
  37. data/app/assets/stylesheets/console/_core.scss +1002 -0
  38. data/app/assets/stylesheets/console/_dropdowns.scss +63 -0
  39. data/app/assets/stylesheets/console/_help.scss +54 -0
  40. data/app/assets/stylesheets/console/_mixins.scss +11 -0
  41. data/app/assets/stylesheets/console/_navbar.scss +415 -0
  42. data/app/assets/stylesheets/console/_ribbon.scss +82 -0
  43. data/app/assets/stylesheets/console/_tile.scss +122 -0
  44. data/app/assets/stylesheets/origin.css.scss +37 -0
  45. data/app/controllers/account/dashboard.rb +13 -0
  46. data/app/controllers/account_controller.rb +3 -0
  47. data/app/controllers/application_types_controller.rb +80 -0
  48. data/app/controllers/applications_controller.rb +183 -0
  49. data/app/controllers/building_controller.rb +81 -0
  50. data/app/controllers/capability_aware.rb +18 -0
  51. data/app/controllers/cartridge_types_controller.rb +53 -0
  52. data/app/controllers/cartridges_controller.rb +43 -0
  53. data/app/controllers/console/auth/basic.rb +65 -0
  54. data/app/controllers/console/auth/none.rb +5 -0
  55. data/app/controllers/console/auth/remote_user.rb +69 -0
  56. data/app/controllers/console/rescue.rb +48 -0
  57. data/app/controllers/console_controller.rb +19 -0
  58. data/app/controllers/console_index_controller.rb +14 -0
  59. data/app/controllers/domain_aware.rb +26 -0
  60. data/app/controllers/domain_session_sweeper.rb +29 -0
  61. data/app/controllers/domains_controller.rb +30 -0
  62. data/app/controllers/keys_controller.rb +43 -0
  63. data/app/controllers/scaling_controller.rb +46 -0
  64. data/app/controllers/sshkey_aware.rb +23 -0
  65. data/app/controllers/sshkey_session_sweeper.rb +29 -0
  66. data/app/controllers/user_session_sweeper.rb +29 -0
  67. data/app/helpers/console/community_helper.rb +78 -0
  68. data/app/helpers/console/console_helper.rb +26 -0
  69. data/app/helpers/console/help_helper.rb +270 -0
  70. data/app/helpers/console/html5_boilerplate_helper.rb +63 -0
  71. data/app/helpers/console/layout_helper.rb +277 -0
  72. data/app/helpers/console/model_helper.rb +106 -0
  73. data/app/helpers/console/secured_helper.rb +5 -0
  74. data/app/models/alias.rb +10 -0
  75. data/app/models/application.rb +148 -0
  76. data/app/models/application_associations.rb +36 -0
  77. data/app/models/application_template.rb +90 -0
  78. data/app/models/application_type.rb +258 -0
  79. data/app/models/async_aware.rb +60 -0
  80. data/app/models/capabilities.rb +62 -0
  81. data/app/models/cartridge.rb +122 -0
  82. data/app/models/cartridge_type.rb +140 -0
  83. data/app/models/domain.rb +44 -0
  84. data/app/models/domain_associations.rb +33 -0
  85. data/app/models/embedded.rb +11 -0
  86. data/app/models/gear.rb +13 -0
  87. data/app/models/gear_group.rb +104 -0
  88. data/app/models/key.rb +87 -0
  89. data/app/models/quickstart.rb +135 -0
  90. data/app/models/rest_api.rb +130 -0
  91. data/app/models/rest_api/base.rb +781 -0
  92. data/app/models/rest_api/cacheable.rb +91 -0
  93. data/app/models/rest_api/environment.rb +13 -0
  94. data/app/models/rest_api/info.rb +34 -0
  95. data/app/models/rest_api/log_subscriber.rb +29 -0
  96. data/app/models/rest_api/railties/controller_runtime.rb +37 -0
  97. data/app/models/user.rb +27 -0
  98. data/app/models/user_associations.rb +6 -0
  99. data/app/views/account/_domain.html.haml +14 -0
  100. data/app/views/account/_keys.html.haml +20 -0
  101. data/app/views/account/_user.html.haml +5 -0
  102. data/app/views/account/show.html.haml +15 -0
  103. data/app/views/application_templates/_application_template.html.haml +5 -0
  104. data/app/views/application_types/_application_type.html.haml +19 -0
  105. data/app/views/application_types/_custom.html.haml +19 -0
  106. data/app/views/application_types/_persisted.html.haml +26 -0
  107. data/app/views/application_types/_tile.html.haml +9 -0
  108. data/app/views/application_types/index.html.haml +87 -0
  109. data/app/views/application_types/search.html.haml +67 -0
  110. data/app/views/application_types/show.html.haml +219 -0
  111. data/app/views/applications/_application.html.haml +34 -0
  112. data/app/views/applications/_applications_filter.html.haml +8 -0
  113. data/app/views/applications/_footer.html.haml +0 -0
  114. data/app/views/applications/_name.html.haml +28 -0
  115. data/app/views/applications/delete.html.haml +19 -0
  116. data/app/views/applications/get_started.html.haml +145 -0
  117. data/app/views/applications/index.html.haml +55 -0
  118. data/app/views/applications/show.html.haml +193 -0
  119. data/app/views/building/delete.html.haml +22 -0
  120. data/app/views/building/new.html.haml +57 -0
  121. data/app/views/building/show.html.haml +12 -0
  122. data/app/views/cartridge_types/_cartridge_type.html.haml +61 -0
  123. data/app/views/cartridge_types/index.html.haml +37 -0
  124. data/app/views/cartridge_types/show.html.haml +21 -0
  125. data/app/views/cartridges/next_steps.html.haml +58 -0
  126. data/app/views/cartridges/show.html.haml +1 -0
  127. data/app/views/console/error.html.haml +58 -0
  128. data/app/views/console/help.html.haml +90 -0
  129. data/app/views/console/not_found.html.haml +69 -0
  130. data/app/views/console/unauthorized.html.haml +7 -0
  131. data/app/views/domains/_domain.html.haml +14 -0
  132. data/app/views/domains/_form.html.haml +13 -0
  133. data/app/views/domains/edit.html.haml +5 -0
  134. data/app/views/domains/new.html.haml +6 -0
  135. data/app/views/keys/_form.html.haml +14 -0
  136. data/app/views/keys/_simple_form.html.haml +14 -0
  137. data/app/views/keys/new.html.haml +2 -0
  138. data/app/views/layouts/_footer.html.haml +38 -0
  139. data/app/views/layouts/_head.html.haml +35 -0
  140. data/app/views/layouts/console.html.haml +60 -0
  141. data/app/views/layouts/console/_header.html.haml +44 -0
  142. data/app/views/layouts/console/_identity.html.haml +7 -0
  143. data/app/views/layouts/console/_javascripts.html.haml +5 -0
  144. data/app/views/layouts/console/_stylesheets.html.haml +6 -0
  145. data/app/views/scaling/delete.html.haml +17 -0
  146. data/app/views/scaling/new.html.haml +24 -0
  147. data/app/views/scaling/show.html.haml +81 -0
  148. data/app/views/shared/_tracking.html.haml +0 -0
  149. data/conf/console.conf.example +108 -0
  150. data/conf/openshift_console.conf +10 -0
  151. data/config/cartridge_types.yml +54 -0
  152. data/config/initializers/barista_config.rb +86 -0
  153. data/config/initializers/cartridge_types.rb +5 -0
  154. data/config/initializers/console_security.rb +1 -0
  155. data/config/initializers/date_helper.rb +5 -0
  156. data/config/initializers/extended_logger.rb +51 -0
  157. data/config/initializers/formtastic.rb +100 -0
  158. data/config/initializers/inflections.rb +38 -0
  159. data/config/initializers/rdiscount.rb +8 -0
  160. data/config/initializers/rest_api.rb +22 -0
  161. data/config/initializers/sass.rb +30 -0
  162. data/config/initializers/session_trace.rb +32 -0
  163. data/config/initializers/x_frame_options.rb +53 -0
  164. data/config/locales/en.yml +12 -0
  165. data/lib/active_resource/associations.rb +107 -0
  166. data/lib/active_resource/associations/builder/association.rb +35 -0
  167. data/lib/active_resource/associations/builder/belongs_to.rb +5 -0
  168. data/lib/active_resource/associations/builder/has_many.rb +5 -0
  169. data/lib/active_resource/associations/builder/has_one.rb +5 -0
  170. data/lib/active_resource/persistent_connection.rb +341 -0
  171. data/lib/active_resource/persistent_http_mock.rb +68 -0
  172. data/lib/active_resource/reflection.rb +78 -0
  173. data/lib/console.rb +8 -0
  174. data/lib/console/config_file.rb +13 -0
  175. data/lib/console/configuration.rb +163 -0
  176. data/lib/console/engine.rb +28 -0
  177. data/lib/console/formtastic/bootstrap_form_builder.rb +369 -0
  178. data/lib/console/rails/app_redirector.rb +40 -0
  179. data/lib/console/rails/filter_hash.rb +15 -0
  180. data/lib/console/rails/routes.rb +51 -0
  181. data/lib/console/version.rb +5 -0
  182. data/lib/tasks/assets.rake +79 -0
  183. data/lib/tasks/stats.rake +18 -0
  184. data/lib/tasks/test_suites.rake +73 -0
  185. data/test/coverage_helper.rb +27 -0
  186. data/test/fixtures/cartridges.json +1 -0
  187. data/test/fixtures/quickstarts.csv +3 -0
  188. data/test/functional/account_controller_test.rb +14 -0
  189. data/test/functional/application_types_controller_test.rb +251 -0
  190. data/test/functional/applications_controller_sanity_test.rb +26 -0
  191. data/test/functional/applications_controller_test.rb +365 -0
  192. data/test/functional/building_controller_test.rb +203 -0
  193. data/test/functional/cartridge_types_controller_isolation_test.rb +68 -0
  194. data/test/functional/cartridge_types_controller_test.rb +48 -0
  195. data/test/functional/cartridges_controller_test.rb +83 -0
  196. data/test/functional/console_auth_basic_controller_test.rb +82 -0
  197. data/test/functional/console_auth_remote_user_controller_test.rb +90 -0
  198. data/test/functional/console_index_controller_test.rb +22 -0
  199. data/test/functional/domains_controller_test.rb +194 -0
  200. data/test/functional/keys_controller_test.rb +163 -0
  201. data/test/functional/quickstarts.json +18 -0
  202. data/test/functional/scaling_controller_test.rb +153 -0
  203. data/test/integration/assets_test.rb +34 -0
  204. data/test/integration/help_link_test.rb +43 -0
  205. data/test/integration/quickstarts_test.rb +24 -0
  206. data/test/integration/rescue_from_test.rb +25 -0
  207. data/test/integration/rest_api/application_test.rb +115 -0
  208. data/test/integration/rest_api/cartridge_test.rb +44 -0
  209. data/test/integration/rest_api/cartridge_type_test.rb +143 -0
  210. data/test/integration/rest_api/domain_test.rb +91 -0
  211. data/test/integration/rest_api/info_test.rb +9 -0
  212. data/test/integration/rest_api/key_test.rb +85 -0
  213. data/test/integration/static_pages_test.rb +44 -0
  214. data/test/rails_app/Rakefile +7 -0
  215. data/test/rails_app/app/controllers/application_controller.rb +5 -0
  216. data/test/rails_app/config.ru +4 -0
  217. data/test/rails_app/config/application.rb +48 -0
  218. data/test/rails_app/config/boot.rb +10 -0
  219. data/test/rails_app/config/database.yml +25 -0
  220. data/test/rails_app/config/environment.rb +5 -0
  221. data/test/rails_app/config/environments/development.rb +38 -0
  222. data/test/rails_app/config/environments/production.rb +70 -0
  223. data/test/rails_app/config/environments/test.rb +43 -0
  224. data/test/rails_app/config/initializers/auth.rb +0 -0
  225. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  226. data/test/rails_app/config/initializers/inflections.rb +10 -0
  227. data/test/rails_app/config/initializers/mime_types.rb +5 -0
  228. data/test/rails_app/config/initializers/secret_token.rb +7 -0
  229. data/test/rails_app/config/initializers/session_store.rb +8 -0
  230. data/test/rails_app/config/locales/en.yml +5 -0
  231. data/test/rails_app/config/routes.rb +4 -0
  232. data/test/rails_app/script/rails +6 -0
  233. data/test/support/auth.rb +111 -0
  234. data/test/support/base.rb +142 -0
  235. data/test/support/errors.rb +28 -0
  236. data/test/support/rest_api.rb +189 -0
  237. data/test/test_helper.rb +14 -0
  238. data/test/unit/active_model_compliance_test.rb +23 -0
  239. data/test/unit/async_aware_test.rb +55 -0
  240. data/test/unit/configuration_test.rb +158 -0
  241. data/test/unit/filter_hash_test.rb +64 -0
  242. data/test/unit/helpers/model_helper_test.rb +61 -0
  243. data/test/unit/overrides_test.rb +9 -0
  244. data/test/unit/rest_api_test.rb +1590 -0
  245. data/vendor/assets/javascripts/MIT-LICENSE.txt +20 -0
  246. data/vendor/assets/javascripts/bootstrap-collapse.js +157 -0
  247. data/vendor/assets/javascripts/bootstrap-dropdown.js +100 -0
  248. data/vendor/assets/javascripts/bootstrap-tab.js +135 -0
  249. data/vendor/assets/javascripts/bootstrap-transition.js +61 -0
  250. data/vendor/assets/javascripts/jquery.spin.js +47 -0
  251. data/vendor/assets/javascripts/jquery.ui.widget.js +16 -0
  252. data/vendor/assets/javascripts/jquery_cookie.js +41 -0
  253. data/vendor/assets/javascripts/jquery_validate_min.js +51 -0
  254. data/vendor/assets/javascripts/modernizr.min.js +2 -0
  255. data/vendor/assets/javascripts/plugins.js +16 -0
  256. data/vendor/assets/stylesheets/bootstrap/_accordion.scss +28 -0
  257. data/vendor/assets/stylesheets/bootstrap/_alerts.scss +70 -0
  258. data/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss +22 -0
  259. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +147 -0
  260. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +183 -0
  261. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +121 -0
  262. data/vendor/assets/stylesheets/bootstrap/_close.scss +18 -0
  263. data/vendor/assets/stylesheets/bootstrap/_code.scss +57 -0
  264. data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +18 -0
  265. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +130 -0
  266. data/vendor/assets/stylesheets/bootstrap/_forms.scss +522 -0
  267. data/vendor/assets/stylesheets/bootstrap/_grid.scss +8 -0
  268. data/vendor/assets/stylesheets/bootstrap/_hero-unit.scss +20 -0
  269. data/vendor/assets/stylesheets/bootstrap/_labels.scss +32 -0
  270. data/vendor/assets/stylesheets/bootstrap/_layouts.scss +17 -0
  271. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +602 -0
  272. data/vendor/assets/stylesheets/bootstrap/_modals.scss +84 -0
  273. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +299 -0
  274. data/vendor/assets/stylesheets/bootstrap/_navs.scss +353 -0
  275. data/vendor/assets/stylesheets/bootstrap/_pager.scss +30 -0
  276. data/vendor/assets/stylesheets/bootstrap/_pagination.scss +55 -0
  277. data/vendor/assets/stylesheets/bootstrap/_popovers.scss +49 -0
  278. data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +95 -0
  279. data/vendor/assets/stylesheets/bootstrap/_reset.scss +126 -0
  280. data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +33 -0
  281. data/vendor/assets/stylesheets/bootstrap/_sprites.scss +158 -0
  282. data/vendor/assets/stylesheets/bootstrap/_tables.scss +150 -0
  283. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +35 -0
  284. data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +35 -0
  285. data/vendor/assets/stylesheets/bootstrap/_type.scss +218 -0
  286. data/vendor/assets/stylesheets/bootstrap/_utilities.scss +23 -0
  287. data/vendor/assets/stylesheets/bootstrap/_variables.scss +107 -0
  288. data/vendor/assets/stylesheets/bootstrap/_wells.scss +17 -0
  289. data/vendor/assets/stylesheets/bootstrap/bootstrap.scss +66 -0
  290. data/vendor/assets/stylesheets/bootstrap/responsive.scss +334 -0
  291. metadata +506 -0
@@ -0,0 +1,142 @@
1
+ require 'mocha'
2
+
3
+ require 'webmock/test_unit'
4
+ WebMock.allow_net_connect!
5
+
6
+ def inline_test(file)
7
+ require "#{Console::Engine.root}/#{Pathname.new(file).relative_path_from(Rails.application.root)}"
8
+ end
9
+
10
+ Test::Unit::TestCase.test_order = :random
11
+
12
+ class ActiveSupport::TestCase
13
+
14
+ #
15
+ # Rails 3.2 + Test::Unit 2.x - handle_exception is not called in
16
+ # active_support/testing/setup_and_teardown.rb
17
+ #
18
+ def add_error(e)
19
+ if /active_support/ =~ caller[0]
20
+ super unless handle_exception(e)
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ def self.isolate(&block)
27
+ self.module_eval do
28
+ include ActiveSupport::Testing::Isolation
29
+ setup do
30
+ yield block
31
+ end
32
+ end
33
+ end
34
+
35
+ def self.uses_http_mock(sym=:always)
36
+ require 'active_resource/persistent_http_mock'
37
+ self.module_eval do
38
+ setup{ ActiveResource::HttpMock.enabled = true } unless sym == :sometimes
39
+ teardown do
40
+ ActiveResource::HttpMock.reset!
41
+ ActiveResource::HttpMock.enabled = false
42
+ end
43
+ end
44
+ end
45
+ def allow_http_mock
46
+ ActiveResource::HttpMock.enabled = true
47
+ end
48
+
49
+ setup { $VERBOSE = nil }
50
+ teardown { $VERBOSE = false }
51
+ setup { Rails.cache.clear }
52
+
53
+ #
54
+ # In any test case where css_select is valid, take a form object or selector
55
+ # and extract the data from that form. Yields a block and returns either
56
+ # the return value of the block or an array of [method, action, form_values]
57
+ #
58
+ def extract_form(form, &block)
59
+ if form.is_a?(String)
60
+ selector = form
61
+ assert (form = css_select(selector).first), "Could not find '#{selector}' in the response"
62
+ end
63
+ values = {}
64
+ (css_select(form, 'input') + css_select(form, 'textarea')).each do |input|
65
+ (values[input['name']] ||= []) << input['value'] if input['value']
66
+ end
67
+ css_select(form, 'select').each do |input|
68
+ (values[input['name']] ||= []) << input['value'] if input['value']
69
+ end
70
+ values.each_pair{ |k,v| values[k] = v.first if v.length == 1 }
71
+ r = [form['method'], form['action'], values]
72
+ block_given? ? yield(r) : r
73
+ end
74
+
75
+ #
76
+ # Extract a form from the most recent response and perform an HTTP
77
+ # post. Yields and returns the response object.
78
+ #
79
+ def submit_form(selector, params={}, &block)
80
+ extract_form(selector) do |method, action, values|
81
+ uri = URI(action)
82
+ req = Net::HTTP::Post.new(uri.path)
83
+ req.set_form_data(values.merge!(params))
84
+ http = Net::HTTP.new(uri.host, uri.port)
85
+ http.set_debug_output $stderr if ENV['HTTP_DEBUG']
86
+ if http.use_ssl = (uri.scheme == 'https')
87
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
88
+ end
89
+ http.start{ |http| http.request(req) }
90
+ end.tap do |res|
91
+ yield res if block_given?
92
+ end
93
+ end
94
+
95
+ def with_config(name, value, &block)
96
+ old = Rails.configuration.send(:"#{name}")
97
+ Rails.configuration.send(:"#{name}=", value)
98
+ yield
99
+ ensure
100
+ Rails.configuration.send(:"#{name}=", old)
101
+ end
102
+
103
+ def with_rescue_from(&block)
104
+ old = Rails.configuration.action_dispatch.show_exceptions
105
+ Rails.configuration.action_dispatch.show_exceptions = true
106
+ #@request.env['action_dispatch.show_exceptions'] = true
107
+ yield
108
+ ensure
109
+ Rails.configuration.action_dispatch.show_exceptions = old
110
+ end
111
+
112
+ def expects_integrated
113
+ flunk 'Test requires integrated Streamline authentication' unless Rails.configuration.integrated
114
+ end
115
+
116
+ def gen_small_uuid()
117
+ %x[/usr/bin/uuidgen].gsub('-', '').strip
118
+ end
119
+
120
+ @@name = 0
121
+ def unique_name_format
122
+ 'name%i'
123
+ end
124
+ def unique_name(format=nil)
125
+ (format || unique_name_format) % self.class.next
126
+ end
127
+ def self.next
128
+ @@name += 1
129
+ end
130
+
131
+ @@once = []
132
+ def once(symbol, &block)
133
+ unless @@once.include? symbol
134
+ @@once << symbol
135
+ exit_block = yield block
136
+ at_exit do
137
+ exit_block.call if exit_block
138
+ end
139
+ end
140
+ end
141
+ end
142
+
@@ -0,0 +1,28 @@
1
+ module ErrorPageAssertions
2
+ def default_not_found_message
3
+ /not found/i
4
+ end
5
+ def default_error_message
6
+ /An error has occurred/i
7
+ end
8
+
9
+ def assert_not_found_page(title=default_not_found_message)
10
+ assert_response :success
11
+ assert_select 'h1', title
12
+ end
13
+ def assert_error_page(title=default_error_message)
14
+ assert_response :success
15
+ assert_select 'h1', title
16
+
17
+ assert assigns(:reference_id)
18
+ assert_select 'p', /#{assigns(:reference_id)}/
19
+ end
20
+ end
21
+
22
+ class ActionController::TestCase
23
+ include ErrorPageAssertions
24
+ end
25
+
26
+ class ActionDispatch::IntegrationTest
27
+ include ErrorPageAssertions
28
+ end
@@ -0,0 +1,189 @@
1
+ class ActiveSupport::TestCase
2
+
3
+ def uuid
4
+ @ts ||= new_uuid
5
+ end
6
+ def new_uuid
7
+ "#{Time.now.to_i}#{gen_small_uuid[0,6]}"
8
+ end
9
+
10
+ def set_domain(domain)
11
+ @domain = domain
12
+ end
13
+
14
+ def setup_domain
15
+ domain = Domain.new :name => "#{uuid}", :as => @user
16
+ begin
17
+ domain.save!
18
+ rescue Domain::AlreadyExists, Domain::UserAlreadyHasDomain
19
+ domain.errors.clear
20
+ rescue => e
21
+ puts "Domain create failed: #{e.response.errors.inspect}" rescue nil
22
+ raise
23
+ end
24
+ set_domain(domain)
25
+ end
26
+ def find_or_create_domain
27
+ set_domain(Domain.find(:one, :as => @user))
28
+ rescue
29
+ setup_domain
30
+ end
31
+
32
+ def cleanup_user?
33
+ not @with_unique_user
34
+ end
35
+
36
+ def new_named_user(name)
37
+ new_user(:login => name, :password => 'foo')
38
+ end
39
+
40
+ def with_user_with_multiple_gear_sizes
41
+ set_user(new_named_user('user_with_multiple_gear_sizes@test.com'))
42
+ @controller.stubs(:current_user).returns(set_user(new_named_user('user_with_multiple_gear_sizes@test.com')))
43
+ end
44
+
45
+ # some unit tests or test environments may want to preserve domains
46
+ # created for unique users
47
+ alias_method :cleanup_domain?, :cleanup_user?
48
+
49
+ def cleanup_domain
50
+ if cleanup_domain?
51
+ @domain.destroy_recursive if @domain
52
+ end
53
+ end
54
+
55
+ def with_unique_domain
56
+ with_unique_user # FIXME: test for non-unique
57
+ setup_domain
58
+ end
59
+
60
+ def delete_keys
61
+ Key.find(:all, :as => @user).map(&:destroy)
62
+ end
63
+
64
+ def allow_duplicate_domains
65
+ Domain.any_instance.expects(:check_duplicate_domain).at_least(0).returns(false)
66
+ end
67
+
68
+ def assert_attr_equal(o1, o2)
69
+ unless o1 == o2
70
+ assert o1, "#{o1} is not equal to #{o2}"
71
+ assert o2, "#{o1} is not equal to #{o2}"
72
+ if o1.is_a? Array and o2.is_a? Array
73
+ assert o1.length == o2.length, "Array 1 length #{o1.length} is not array 2 length #{o2.length}"
74
+ o1.each_with_index { |o,i| assert_attr_equal(o, o2[i]) }
75
+ else
76
+ assert_equal o1.attributes, o2.attributes, "Attributes do not match"
77
+ end
78
+ end
79
+ end
80
+
81
+ def setup_from_app(app)
82
+ set_domain Domain.new({:id => app.domain_id, :as => app.as}, true)
83
+ set_user app.as
84
+ app
85
+ end
86
+
87
+ def self.api_cache
88
+ @@cache ||= {}
89
+ end
90
+
91
+ def api_fetch(name, &block)
92
+ varname = "@#{name}_cached"
93
+ instance_variable_get(varname) || begin
94
+ created = if cached = self.class.api_cache[name]
95
+ block.call(cached) || cached
96
+ else
97
+ self.class.api_cache[name] = block.call(nil)
98
+ end
99
+ instance_variable_set(varname, created)
100
+ end
101
+ end
102
+
103
+ def use_domain(symbol=nil, &block)
104
+ api_fetch(symbol) do |cached|
105
+ if cached
106
+ set_domain cached
107
+ set_user cached.as
108
+ cached
109
+ else
110
+ if block_given?
111
+ set_domain(yield block)
112
+ else
113
+ with_unique_domain
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ #
120
+ # Create or retrieve a domain and user. Does not guarantee that the domain is
121
+ # empty. If other tests are running in parallel altering the domain may result
122
+ # in errors.
123
+ #
124
+ def with_domain
125
+ use_domain(:any)
126
+ end
127
+
128
+ def gears_free?(count)
129
+ User.find(:one, :as => @user).gears_free >= count
130
+ end
131
+
132
+ def use_app(symbol, &block)
133
+ api_fetch(symbol) do |cached|
134
+ if cached
135
+ setup_from_app(cached)
136
+ else
137
+ app = yield block if block_given?
138
+ app ||= Application.new :name => uuid
139
+ if app.as
140
+ set_user(app.as)
141
+ else
142
+ with_unique_user
143
+ app.as = @user
144
+ end
145
+ find_or_create_domain
146
+ @domain.expects(:destroy).never
147
+ begin
148
+ app = @domain.find_application(app.name)
149
+ rescue
150
+ app.domain = @domain
151
+ app.save!
152
+ end
153
+ app
154
+ end
155
+ end
156
+ end
157
+
158
+ def with_app
159
+ use_app(:readable_app) { Application.new({:name => "normal", :cartridge => 'ruby-1.8', :as => new_named_user('user_with_normal_app')}) }
160
+ end
161
+
162
+ def with_scalable_app
163
+ use_app(:scalable_app) { Application.new({:name => "scaled", :cartridge => 'ruby-1.8', :scale => true, :as => new_named_user('user_with_scaled_app')}) }
164
+ end
165
+
166
+ def mock_body_for(&block)
167
+ req = ActiveResource::HttpMock.requests.find &block
168
+ assert req, "No mock request was found for this block"
169
+ body = req.body
170
+ body = ActiveSupport::JSON.decode(req.body) if req.headers['Content-Type'].include?('application/json')
171
+ body
172
+ end
173
+
174
+ def auth_headers
175
+ h = {}
176
+ h['Cookie'] = "rh_sso=#{@user.ticket}" if @user.ticket
177
+ h['Authorization'] = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, @user.password) if @user.login
178
+ h
179
+ end
180
+
181
+ def json_header(is_post=false)
182
+ anonymous_json_header(is_post).merge!(auth_headers)
183
+ end
184
+
185
+ def anonymous_json_header(is_post=false)
186
+ {(is_post ? 'Content-Type' : 'Accept') => 'application/json', 'User-Agent' => Console.config.api[:user_agent]}
187
+ end
188
+
189
+ end
@@ -0,0 +1,14 @@
1
+ unless defined? Rails.application
2
+ require File.expand_path('../coverage_helper.rb', __FILE__)
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+
6
+ require File.expand_path("../rails_app/config/environment.rb", __FILE__)
7
+ require "rails/test_help"
8
+ end
9
+
10
+ Rails.backtrace_cleaner.remove_silencers!
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module ActiveModelComplianceTest
4
+ [
5
+ RestApi::Base,
6
+ RestApi::Info,
7
+ Key,
8
+ Domain,
9
+ Application,
10
+ Alias,
11
+ Cartridge,
12
+ CartridgeType,
13
+ Embedded,
14
+ Gear,
15
+ GearGroup,
16
+ User,
17
+ ].each do |klass|
18
+ const_set("#{klass.to_s.gsub(':','')}Test", Class.new(ActiveModel::TestCase) do
19
+ include ActiveModel::Lint::Tests
20
+ setup{ @model = klass.new }
21
+ end)
22
+ end
23
+ end
@@ -0,0 +1,55 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class AsyncAwareTest < ActiveSupport::TestCase
4
+
5
+ def obj
6
+ @test_obj ||= Class.new(Object) do
7
+ include AsyncAware
8
+ def logger
9
+ Logger.new
10
+ end
11
+ end.new
12
+ end
13
+
14
+ class A < StandardError; end
15
+ class B < StandardError; end
16
+ class C < StandardError; end
17
+
18
+ test "runs in order" do
19
+ obj.async{ 'a' }
20
+ obj.async{ 'b' }
21
+ assert_equal ['a','b'], obj.join
22
+ assert_equal 1, Thread.list.size
23
+
24
+ assert_raise(NoMethodError){ obj.join }
25
+ end
26
+ test "returns in consistent order" do
27
+ obj.async{ sleep(0.01); 'a' }
28
+ obj.async{ 'b' }
29
+ assert_equal ['a','b'], obj.join
30
+ end
31
+ test "join returns results" do
32
+ obj.async{ sleep(0.01); raise A }
33
+ obj.async{ sleep(0.02); raise B }
34
+ obj.async{ 'c' }
35
+ arr = obj.join
36
+ assert arr[0].is_a? A
37
+ assert arr[1].is_a? B
38
+ assert_equal 'c', arr[2]
39
+ end
40
+ test "join! raises the first exception" do
41
+ obj.async{ sleep(0.01); raise A }
42
+ obj.async{ raise B }
43
+ assert_raise(A){ result obj.join! }
44
+ assert_equal 1, Thread.list.size
45
+ end
46
+ test "join on thread expiration returns timeout" do
47
+ obj.async{ sleep(1) }
48
+ assert_raise(AsyncAware::ThreadTimedOut){ obj.join!(0.01) }
49
+ end
50
+ test "Thread timeout has message" do
51
+ ex = AsyncAware::ThreadTimedOut.new(Thread.current, 13045)
52
+ assert /13045/ =~ ex.to_s
53
+ assert ex.to_s.include? Thread.current.inspect
54
+ end
55
+ end