openshift-origin-console 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYRIGHT +1 -0
- data/Gemfile +21 -0
- data/LICENSE +203 -0
- data/README.md +123 -0
- data/Rakefile +44 -0
- data/app/assets/images/cartridge-edge.gif +0 -0
- data/app/assets/images/console/arrow-down.png +0 -0
- data/app/assets/images/console/console-sprite.png +0 -0
- data/app/assets/images/favicon-32.png +0 -0
- data/app/assets/images/loader-dark.gif +0 -0
- data/app/assets/images/loader.gif +0 -0
- data/app/assets/images/sprite-vert.png +0 -0
- data/app/assets/javascripts/console.js +10 -0
- data/app/assets/javascripts/console/form.js.coffee +51 -0
- data/app/assets/stylesheets/_alerts.scss +84 -0
- data/app/assets/stylesheets/_breadcrumbs.scss +31 -0
- data/app/assets/stylesheets/_buttons.scss +229 -0
- data/app/assets/stylesheets/_code.scss +86 -0
- data/app/assets/stylesheets/_custom.scss +207 -0
- data/app/assets/stylesheets/_footer.scss +54 -0
- data/app/assets/stylesheets/_forms.scss +710 -0
- data/app/assets/stylesheets/_grid.scss +28 -0
- data/app/assets/stylesheets/_input-prepend-append.scss +138 -0
- data/app/assets/stylesheets/_labels.scss +40 -0
- data/app/assets/stylesheets/_mixins.scss +76 -0
- data/app/assets/stylesheets/_override-variables.scss +1 -0
- data/app/assets/stylesheets/_responsive.scss +438 -0
- data/app/assets/stylesheets/_ribbon.scss +57 -0
- data/app/assets/stylesheets/_type.scss +306 -0
- data/app/assets/stylesheets/_utilities.scss +10 -0
- data/app/assets/stylesheets/_variables.scss +131 -0
- data/app/assets/stylesheets/common.css.scss +82 -0
- data/app/assets/stylesheets/console/_application.scss +194 -0
- data/app/assets/stylesheets/console/_base.scss +26 -0
- data/app/assets/stylesheets/console/_breadcrumbs.scss +32 -0
- data/app/assets/stylesheets/console/_buttons.scss +214 -0
- data/app/assets/stylesheets/console/_core.scss +1002 -0
- data/app/assets/stylesheets/console/_dropdowns.scss +63 -0
- data/app/assets/stylesheets/console/_help.scss +54 -0
- data/app/assets/stylesheets/console/_mixins.scss +11 -0
- data/app/assets/stylesheets/console/_navbar.scss +415 -0
- data/app/assets/stylesheets/console/_ribbon.scss +82 -0
- data/app/assets/stylesheets/console/_tile.scss +122 -0
- data/app/assets/stylesheets/origin.css.scss +37 -0
- data/app/controllers/account/dashboard.rb +13 -0
- data/app/controllers/account_controller.rb +3 -0
- data/app/controllers/application_types_controller.rb +80 -0
- data/app/controllers/applications_controller.rb +183 -0
- data/app/controllers/building_controller.rb +81 -0
- data/app/controllers/capability_aware.rb +18 -0
- data/app/controllers/cartridge_types_controller.rb +53 -0
- data/app/controllers/cartridges_controller.rb +43 -0
- data/app/controllers/console/auth/basic.rb +65 -0
- data/app/controllers/console/auth/none.rb +5 -0
- data/app/controllers/console/auth/remote_user.rb +69 -0
- data/app/controllers/console/rescue.rb +48 -0
- data/app/controllers/console_controller.rb +19 -0
- data/app/controllers/console_index_controller.rb +14 -0
- data/app/controllers/domain_aware.rb +26 -0
- data/app/controllers/domain_session_sweeper.rb +29 -0
- data/app/controllers/domains_controller.rb +30 -0
- data/app/controllers/keys_controller.rb +43 -0
- data/app/controllers/scaling_controller.rb +46 -0
- data/app/controllers/sshkey_aware.rb +23 -0
- data/app/controllers/sshkey_session_sweeper.rb +29 -0
- data/app/controllers/user_session_sweeper.rb +29 -0
- data/app/helpers/console/community_helper.rb +78 -0
- data/app/helpers/console/console_helper.rb +26 -0
- data/app/helpers/console/help_helper.rb +270 -0
- data/app/helpers/console/html5_boilerplate_helper.rb +63 -0
- data/app/helpers/console/layout_helper.rb +277 -0
- data/app/helpers/console/model_helper.rb +106 -0
- data/app/helpers/console/secured_helper.rb +5 -0
- data/app/models/alias.rb +10 -0
- data/app/models/application.rb +148 -0
- data/app/models/application_associations.rb +36 -0
- data/app/models/application_template.rb +90 -0
- data/app/models/application_type.rb +258 -0
- data/app/models/async_aware.rb +60 -0
- data/app/models/capabilities.rb +62 -0
- data/app/models/cartridge.rb +122 -0
- data/app/models/cartridge_type.rb +140 -0
- data/app/models/domain.rb +44 -0
- data/app/models/domain_associations.rb +33 -0
- data/app/models/embedded.rb +11 -0
- data/app/models/gear.rb +13 -0
- data/app/models/gear_group.rb +104 -0
- data/app/models/key.rb +87 -0
- data/app/models/quickstart.rb +135 -0
- data/app/models/rest_api.rb +130 -0
- data/app/models/rest_api/base.rb +781 -0
- data/app/models/rest_api/cacheable.rb +91 -0
- data/app/models/rest_api/environment.rb +13 -0
- data/app/models/rest_api/info.rb +34 -0
- data/app/models/rest_api/log_subscriber.rb +29 -0
- data/app/models/rest_api/railties/controller_runtime.rb +37 -0
- data/app/models/user.rb +27 -0
- data/app/models/user_associations.rb +6 -0
- data/app/views/account/_domain.html.haml +14 -0
- data/app/views/account/_keys.html.haml +20 -0
- data/app/views/account/_user.html.haml +5 -0
- data/app/views/account/show.html.haml +15 -0
- data/app/views/application_templates/_application_template.html.haml +5 -0
- data/app/views/application_types/_application_type.html.haml +19 -0
- data/app/views/application_types/_custom.html.haml +19 -0
- data/app/views/application_types/_persisted.html.haml +26 -0
- data/app/views/application_types/_tile.html.haml +9 -0
- data/app/views/application_types/index.html.haml +87 -0
- data/app/views/application_types/search.html.haml +67 -0
- data/app/views/application_types/show.html.haml +219 -0
- data/app/views/applications/_application.html.haml +34 -0
- data/app/views/applications/_applications_filter.html.haml +8 -0
- data/app/views/applications/_footer.html.haml +0 -0
- data/app/views/applications/_name.html.haml +28 -0
- data/app/views/applications/delete.html.haml +19 -0
- data/app/views/applications/get_started.html.haml +145 -0
- data/app/views/applications/index.html.haml +55 -0
- data/app/views/applications/show.html.haml +193 -0
- data/app/views/building/delete.html.haml +22 -0
- data/app/views/building/new.html.haml +57 -0
- data/app/views/building/show.html.haml +12 -0
- data/app/views/cartridge_types/_cartridge_type.html.haml +61 -0
- data/app/views/cartridge_types/index.html.haml +37 -0
- data/app/views/cartridge_types/show.html.haml +21 -0
- data/app/views/cartridges/next_steps.html.haml +58 -0
- data/app/views/cartridges/show.html.haml +1 -0
- data/app/views/console/error.html.haml +58 -0
- data/app/views/console/help.html.haml +90 -0
- data/app/views/console/not_found.html.haml +69 -0
- data/app/views/console/unauthorized.html.haml +7 -0
- data/app/views/domains/_domain.html.haml +14 -0
- data/app/views/domains/_form.html.haml +13 -0
- data/app/views/domains/edit.html.haml +5 -0
- data/app/views/domains/new.html.haml +6 -0
- data/app/views/keys/_form.html.haml +14 -0
- data/app/views/keys/_simple_form.html.haml +14 -0
- data/app/views/keys/new.html.haml +2 -0
- data/app/views/layouts/_footer.html.haml +38 -0
- data/app/views/layouts/_head.html.haml +35 -0
- data/app/views/layouts/console.html.haml +60 -0
- data/app/views/layouts/console/_header.html.haml +44 -0
- data/app/views/layouts/console/_identity.html.haml +7 -0
- data/app/views/layouts/console/_javascripts.html.haml +5 -0
- data/app/views/layouts/console/_stylesheets.html.haml +6 -0
- data/app/views/scaling/delete.html.haml +17 -0
- data/app/views/scaling/new.html.haml +24 -0
- data/app/views/scaling/show.html.haml +81 -0
- data/app/views/shared/_tracking.html.haml +0 -0
- data/conf/console.conf.example +108 -0
- data/conf/openshift_console.conf +10 -0
- data/config/cartridge_types.yml +54 -0
- data/config/initializers/barista_config.rb +86 -0
- data/config/initializers/cartridge_types.rb +5 -0
- data/config/initializers/console_security.rb +1 -0
- data/config/initializers/date_helper.rb +5 -0
- data/config/initializers/extended_logger.rb +51 -0
- data/config/initializers/formtastic.rb +100 -0
- data/config/initializers/inflections.rb +38 -0
- data/config/initializers/rdiscount.rb +8 -0
- data/config/initializers/rest_api.rb +22 -0
- data/config/initializers/sass.rb +30 -0
- data/config/initializers/session_trace.rb +32 -0
- data/config/initializers/x_frame_options.rb +53 -0
- data/config/locales/en.yml +12 -0
- data/lib/active_resource/associations.rb +107 -0
- data/lib/active_resource/associations/builder/association.rb +35 -0
- data/lib/active_resource/associations/builder/belongs_to.rb +5 -0
- data/lib/active_resource/associations/builder/has_many.rb +5 -0
- data/lib/active_resource/associations/builder/has_one.rb +5 -0
- data/lib/active_resource/persistent_connection.rb +341 -0
- data/lib/active_resource/persistent_http_mock.rb +68 -0
- data/lib/active_resource/reflection.rb +78 -0
- data/lib/console.rb +8 -0
- data/lib/console/config_file.rb +13 -0
- data/lib/console/configuration.rb +163 -0
- data/lib/console/engine.rb +28 -0
- data/lib/console/formtastic/bootstrap_form_builder.rb +369 -0
- data/lib/console/rails/app_redirector.rb +40 -0
- data/lib/console/rails/filter_hash.rb +15 -0
- data/lib/console/rails/routes.rb +51 -0
- data/lib/console/version.rb +5 -0
- data/lib/tasks/assets.rake +79 -0
- data/lib/tasks/stats.rake +18 -0
- data/lib/tasks/test_suites.rake +73 -0
- data/test/coverage_helper.rb +27 -0
- data/test/fixtures/cartridges.json +1 -0
- data/test/fixtures/quickstarts.csv +3 -0
- data/test/functional/account_controller_test.rb +14 -0
- data/test/functional/application_types_controller_test.rb +251 -0
- data/test/functional/applications_controller_sanity_test.rb +26 -0
- data/test/functional/applications_controller_test.rb +365 -0
- data/test/functional/building_controller_test.rb +203 -0
- data/test/functional/cartridge_types_controller_isolation_test.rb +68 -0
- data/test/functional/cartridge_types_controller_test.rb +48 -0
- data/test/functional/cartridges_controller_test.rb +83 -0
- data/test/functional/console_auth_basic_controller_test.rb +82 -0
- data/test/functional/console_auth_remote_user_controller_test.rb +90 -0
- data/test/functional/console_index_controller_test.rb +22 -0
- data/test/functional/domains_controller_test.rb +194 -0
- data/test/functional/keys_controller_test.rb +163 -0
- data/test/functional/quickstarts.json +18 -0
- data/test/functional/scaling_controller_test.rb +153 -0
- data/test/integration/assets_test.rb +34 -0
- data/test/integration/help_link_test.rb +43 -0
- data/test/integration/quickstarts_test.rb +24 -0
- data/test/integration/rescue_from_test.rb +25 -0
- data/test/integration/rest_api/application_test.rb +115 -0
- data/test/integration/rest_api/cartridge_test.rb +44 -0
- data/test/integration/rest_api/cartridge_type_test.rb +143 -0
- data/test/integration/rest_api/domain_test.rb +91 -0
- data/test/integration/rest_api/info_test.rb +9 -0
- data/test/integration/rest_api/key_test.rb +85 -0
- data/test/integration/static_pages_test.rb +44 -0
- data/test/rails_app/Rakefile +7 -0
- data/test/rails_app/app/controllers/application_controller.rb +5 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/config/application.rb +48 -0
- data/test/rails_app/config/boot.rb +10 -0
- data/test/rails_app/config/database.yml +25 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/development.rb +38 -0
- data/test/rails_app/config/environments/production.rb +70 -0
- data/test/rails_app/config/environments/test.rb +43 -0
- data/test/rails_app/config/initializers/auth.rb +0 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/inflections.rb +10 -0
- data/test/rails_app/config/initializers/mime_types.rb +5 -0
- data/test/rails_app/config/initializers/secret_token.rb +7 -0
- data/test/rails_app/config/initializers/session_store.rb +8 -0
- data/test/rails_app/config/locales/en.yml +5 -0
- data/test/rails_app/config/routes.rb +4 -0
- data/test/rails_app/script/rails +6 -0
- data/test/support/auth.rb +111 -0
- data/test/support/base.rb +142 -0
- data/test/support/errors.rb +28 -0
- data/test/support/rest_api.rb +189 -0
- data/test/test_helper.rb +14 -0
- data/test/unit/active_model_compliance_test.rb +23 -0
- data/test/unit/async_aware_test.rb +55 -0
- data/test/unit/configuration_test.rb +158 -0
- data/test/unit/filter_hash_test.rb +64 -0
- data/test/unit/helpers/model_helper_test.rb +61 -0
- data/test/unit/overrides_test.rb +9 -0
- data/test/unit/rest_api_test.rb +1590 -0
- data/vendor/assets/javascripts/MIT-LICENSE.txt +20 -0
- data/vendor/assets/javascripts/bootstrap-collapse.js +157 -0
- data/vendor/assets/javascripts/bootstrap-dropdown.js +100 -0
- data/vendor/assets/javascripts/bootstrap-tab.js +135 -0
- data/vendor/assets/javascripts/bootstrap-transition.js +61 -0
- data/vendor/assets/javascripts/jquery.spin.js +47 -0
- data/vendor/assets/javascripts/jquery.ui.widget.js +16 -0
- data/vendor/assets/javascripts/jquery_cookie.js +41 -0
- data/vendor/assets/javascripts/jquery_validate_min.js +51 -0
- data/vendor/assets/javascripts/modernizr.min.js +2 -0
- data/vendor/assets/javascripts/plugins.js +16 -0
- data/vendor/assets/stylesheets/bootstrap/_accordion.scss +28 -0
- data/vendor/assets/stylesheets/bootstrap/_alerts.scss +70 -0
- data/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss +22 -0
- data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +147 -0
- data/vendor/assets/stylesheets/bootstrap/_buttons.scss +183 -0
- data/vendor/assets/stylesheets/bootstrap/_carousel.scss +121 -0
- data/vendor/assets/stylesheets/bootstrap/_close.scss +18 -0
- data/vendor/assets/stylesheets/bootstrap/_code.scss +57 -0
- data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +18 -0
- data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +130 -0
- data/vendor/assets/stylesheets/bootstrap/_forms.scss +522 -0
- data/vendor/assets/stylesheets/bootstrap/_grid.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/_hero-unit.scss +20 -0
- data/vendor/assets/stylesheets/bootstrap/_labels.scss +32 -0
- data/vendor/assets/stylesheets/bootstrap/_layouts.scss +17 -0
- data/vendor/assets/stylesheets/bootstrap/_mixins.scss +602 -0
- data/vendor/assets/stylesheets/bootstrap/_modals.scss +84 -0
- data/vendor/assets/stylesheets/bootstrap/_navbar.scss +299 -0
- data/vendor/assets/stylesheets/bootstrap/_navs.scss +353 -0
- data/vendor/assets/stylesheets/bootstrap/_pager.scss +30 -0
- data/vendor/assets/stylesheets/bootstrap/_pagination.scss +55 -0
- data/vendor/assets/stylesheets/bootstrap/_popovers.scss +49 -0
- data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +95 -0
- data/vendor/assets/stylesheets/bootstrap/_reset.scss +126 -0
- data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +33 -0
- data/vendor/assets/stylesheets/bootstrap/_sprites.scss +158 -0
- data/vendor/assets/stylesheets/bootstrap/_tables.scss +150 -0
- data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +35 -0
- data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +35 -0
- data/vendor/assets/stylesheets/bootstrap/_type.scss +218 -0
- data/vendor/assets/stylesheets/bootstrap/_utilities.scss +23 -0
- data/vendor/assets/stylesheets/bootstrap/_variables.scss +107 -0
- data/vendor/assets/stylesheets/bootstrap/_wells.scss +17 -0
- data/vendor/assets/stylesheets/bootstrap/bootstrap.scss +66 -0
- data/vendor/assets/stylesheets/bootstrap/responsive.scss +334 -0
- 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
|
data/test/test_helper.rb
ADDED
@@ -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
|