rhc 1.2.7 → 1.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/bin/rhc +6 -8
  2. data/bin/rhc-chk +23 -10
  3. data/features/domain.feature +1 -1
  4. data/features/lib/rhc_helper.rb +3 -2
  5. data/features/lib/rhc_helper/api.rb +7 -0
  6. data/features/lib/rhc_helper/app.rb +8 -10
  7. data/features/lib/rhc_helper/domain.rb +2 -1
  8. data/features/lib/rhc_helper/runnable.rb +2 -24
  9. data/features/sshkey.feature +3 -3
  10. data/features/step_definitions/cartridge_steps.rb +6 -6
  11. data/features/step_definitions/client_steps.rb +0 -1
  12. data/features/step_definitions/sshkey_steps.rb +2 -2
  13. data/features/support/before_hooks.rb +0 -1
  14. data/features/support/env.rb +5 -3
  15. data/lib/rhc-common.rb +1 -1
  16. data/lib/rhc.rb +9 -8
  17. data/lib/rhc/auth.rb +3 -0
  18. data/lib/rhc/auth/basic.rb +54 -0
  19. data/lib/rhc/cartridge_helpers.rb +11 -5
  20. data/lib/rhc/cli.rb +4 -2
  21. data/lib/rhc/command_runner.rb +35 -30
  22. data/lib/rhc/commands.rb +127 -18
  23. data/lib/rhc/commands/account.rb +24 -0
  24. data/lib/rhc/commands/alias.rb +1 -1
  25. data/lib/rhc/commands/app.rb +210 -209
  26. data/lib/rhc/commands/apps.rb +22 -0
  27. data/lib/rhc/commands/base.rb +10 -77
  28. data/lib/rhc/commands/cartridge.rb +35 -35
  29. data/lib/rhc/commands/domain.rb +20 -13
  30. data/lib/rhc/commands/git_clone.rb +30 -0
  31. data/lib/rhc/commands/{port-forward.rb → port_forward.rb} +3 -3
  32. data/lib/rhc/commands/server.rb +28 -16
  33. data/lib/rhc/commands/setup.rb +18 -1
  34. data/lib/rhc/commands/snapshot.rb +4 -4
  35. data/lib/rhc/commands/sshkey.rb +4 -18
  36. data/lib/rhc/commands/tail.rb +32 -9
  37. data/lib/rhc/config.rb +168 -99
  38. data/lib/rhc/context_helper.rb +22 -9
  39. data/lib/rhc/core_ext.rb +41 -1
  40. data/lib/rhc/exceptions.rb +21 -5
  41. data/lib/rhc/git_helpers.rb +81 -0
  42. data/lib/rhc/help_formatter.rb +21 -1
  43. data/lib/rhc/helpers.rb +222 -87
  44. data/lib/rhc/output_helpers.rb +94 -110
  45. data/lib/rhc/rest.rb +15 -198
  46. data/lib/rhc/rest/api.rb +88 -0
  47. data/lib/rhc/rest/application.rb +29 -30
  48. data/lib/rhc/rest/attributes.rb +27 -0
  49. data/lib/rhc/rest/base.rb +29 -33
  50. data/lib/rhc/rest/cartridge.rb +42 -20
  51. data/lib/rhc/rest/client.rb +351 -89
  52. data/lib/rhc/rest/domain.rb +7 -13
  53. data/lib/rhc/rest/gear_group.rb +1 -1
  54. data/lib/rhc/rest/key.rb +7 -2
  55. data/lib/rhc/rest/mock.rb +609 -0
  56. data/lib/rhc/rest/user.rb +6 -2
  57. data/lib/rhc/{ssh_key_helpers.rb → ssh_helpers.rb} +58 -28
  58. data/lib/rhc/{targz.rb → tar_gz.rb} +0 -0
  59. data/lib/rhc/usage_templates/command_help.erb +4 -1
  60. data/lib/rhc/usage_templates/help.erb +24 -11
  61. data/lib/rhc/usage_templates/options_help.erb +14 -0
  62. data/lib/rhc/wizard.rb +283 -213
  63. data/spec/keys/example.pem +23 -0
  64. data/spec/keys/example_private.pem +27 -0
  65. data/spec/keys/server.pem +19 -0
  66. data/spec/rest_spec_helper.rb +3 -371
  67. data/spec/rhc/auth_spec.rb +226 -0
  68. data/spec/rhc/cli_spec.rb +41 -14
  69. data/spec/rhc/command_spec.rb +44 -15
  70. data/spec/rhc/commands/account_spec.rb +41 -0
  71. data/spec/rhc/commands/alias_spec.rb +16 -15
  72. data/spec/rhc/commands/app_spec.rb +115 -92
  73. data/spec/rhc/commands/apps_spec.rb +39 -0
  74. data/spec/rhc/commands/cartridge_spec.rb +134 -112
  75. data/spec/rhc/commands/domain_spec.rb +31 -86
  76. data/spec/rhc/commands/git_clone_spec.rb +56 -0
  77. data/spec/rhc/commands/{port-forward_spec.rb → port_forward_spec.rb} +27 -32
  78. data/spec/rhc/commands/server_spec.rb +28 -3
  79. data/spec/rhc/commands/setup_spec.rb +29 -11
  80. data/spec/rhc/commands/snapshot_spec.rb +4 -3
  81. data/spec/rhc/commands/sshkey_spec.rb +24 -56
  82. data/spec/rhc/commands/tail_spec.rb +26 -9
  83. data/spec/rhc/commands/threaddump_spec.rb +12 -11
  84. data/spec/rhc/config_spec.rb +211 -164
  85. data/spec/rhc/context_spec.rb +2 -0
  86. data/spec/rhc/helpers_spec.rb +242 -46
  87. data/spec/rhc/rest_application_spec.rb +42 -28
  88. data/spec/rhc/rest_client_spec.rb +110 -93
  89. data/spec/rhc/rest_spec.rb +220 -131
  90. data/spec/rhc/targz_spec.rb +1 -1
  91. data/spec/rhc/wizard_spec.rb +435 -624
  92. data/spec/spec.opts +1 -1
  93. data/spec/spec_helper.rb +140 -6
  94. data/spec/wizard_spec_helper.rb +326 -0
  95. metadata +163 -143
  96. data/lib/rhc/client.rb +0 -17
  97. data/lib/rhc/git_helper.rb +0 -59
@@ -0,0 +1,23 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIID4DCCAsgCCQDLI3UAX4mf4DANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC
3
+ VVMxFzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMRAwDgYDVQQHDAdSYWxlaWdoMRAw
4
+ DgYDVQQKDAdSZWQgSGF0MRcwFQYDVQQLDA5PcGVuU2hpZnQgVGVzdDEiMCAGA1UE
5
+ AwwZdGVzdC5vcGVuc2hpZnQucmVkaGF0LmNvbTEoMCYGCSqGSIb3DQEJARYZdGVz
6
+ dEBvcGVuc2hpZnQucmVkaGF0LmNvbTAeFw0xMjEyMjIyMTI1MDFaFw0xMzEyMjIy
7
+ MTI1MDFaMIGxMQswCQYDVQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmEx
8
+ EDAOBgNVBAcMB1JhbGVpZ2gxEDAOBgNVBAoMB1JlZCBIYXQxFzAVBgNVBAsMDk9w
9
+ ZW5TaGlmdCBUZXN0MSIwIAYDVQQDDBl0ZXN0Lm9wZW5zaGlmdC5yZWRoYXQuY29t
10
+ MSgwJgYJKoZIhvcNAQkBFhl0ZXN0QG9wZW5zaGlmdC5yZWRoYXQuY29tMIIBIjAN
11
+ BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA08M8AZMgpYY+BJ6Of2LVf+vGKCmP
12
+ 0nMSGe9ESy2LDlgF5TRhg38XyryvkzBI1IBc/0+VuDxh5IbxGFUkBNsdVz9xfKKB
13
+ b1LBxVI9QuhlKyY0V+VsUAwMLOQGh7YnThBrLlSE4+oWha5mnfnC4qRaeI3LOOYe
14
+ jCaVH3ee/+gzcGKf5IW+cSbF97/++38AHHIW8x87sBfZBkP05ZiVKW1zsMS1HZMa
15
+ wc2JfvZaJZZqzezphwzfPxS11MbucceZEIqj1u47qT6957dZ/uDpmS+uPZBMS/FZ
16
+ xsnHpUIiAAP1Dm4jQXON62NfrR54Jr0O7/Z4XV42GF6R0Z2xEuoP1CDUmwIDAQAB
17
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBx9MAVgYBSWGlc1Ja5vJYeYOc1eRUAGljWQN1Y
18
+ t3/iEenIu8ZLEYKqUQEFzDvjUhaVOyW4XpoLR6SQdcvOGt54aYQ5a5sRPmXtaJjm
19
+ 9ic3lJuZ+c4He4APl7j0xQ0IQPNwbqkIe6MFxISq0/4+iJDQgOTmoXm5WKKP1b48
20
+ 8s3xyJaky2LEKoUvng81/TjvOE6i7MPSGBaT64kGm1DwYjLGm8C7Q8e6fDpTAR9H
21
+ ukfpcIRls7mrqtP4vvhf5+NngJ6Ubo7hrcrWLijGub1+QAo8XlXxp9258sED+Vyx
22
+ 0596NONiYyu3h7eyD4BcawfSE0dPm0bNcq+XTMnhK3tVriTB
23
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEA08M8AZMgpYY+BJ6Of2LVf+vGKCmP0nMSGe9ESy2LDlgF5TRh
3
+ g38XyryvkzBI1IBc/0+VuDxh5IbxGFUkBNsdVz9xfKKBb1LBxVI9QuhlKyY0V+Vs
4
+ UAwMLOQGh7YnThBrLlSE4+oWha5mnfnC4qRaeI3LOOYejCaVH3ee/+gzcGKf5IW+
5
+ cSbF97/++38AHHIW8x87sBfZBkP05ZiVKW1zsMS1HZMawc2JfvZaJZZqzezphwzf
6
+ PxS11MbucceZEIqj1u47qT6957dZ/uDpmS+uPZBMS/FZxsnHpUIiAAP1Dm4jQXON
7
+ 62NfrR54Jr0O7/Z4XV42GF6R0Z2xEuoP1CDUmwIDAQABAoIBAQCrb/ani7Y1a13Q
8
+ HZFdneUcwANXxnYSOWihKGzQtBlMzoRPUD3V2FGpp2I5NjDwIM+pPoQGeJQEEB8l
9
+ xN/5Mm8pkEpPTbyeJJCNMAw6m6wz56Uet7UdhPNicGS9AAIIGBC9nF1Nqtj69vtK
10
+ z8Yv+EDqMlkhQmPesOmvZQeLRDBIvYUdKFMc2tvBBqAkVUbcpRICUmHbAjyGs3qi
11
+ +K3eBym9Hhv5ICLNAsvSHUwb/vVN0uvr5qMrcl8kFWBsNgCac6dj3eAMU90olV4x
12
+ BjmRBln30RlwbVbUKownVqpyCi+JCEENQ74Dcg9eQkpyTC/csL+7E1IeaLoz8aKA
13
+ uAGhF6SRAoGBAP5jtNY70HHPDjyB4ySkuaJKvt316MASqOp79Q4vvrAPVAuX2LlX
14
+ ce0WzFid5ZssfTBQ5QnX3gDGnJ+daZS3QwgquDEfyR8rdkxnhfcjrl79+vLom394
15
+ vUMA8dS/ctk2lN7UQq3qXkqg2cBkJ2sd0FkjYgRmdWcVysKEOrxiCi7DAoGBANUa
16
+ cSEoLfluI4XPfeXe6IYlfdnQkk+0uyUD+XnKPj3Sh8YEh0xx/24fAIY9gEtTSiXK
17
+ E+a0iVoRcF6Kr/1jj4BYoZTG67RqsJWDr8ISnMES+dfQoKOWQg4GTPbCvMlluBwH
18
+ dPCgDS3xgXw7MmJTsnvn69nVQTIzFZFZ5GAJ1pVJAoGAGpvFQ49YGz9kJtITNzb/
19
+ r8kPs9nP8Z9CCdzTYht+X54K1XeZlLFf2kPDNhW1+YgqxA4CFwh8USp1IYDulT6i
20
+ BU2qnIDNobQDGLTPX21dBNSeFiBce3Xeng6QPQeVdMDvy2r6WoSkPjwa6rPPJ7Yj
21
+ n99ClmE9MH4oCjaYijHbDM8CgYBb3mtY7PZs6oNb42iWGbPKaQ1JQnZg8DwhqAX7
22
+ 8ClHA6TOxBMD7L0+XxUdyhOt5Xk4s1ZDBh+UeaIkz8sxBKPPo+X8uojQnZIE0uGJ
23
+ W/bB8YlN9b3a6CMP4r15P9idRkHJq5lJRuaHoO6+fNKquwReEEyH+zyBBK7Om58t
24
+ m/ArKQKBgQCcamRni3FOi6kK8YT/cv4Tobx4e8qwOJcX+93E8DdrB2UP3MLfkwA5
25
+ thThxl4Lub50bgtUJ5yfNDS0nCZed/Ax/SqzizvCCJbw7BqSOBbJv/BSsql3k1FD
26
+ hoBg8a1zkB8dDQNoKj2Om5NM7U+rL1Ujp9uW/qcLaejuks3C441FGw==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDKzCCApSgAwIBAgICOcMwDQYJKoZIhvcNAQEFBQAwgbExCzAJBgNVBAYTAi0t
3
+ MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK
4
+ DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV
5
+ bml0MRkwFwYDVQQDDBBpcC0xMC0xMi0xMjMtMjI5MSQwIgYJKoZIhvcNAQkBFhVy
6
+ b290QGlwLTEwLTEyLTEyMy0yMjkwHhcNMTIxMjE2MDUyNzA3WhcNMTMxMjE2MDUy
7
+ NzA3WjCBsTELMAkGA1UEBhMCLS0xEjAQBgNVBAgMCVNvbWVTdGF0ZTERMA8GA1UE
8
+ BwwIU29tZUNpdHkxGTAXBgNVBAoMEFNvbWVPcmdhbml6YXRpb24xHzAdBgNVBAsM
9
+ FlNvbWVPcmdhbml6YXRpb25hbFVuaXQxGTAXBgNVBAMMEGlwLTEwLTEyLTEyMy0y
10
+ MjkxJDAiBgkqhkiG9w0BCQEWFXJvb3RAaXAtMTAtMTItMTIzLTIyOTCBnzANBgkq
11
+ hkiG9w0BAQEFAAOBjQAwgYkCgYEA5yEY0irLovUbcFoCnhon8zo4yp68+UBBtJ3A
12
+ 0apkSHhU+P29/YgKTbMoSu0xGTiDnih77KY3jq5SS3O7kKMrqA8otqp96Hl4iB+X
13
+ KNa9njZIP5FS3RmS2nOzrlNQvSwOjK4cHJYkzH6ozIBOgz3qaCNC8skmNCdb0LmZ
14
+ TX9lYssCAwEAAaNQME4wHQYDVR0OBBYEFIoxHQJuFHsreItT4b6Vx9XB5rrtMB8G
15
+ A1UdIwQYMBaAFIoxHQJuFHsreItT4b6Vx9XB5rrtMAwGA1UdEwQFMAMBAf8wDQYJ
16
+ KoZIhvcNAQEFBQADgYEAHDAQGgA5PmauN0GKJuUbHkH/L7cBgxs6B2Rnbx8r+zJM
17
+ a3OdnEhJRwhfXEsw47Uo7Uo78auCPNO5VQCMxmSwejJ7BbsWuqpKpKL/UsZv3qeJ
18
+ pyXCQnzYnYsuTe1b72AZ7ek6S4s5Utc5L+sqWOM+WcKODC5yxrEQPrtMjXKNXZY=
19
+ -----END CERTIFICATE-----
@@ -1,5 +1,6 @@
1
1
  require 'webmock/rspec'
2
2
  require 'rhc/rest'
3
+ require 'rhc/rest/mock'
3
4
  require 'rhc/exceptions'
4
5
  require 'base64'
5
6
 
@@ -21,377 +22,8 @@ if RUBY_VERSION.to_f == 1.8
21
22
  end
22
23
 
23
24
  module RestSpecHelper
24
- def mock_user
25
- "test_user"
26
- end
27
-
28
- def stub_api_request(method, uri, with_auth=true)
29
- stub_request(method, mock_href(uri, with_auth)).
30
- with(&user_agent_header)
31
- end
32
-
33
- def mock_pass
34
- "test pass"
35
- end
36
-
37
- def mock_uri
38
- "test.domain.com"
39
- end
40
-
41
- # Creates consistent hrefs for testing
42
- def mock_href(relative="", with_auth=false)
43
- uri_string = mock_uri
44
- if (with_auth == true)
45
- uri_string = mock_user + ":" + mock_pass + "@" + mock_uri
46
- end
47
- "https://#{uri_string}/#{relative}"
48
- end
49
-
50
- # This formats link lists for JSONification
51
- def mock_response_links(links)
52
- link_set = {}
53
- links.each do |link|
54
- operation = link[0]
55
- href = link[1]
56
- method = link[2]
57
- # Note that the 'relative' key/value pair below is a convenience for testing;
58
- # this is not used by the API classes.
59
- link_set[operation] = { 'href' => mock_href(href), 'method' => method, 'relative' => href }
60
- end
61
- return link_set
62
- end
63
-
64
- def mock_app_links(domain_id='test_domain',app_id='test_app')
65
- [['ADD_CARTRIDGE', "domains/#{domain_id}/apps/#{app_id}/carts/add", 'post'],
66
- ['LIST_CARTRIDGES', "domains/#{domain_id}/apps/#{app_id}/carts/", 'get' ],
67
- ['GET_GEAR_GROUPS', "domains/#{domain_id}/apps/#{app_id}/gear_groups", 'get' ],
68
- ['START', "domains/#{domain_id}/apps/#{app_id}/start", 'post'],
69
- ['STOP', "domains/#{domain_id}/apps/#{app_id}/stop", 'post'],
70
- ['RESTART', "domains/#{domain_id}/apps/#{app_id}/restart", 'post'],
71
- ['THREAD_DUMP', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
72
- ['ADD_ALIAS', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
73
- ['REMOVE_ALIAS', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
74
- ['DELETE', "domains/#{domain_id}/apps/#{app_id}/delete", 'post']]
75
- end
76
-
77
- def mock_cart_links(domain_id='test_domain',app_id='test_app',cart_id='test_cart')
78
- [['START', "domains/#{domain_id}/apps/#{app_id}/carts/#{cart_id}/start", 'post'],
79
- ['STOP', "domains/#{domain_id}/apps/#{app_id}/carts/#{cart_id}/stop", 'post'],
80
- ['RESTART', "domains/#{domain_id}/apps/#{app_id}/carts/#{cart_id}/restart", 'post'],
81
- ['DELETE', "domains/#{domain_id}/apps/#{app_id}/carts/#{cart_id}/delete", 'post']]
82
- end
83
-
84
- def mock_client_links
85
- [['GET_USER', 'user/', 'get' ],
86
- ['ADD_DOMAIN', 'domains/add', 'post'],
87
- ['LIST_DOMAINS', 'domains/', 'get' ],
88
- ['LIST_CARTRIDGES', 'cartridges/', 'get' ]]
89
- end
90
-
91
- def mock_domain_links(domain_id='test_domain')
92
- [['ADD_APPLICATION', "domains/#{domain_id}/apps/add", 'post'],
93
- ['LIST_APPLICATIONS', "domains/#{domain_id}/apps/", 'get' ],
94
- ['UPDATE', "domains/#{domain_id}/update", 'post'],
95
- ['DELETE', "domains/#{domain_id}/delete", 'post']]
96
- end
97
-
98
- def mock_key_links(key_id='test_key')
99
- [['UPDATE', "user/keys/#{key_id}/update", 'post'],
100
- ['DELETE', "user/keys/#{key_id}/delete", 'post']]
101
- end
102
-
103
- def mock_user_links
104
- [['ADD_KEY', 'user/keys/add', 'post'],
105
- ['LIST_KEYS', 'user/keys/', 'get' ]]
106
- end
107
-
108
- def mock_cartridge_response(cart_count=1)
109
- carts = []
110
- while carts.length < cart_count
111
- carts << {
112
- :name => "mock_cart_#{carts.length}",
113
- :type => "mock_cart_#{carts.length}_type",
114
- :base_gear_storage => 1,
115
- :additional_gear_storage => 0,
116
- :links => mock_response_links(mock_cart_links('mock_domain','mock_app',"mock_cart_#{carts.length}"))
117
- }
118
- end
119
-
120
- carts = carts[0] if cart_count == 1
121
- type = cart_count == 1 ? 'cartridge' : 'cartridges'
122
-
123
- return {
124
- :body => {
125
- :type => type,
126
- :data => carts
127
- }.to_json,
128
- :status => 200
129
- }
130
- end
131
-
132
- def mock_gear_groups_response()
133
- groups = [{}]
134
- type = 'gear_groups'
135
-
136
- return {
137
- :body => {
138
- :type => type,
139
- :data => groups
140
- }.to_json,
141
- :status => 200
142
- }
143
- end
144
-
145
- def mock_cart_properties
146
- {:cart_data => {:connection_url => {'name' => 'connection_url', 'value' => "http://fake.url" }}}
147
- end
148
-
149
- class MockRestClient < RHC::Rest::Client
150
- def initialize
151
- RHC::Rest::Client.stub(:new) { self }
152
- @domains = []
153
- @user = MockRestUser.new(RHC::Config.username)
154
- @__json_args__= {:links => mock_response_links(mock_client_links)}
155
- end
156
-
157
- def user
158
- @user
159
- end
160
-
161
- def domains
162
- @domains
163
- end
164
-
165
- def cartridges
166
- [MockRestCartridge.new("mock_cart-1", "embedded"), # code should sort this to be after standalone
167
- MockRestCartridge.new("mock_standalone_cart-1", "standalone"),
168
- MockRestCartridge.new("mock_standalone_cart-2", "standalone"),
169
- MockRestCartridge.new("mock_unique_standalone_cart-1", "standalone"),
170
- MockRestCartridge.new("jenkins-1.4", "standalone"),
171
- MockRestCartridge.new("mock_cart-2", "embedded"),
172
- MockRestCartridge.new("unique_mock_cart-1", "embedded"),
173
- MockRestCartridge.new("jenkins-client-1.4", "embedded")]
174
- end
175
-
176
- def add_domain(id)
177
- d = MockRestDomain.new(id, self)
178
- @domains << d
179
- d
180
- end
181
-
182
- def sshkeys
183
- @user.keys
184
- end
185
-
186
- def add_key(name, type, content)
187
- @user.add_key(name, type, content)
188
- end
189
-
190
- def delete_key(name)
191
- @user.keys.delete_if { |key| key.name == name }
192
- end
193
- end
194
-
195
- class MockRestUser < RHC::Rest::User
196
- def initialize(login)
197
- @login = login
198
- @keys = [
199
- MockRestKey.new('mockkey1', 'ssh-rsa', 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDNK8xT3O+kSltmCMsSqBfAgheB3YFJ9Y0ESJnFjFASVxH70AcCQAgdQSD/r31+atYShJdP7f0AMWiQUTw2tK434XSylnZWEyIR0V+j+cyOPdVQlns6D5gPOnOtweFF0o18YulwCOK8Q1H28GK8qyWhLe0FcMmxtKbbQgaVRvQdXZz4ThzutCJOyJm9xVb93+fatvwZW76oLLvfFJcJSOK2sgW7tJM2A83bm4mwixFDF7wO/+C9WA+PgPKJUIjvy1gZjBhRB+3b58vLOnYhPOgMNruJwzB+wJ3pg8tLJEjxSbHyyoi6OqMBs4BVV7LdzvwTDxEjcgtHVvaVNXgO5iRX'),
200
- MockRestKey.new('mockkey2', 'ssh-dsa', 'AAAAB3NzaC1kc3MAAACBAPaaFj6Xjrjd8Dc4AAkJe0HigqaXMxj/87xHoV+nPgerHIceJWhPUWdW40lSASrgpAV9Eq4zzD+L19kgYdbMw0vSX5Cj3XtNOsow9MmMxFsYjTxCv4eSs/rLdGPaYZ5GVRPDu8tN42Bm8lj5o+ky3HzwW+mkQMZwcADQIgqtn6QhAAAAFQCirDfIMf/JoMOFf8CTnsTKWw/0zwAAAIAIQp6t2sLIp1d2TBfd/qLjOJA10rPADcnhBzWB/cd/oFJ8a/2nmxeSPR5Ov18T6itWqbKwvZw2UC0MrXoYbgcfVNP/ym1bCd9rB5hu1sg8WO4JIxA/47PZooT6PwTKVxHuENEzQyJL2o6ZJq+wuV0taLvm6IaM5TAZuEJ2p4TC/gAAAIBpLcVXZREa7XLY55nyidt/+UC+PxpjhPHOHbzL1OvWEaumN4wcJk/JZPppgXX9+WDkTm1SD891U0cXnGMTP0OZOHkOUHF2ZcfUe7p9kX4WjHs0OccoxV0Lny6MC4DjalJyaaEbijJHSUX3QlLcBOlPHJWpEpvWQ9P8AN4PokiGzA==')
201
- ]
202
- end
203
-
204
- def keys
205
- @keys
206
- end
207
-
208
- def add_key(name, type, content)
209
- @keys << MockRestKey.new(name, type, content)
210
- end
211
- end
212
-
213
- class MockRestDomain < RHC::Rest::Domain
214
- def initialize(id, client)
215
- @id = id
216
- @client = client
217
- @applications = []
218
- @__json_args__= {:links => mock_response_links(mock_domain_links('mock_domain_0'))}
219
- end
220
-
221
- def update(id)
222
- @id = id
223
- self
224
- end
225
-
226
- def destroy
227
- raise RHC::Rest::ClientErrorException.new("Applications must be empty.") unless @applications.empty?
228
- @client.domains.delete_if { |d| d.id == @id }
229
-
230
- @client = nil
231
- @applications = nil
232
- end
233
-
234
- def add_application(name, type=nil, scale=nil, gear_profile='default')
235
- if type.is_a?(Hash)
236
- scale = type[:scale]
237
- gear_profile = type[:gear_profile]
238
- type = type[:cartridge]
239
- end
240
- a = MockRestApplication.new(name, type, self, scale, gear_profile)
241
- @applications << a
242
- a.add_message("Success")
243
- a
244
- end
245
-
246
- def applications
247
- @applications
248
- end
249
- end
250
-
251
- class MockRestGearGroup < RHC::Rest::GearGroup
252
- def initialize
253
- @cartridges = [{'name' => 'fake_geargroup_cart-0.1'}]
254
- @gears = [{'state' => 'started', 'id' => 'fakegearid'}]
255
- end
256
- end
257
-
258
- class MockRestApplication < RHC::Rest::Application
259
- def fakeuuid
260
- "fakeuuidfortests#{@name}"
261
- end
262
-
263
- def initialize(name, type, domain, scale=nil, gear_profile='default')
264
- @name = name
265
- @domain = domain
266
- @cartridges = []
267
- @creation_time = "now"
268
- @uuid = fakeuuid
269
- @git_url = "git:fake.foo/git/#{@name}.git"
270
- @app_url = "https://#{@name}-#{@domain.id}.fake.foo/"
271
- @ssh_url = "ssh://#{@uuid}@127.0.0.1"
272
- @embedded = {}
273
- @aliases = []
274
- @gear_profile = gear_profile
275
- if scale
276
- @scalable = true
277
- @embedded = {"haproxy-1.4" => {:info => ""}}
278
- end
279
- @__json_args__= {:links => mock_response_links(mock_app_links('mock_domain_0', 'mock_app_0'))}
280
- cart = add_cartridge(type, false) if type
281
- if scale
282
- cart.scales_to = -1
283
- cart.scales_from = 2
284
- cart.current_scale = 2
285
- cart.scales_with = "haproxy-1.4"
286
- end
287
- @framework = type
288
- @messages = []
289
- end
290
-
291
- def destroy
292
- @domain.applications.delete self
293
- end
294
-
295
- def add_cartridge(name, embedded=true, additional_storage=0)
296
- type = embedded ? "embedded" : "standalone"
297
- c = MockRestCartridge.new(name, type, self, mock_cart_properties, additional_storage)
298
- @cartridges << c
299
- c
300
- end
301
-
302
- def gear_groups
303
- # we don't have heavy interaction with gear groups yet so keep this simple
304
- @gear_groups ||= [MockRestGearGroup.new]
305
- end
306
-
307
- def cartridges
308
- @cartridges
309
- end
310
-
311
- def start
312
- @app
313
- end
314
-
315
- def stop(*args)
316
- @app
317
- end
318
-
319
- def restart
320
- @app
321
- end
322
-
323
- def reload
324
- @app
325
- end
326
-
327
- def tidy
328
- @app
329
- end
330
- end
331
-
332
- class MockRestCartridge < RHC::Rest::Cartridge
333
- attr_accessor :scales_to, :scales_from, :current_scale, :scales_with, :display_name, :base_gear_storage, :additional_gear_storage
334
- def initialize(name, type, app=nil, properties=mock_cart_properties, additional_storage=0)
335
- @name = name
336
- @display_name = name
337
- @type = type
338
- @app = app
339
- @properties = properties
340
- @status_messages = [{"message" => "started", "gear_id" => "123"}]
341
- @scales_from = 1
342
- @scales_to = 1
343
- @current_scale = 1
344
- @base_gear_storage = 1
345
- @additional_gear_storage = additional_storage
346
- end
347
-
348
- def destroy
349
- @app.cartridges.delete self
350
- end
351
-
352
- def status
353
- @status_messages
354
- end
355
-
356
- def start
357
- @status_messages = [{"message" => "started", "gear_id" => "123"}]
358
- @app
359
- end
360
-
361
- def stop
362
- @status_messages = [{"message" => "stopped", "gear_id" => "123"}]
363
- @app
364
- end
365
-
366
- def restart
367
- @status_messages = [{"message" => "started", "gear_id" => "123"}]
368
- @app
369
- end
370
-
371
- def reload
372
- @app
373
- end
374
-
375
- def set_scales(values)
376
- values.delete_if{|k,v| v.nil? }
377
- @scales_from = values[:scales_from] if values[:scales_from]
378
- @scales_to = values[:scales_to] if values[:scales_to]
379
- self
380
- end
381
-
382
- def set_storage(values)
383
- @additional_gear_storage = values[:additional_storage]
384
- self
385
- end
386
- end
387
-
388
- class MockRestKey < RHC::Rest::Key
389
- def initialize(name, type, content)
390
- @name = name
391
- @type = type
392
- @content = content
393
- end
394
- end
25
+ include RHC::Rest::Mock::Helpers
26
+ include RHC::Rest::Mock
395
27
  end
396
28
 
397
29
  Spec::Runner.configure do |configuration|