cf_script 0.0.1.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/CHANGELOG.md +0 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE +22 -0
  6. data/README.md +84 -0
  7. data/Rakefile +33 -0
  8. data/cf_script.gemspec +34 -0
  9. data/lib/cf_script/callbacks.rb +43 -0
  10. data/lib/cf_script/command/base.rb +57 -0
  11. data/lib/cf_script/command/cf/apps/app.rb +19 -0
  12. data/lib/cf_script/command/cf/apps/apps.rb +44 -0
  13. data/lib/cf_script/command/cf/apps/env.rb +20 -0
  14. data/lib/cf_script/command/cf/apps/push.rb +47 -0
  15. data/lib/cf_script/command/cf/apps/restage.rb +19 -0
  16. data/lib/cf_script/command/cf/apps/restart.rb +19 -0
  17. data/lib/cf_script/command/cf/apps/set_env.rb +18 -0
  18. data/lib/cf_script/command/cf/apps/start.rb +19 -0
  19. data/lib/cf_script/command/cf/apps/stop.rb +19 -0
  20. data/lib/cf_script/command/cf/apps/unset_env.rb +18 -0
  21. data/lib/cf_script/command/cf/apps.rb +55 -0
  22. data/lib/cf_script/command/cf/general/api.rb +36 -0
  23. data/lib/cf_script/command/cf/general/auth.rb +28 -0
  24. data/lib/cf_script/command/cf/general/login.rb +42 -0
  25. data/lib/cf_script/command/cf/general/logout.rb +15 -0
  26. data/lib/cf_script/command/cf/general/target.rb +64 -0
  27. data/lib/cf_script/command/cf/general.rb +15 -0
  28. data/lib/cf_script/command/cf/routes/check_route.rb +17 -0
  29. data/lib/cf_script/command/cf/routes/create_route.rb +19 -0
  30. data/lib/cf_script/command/cf/routes/delete_route.rb +19 -0
  31. data/lib/cf_script/command/cf/routes/map_route.rb +30 -0
  32. data/lib/cf_script/command/cf/routes/routes.rb +40 -0
  33. data/lib/cf_script/command/cf/routes/unmap_route.rb +30 -0
  34. data/lib/cf_script/command/cf/routes.rb +17 -0
  35. data/lib/cf_script/command/cf/spaces/space.rb +36 -0
  36. data/lib/cf_script/command/cf/spaces/spaces.rb +23 -0
  37. data/lib/cf_script/command/cf/spaces.rb +9 -0
  38. data/lib/cf_script/command/error.rb +5 -0
  39. data/lib/cf_script/command/line.rb +105 -0
  40. data/lib/cf_script/command/registry.rb +50 -0
  41. data/lib/cf_script/command/runner.rb +97 -0
  42. data/lib/cf_script/command.rb +44 -0
  43. data/lib/cf_script/config.rb +60 -0
  44. data/lib/cf_script/executor/non_blocking.rb +107 -0
  45. data/lib/cf_script/executor/recorder.rb +16 -0
  46. data/lib/cf_script/executor/simple.rb +17 -0
  47. data/lib/cf_script/executor.rb +5 -0
  48. data/lib/cf_script/manifest.rb +38 -0
  49. data/lib/cf_script/object/api_endpoint.rb +10 -0
  50. data/lib/cf_script/object/app_info.rb +69 -0
  51. data/lib/cf_script/object/app_list.rb +24 -0
  52. data/lib/cf_script/object/app_spec.rb +55 -0
  53. data/lib/cf_script/object/attribute.rb +18 -0
  54. data/lib/cf_script/object/attribute_list.rb +40 -0
  55. data/lib/cf_script/object/instance_status.rb +29 -0
  56. data/lib/cf_script/object/route_info.rb +14 -0
  57. data/lib/cf_script/object/space.rb +17 -0
  58. data/lib/cf_script/object/target.rb +23 -0
  59. data/lib/cf_script/object.rb +24 -0
  60. data/lib/cf_script/output/buffer.rb +74 -0
  61. data/lib/cf_script/output/parser/attributes.rb +44 -0
  62. data/lib/cf_script/output/parser/section.rb +15 -0
  63. data/lib/cf_script/output/parser/table.rb +46 -0
  64. data/lib/cf_script/output/parser.rb +15 -0
  65. data/lib/cf_script/output/tests.rb +51 -0
  66. data/lib/cf_script/output/utils.rb +13 -0
  67. data/lib/cf_script/output.rb +62 -0
  68. data/lib/cf_script/scope/app/env.rb +15 -0
  69. data/lib/cf_script/scope/app/routes.rb +21 -0
  70. data/lib/cf_script/scope/app/state.rb +33 -0
  71. data/lib/cf_script/scope/app/utils.rb +32 -0
  72. data/lib/cf_script/scope/app.rb +94 -0
  73. data/lib/cf_script/scope/proxy.rb +36 -0
  74. data/lib/cf_script/scope/script.rb +59 -0
  75. data/lib/cf_script/scope/space.rb +9 -0
  76. data/lib/cf_script/scope/target.rb +90 -0
  77. data/lib/cf_script/scope.rb +68 -0
  78. data/lib/cf_script/ui.rb +261 -0
  79. data/lib/cf_script/utils.rb +19 -0
  80. data/lib/cf_script/version.rb +3 -0
  81. data/lib/cf_script.rb +105 -0
  82. data/test/fixtures/commands/apps/app/good.yml +18 -0
  83. data/test/fixtures/commands/apps/app/not_found.yml +8 -0
  84. data/test/fixtures/commands/apps/app/running.yml +19 -0
  85. data/test/fixtures/commands/apps/apps/good.yml +14 -0
  86. data/test/fixtures/commands/apps/apps/no_apps.yml +10 -0
  87. data/test/fixtures/commands/apps/env/empty.yml +37 -0
  88. data/test/fixtures/commands/apps/env/good.yml +41 -0
  89. data/test/fixtures/commands/apps/push/good.yml +60 -0
  90. data/test/fixtures/commands/apps/restage/good.yml +48 -0
  91. data/test/fixtures/commands/apps/restage/not_found.yml +8 -0
  92. data/test/fixtures/commands/apps/restart/good.yml +35 -0
  93. data/test/fixtures/commands/apps/restart/not_found.yml +8 -0
  94. data/test/fixtures/commands/apps/set_env/empty.yml +5 -0
  95. data/test/fixtures/commands/apps/set_env/good.yml +9 -0
  96. data/test/fixtures/commands/apps/set_env/not_found.yml +8 -0
  97. data/test/fixtures/commands/apps/start/good.yml +32 -0
  98. data/test/fixtures/commands/apps/start/not_found.yml +8 -0
  99. data/test/fixtures/commands/apps/start/with_container.yml +98 -0
  100. data/test/fixtures/commands/apps/stop/good.yml +8 -0
  101. data/test/fixtures/commands/apps/stop/not_found.yml +8 -0
  102. data/test/fixtures/commands/apps/unset_env/empty.yml +5 -0
  103. data/test/fixtures/commands/apps/unset_env/good.yml +9 -0
  104. data/test/fixtures/commands/apps/unset_env/not_found.yml +8 -0
  105. data/test/fixtures/commands/common/fail.yml +5 -0
  106. data/test/fixtures/commands/common/no_endpoint.yml +11 -0
  107. data/test/fixtures/commands/common/no_login.yml +8 -0
  108. data/test/fixtures/commands/general/api/bad_argument.yml +9 -0
  109. data/test/fixtures/commands/general/api/bad_endpoint.yml +9 -0
  110. data/test/fixtures/commands/general/api/good.yml +7 -0
  111. data/test/fixtures/commands/general/api/not_set.yml +7 -0
  112. data/test/fixtures/commands/general/api/set.yml +7 -0
  113. data/test/fixtures/commands/general/auth/empty.yml +5 -0
  114. data/test/fixtures/commands/general/auth/good.yml +10 -0
  115. data/test/fixtures/commands/general/auth/rejected.yml +10 -0
  116. data/test/fixtures/commands/general/login/good.yml +8 -0
  117. data/test/fixtures/commands/general/login/rejected.yml +23 -0
  118. data/test/fixtures/commands/general/logout/good.yml +8 -0
  119. data/test/fixtures/commands/general/target/empty.yml +5 -0
  120. data/test/fixtures/commands/general/target/good.yml +11 -0
  121. data/test/fixtures/commands/general/target/no_space.yml +10 -0
  122. data/test/fixtures/commands/general/target/not_found.yml +9 -0
  123. data/test/fixtures/commands/general/target/production.yml +11 -0
  124. data/test/fixtures/commands/general/target/staging.yml +11 -0
  125. data/test/fixtures/commands/general/target/staging_org.yml +11 -0
  126. data/test/fixtures/commands/general/target/test.yml +11 -0
  127. data/test/fixtures/commands/routes/check_route/good.yml +9 -0
  128. data/test/fixtures/commands/routes/check_route/no_domain.yml +9 -0
  129. data/test/fixtures/commands/routes/check_route/no_route.yml +9 -0
  130. data/test/fixtures/commands/routes/create_route/exists.yml +9 -0
  131. data/test/fixtures/commands/routes/create_route/good.yml +8 -0
  132. data/test/fixtures/commands/routes/delete_route/good.yml +8 -0
  133. data/test/fixtures/commands/routes/delete_route/not_exist.yml +8 -0
  134. data/test/fixtures/commands/routes/map_route/good.yml +10 -0
  135. data/test/fixtures/commands/routes/map_route/host_taken.yml +10 -0
  136. data/test/fixtures/commands/routes/map_route/invalid.yml +9 -0
  137. data/test/fixtures/commands/routes/map_route/no_app.yml +8 -0
  138. data/test/fixtures/commands/routes/map_route/no_domain.yml +9 -0
  139. data/test/fixtures/commands/routes/routes/good.yml +14 -0
  140. data/test/fixtures/commands/routes/unmap_route/good.yml +8 -0
  141. data/test/fixtures/commands/routes/unmap_route/no_app.yml +8 -0
  142. data/test/fixtures/commands/routes/unmap_route/no_domain.yml +9 -0
  143. data/test/fixtures/commands/spaces/space/empty.yml +5 -0
  144. data/test/fixtures/commands/spaces/space/good.yml +16 -0
  145. data/test/fixtures/commands/spaces/space/staging.yml +16 -0
  146. data/test/fixtures/commands/spaces/spaces/empty.yml +5 -0
  147. data/test/fixtures/commands/spaces/spaces/good.yml +12 -0
  148. data/test/lib/cf_script/command/base_test.rb +21 -0
  149. data/test/lib/cf_script/command/cf/apps/app_test.rb +56 -0
  150. data/test/lib/cf_script/command/cf/apps/apps_test.rb +81 -0
  151. data/test/lib/cf_script/command/cf/apps/env_test.rb +55 -0
  152. data/test/lib/cf_script/command/cf/apps/push_test.rb +46 -0
  153. data/test/lib/cf_script/command/cf/apps/restage_test.rb +47 -0
  154. data/test/lib/cf_script/command/cf/apps/restart_test.rb +47 -0
  155. data/test/lib/cf_script/command/cf/apps/set_env_test.rb +38 -0
  156. data/test/lib/cf_script/command/cf/apps/start_test.rb +55 -0
  157. data/test/lib/cf_script/command/cf/apps/stop_test.rb +35 -0
  158. data/test/lib/cf_script/command/cf/apps/unset_env_test.rb +38 -0
  159. data/test/lib/cf_script/command/cf/general/api_test.rb +55 -0
  160. data/test/lib/cf_script/command/cf/general/auth_test.rb +76 -0
  161. data/test/lib/cf_script/command/cf/general/login_test.rb +80 -0
  162. data/test/lib/cf_script/command/cf/general/logout_test.rb +34 -0
  163. data/test/lib/cf_script/command/cf/general/target_test.rb +110 -0
  164. data/test/lib/cf_script/command/cf/routes/check_route_test.rb +31 -0
  165. data/test/lib/cf_script/command/cf/routes/create_route_test.rb +19 -0
  166. data/test/lib/cf_script/command/cf/routes/delete_route_test.rb +19 -0
  167. data/test/lib/cf_script/command/cf/routes/map_route_test.rb +56 -0
  168. data/test/lib/cf_script/command/cf/routes/routes_test.rb +24 -0
  169. data/test/lib/cf_script/command/cf/routes/unmap_route_test.rb +36 -0
  170. data/test/lib/cf_script/command/cf/spaces/space_test.rb +55 -0
  171. data/test/lib/cf_script/command/cf/spaces/spaces_test.rb +47 -0
  172. data/test/lib/cf_script/command/line_test.rb +59 -0
  173. data/test/lib/cf_script/object/api_endpoint_test.rb +19 -0
  174. data/test/lib/cf_script/object/app_info_test.rb +127 -0
  175. data/test/lib/cf_script/object/app_list_test.rb +51 -0
  176. data/test/lib/cf_script/object/attribute_list_test.rb +42 -0
  177. data/test/lib/cf_script/object/attribute_test.rb +29 -0
  178. data/test/lib/cf_script/object/instance_status_test.rb +37 -0
  179. data/test/lib/cf_script/object/space_test.rb +31 -0
  180. data/test/lib/cf_script/object/target_test.rb +41 -0
  181. data/test/lib/cf_script/output/buffer_test.rb +73 -0
  182. data/test/lib/cf_script/output/parser/attributes_test.rb +102 -0
  183. data/test/lib/cf_script/output/parser/section_test.rb +60 -0
  184. data/test/lib/cf_script/output/parser/table_test.rb +108 -0
  185. data/test/lib/cf_script/output/tests_test.rb +91 -0
  186. data/test/lib/cf_script/output_test.rb +134 -0
  187. data/test/lib/cf_script/scope/app/state_test.rb +61 -0
  188. data/test/lib/cf_script/scope/app_test.rb +101 -0
  189. data/test/lib/cf_script/scope/script_test.rb +88 -0
  190. data/test/lib/cf_script/scope/space_test.rb +27 -0
  191. data/test/lib/cf_script/scope/target_test.rb +158 -0
  192. data/test/lib/cf_script/scope_test.rb +41 -0
  193. data/test/lib/cf_script/utils_test.rb +20 -0
  194. data/test/lib/cf_script_test.rb +73 -0
  195. data/test/support/assertions.rb +14 -0
  196. data/test/support/helpers/config_context.rb +19 -0
  197. data/test/support/helpers/fixture_executor.rb +79 -0
  198. data/test/support/helpers/mock_execution.rb +58 -0
  199. data/test/support/helpers/object_helpers.rb +29 -0
  200. data/test/support/helpers/output_sink.rb +25 -0
  201. data/test/support/helpers.rb +3 -0
  202. data/test/support/shared_examples/command_object.rb +38 -0
  203. data/test/support/shared_examples.rb +30 -0
  204. data/test/test_helper.rb +34 -0
  205. metadata +321 -0
@@ -0,0 +1,9 @@
1
+ ---
2
+ stdout: |
3
+ FAILED
4
+ Error resolving route:
5
+ Server error, status code: 400, error code: 210001, message: The route is invalid: domain invalid_relation
6
+
7
+ stderr: ''
8
+ status:
9
+ exitstatus: 1
@@ -0,0 +1,8 @@
1
+ ---
2
+ stdout: |
3
+ FAILED
4
+ App api not found
5
+
6
+ stderr: ''
7
+ status:
8
+ exitstatus: 1
@@ -0,0 +1,9 @@
1
+ ---
2
+ stdout: |
3
+ Checking for route...
4
+ FAILED
5
+ Domain example.com not found
6
+
7
+ stderr: ''
8
+ status:
9
+ exitstatus: 1
@@ -0,0 +1,14 @@
1
+ ---
2
+ stdout: |
3
+ Getting routes as user@example.com ...
4
+
5
+ space host domain apps
6
+ development users example.io
7
+ development api example.io api, users
8
+ development org-development-frontend-green example.ps
9
+ development org-development-projects-green example.io
10
+ development org-projects example.io projects-green
11
+
12
+ stderr: ''
13
+ status:
14
+ exitstatus: 0
@@ -0,0 +1,8 @@
1
+ ---
2
+ stdout: |
3
+ Removing route api.example.com from app api in org ACME / space development as user@example.com...
4
+ OK
5
+
6
+ stderr: ''
7
+ status:
8
+ exitstatus: 0
@@ -0,0 +1,8 @@
1
+ ---
2
+ stdout: |
3
+ FAILED
4
+ App api not found
5
+
6
+ stderr: ''
7
+ status:
8
+ exitstatus: 1
@@ -0,0 +1,9 @@
1
+ ---
2
+ stdout: |
3
+ Checking for route...
4
+ FAILED
5
+ Domain example.com not found
6
+
7
+ stderr: ''
8
+ status:
9
+ exitstatus: 1
@@ -0,0 +1,5 @@
1
+ ---
2
+ stdout: ''
3
+ stderr: ''
4
+ status:
5
+ exitstatus: 0
@@ -0,0 +1,16 @@
1
+ ---
2
+ stdout: |
3
+ Getting info for space staging in org ACME as user@example.com...
4
+ OK
5
+
6
+ staging
7
+ Org: ACME
8
+ Apps: org-frontend-staging, org-backend-staging
9
+ Domains: cf.io, example.com
10
+ Services: org-db, org-cache
11
+ Security Groups: ssh, dns, log
12
+ Space Quota:
13
+
14
+ stderr: ''
15
+ status:
16
+ exitstatus: 0
@@ -0,0 +1,16 @@
1
+ ---
2
+ stdout: |
3
+ Getting info for space staging in org ACME as user@example.com...
4
+ OK
5
+
6
+ staging
7
+ Org: ACME
8
+ Apps: org-frontend-staging, org-backend-staging
9
+ Domains: cf.io, example.com
10
+ Services: org-db, org-cache
11
+ Security Groups: ssh, dns, log
12
+ Space Quota:
13
+
14
+ stderr: ''
15
+ status:
16
+ exitstatus: 0
@@ -0,0 +1,5 @@
1
+ ---
2
+ stdout: ''
3
+ stderr: ''
4
+ status:
5
+ exitstatus: 0
@@ -0,0 +1,12 @@
1
+ ---
2
+ stdout: |
3
+ Getting spaces in org ACME as user@example.com...
4
+
5
+ name
6
+ development
7
+ staging
8
+ production
9
+
10
+ stderr: ''
11
+ status:
12
+ exitstatus: 0
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ describe CfScript::Command::Base do
4
+ class TestCommand < CfScript::Command::Base
5
+ def initialize
6
+ super(:test, :dummy)
7
+ end
8
+ end
9
+
10
+ it "defines a line method that returns a Command::Line object" do
11
+ line = TestCommand.instance.line({}, 'cf', [])
12
+
13
+ assert_instance_of CfScript::Command::Line, line
14
+ end
15
+
16
+ it "raises an exception if run is called" do
17
+ assert_raises(RuntimeError) {
18
+ TestCommand.instance.run
19
+ }
20
+ end
21
+ end
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ describe 'AppCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::AppCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :app,
11
+ fails_with: nil
12
+ }
13
+
14
+ it "returns an App object" do
15
+ fake_cf do
16
+ app = command.run(:frontend)
17
+
18
+ assert_kind_of CfScript::AppInfo, app
19
+ end
20
+ end
21
+
22
+ it "yields an App object when a block is given" do
23
+ fake_cf do
24
+ called = false
25
+
26
+ command.run(:worker) do |app|
27
+ called = true
28
+
29
+ assert_kind_of CfScript::AppInfo, app
30
+ end
31
+
32
+ assert called, "Expected block to have been called"
33
+ end
34
+ end
35
+
36
+ it "returns nil when the app is not found" do
37
+ fake_cf app: :not_found do
38
+ assert_equal nil, command.run(:api)
39
+ end
40
+ end
41
+
42
+ it "includes status line" do
43
+ fake_cf app: :running do |stdout, srderr|
44
+ app = command.run(:frontend)
45
+
46
+ assert_kind_of CfScript::AppInfo, app
47
+
48
+ assert_instance_of Array, app.instance_status
49
+ assert_equal 1, app.instance_status.length
50
+
51
+ app.instance_status.each do |instance_status|
52
+ assert_instance_of CfScript::InstanceStatus, instance_status
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,81 @@
1
+ require 'test_helper'
2
+
3
+ describe 'AppsCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::AppsCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :apps,
11
+ fails_with: []
12
+ }
13
+
14
+ it "returns an AppList object" do
15
+ fake_cf do
16
+ apps = command.run
17
+
18
+ assert_instance_of CfScript::AppList, apps
19
+ apps.each do |app_info|
20
+ assert_instance_of CfScript::AppInfo, app_info
21
+ end
22
+ end
23
+ end
24
+
25
+ it "yields an AppList object when a block is given" do
26
+ fake_cf do
27
+ called = false
28
+
29
+ command.run do |apps|
30
+ called = true
31
+
32
+ assert_instance_of CfScript::AppList, apps
33
+ apps.each do |app_info|
34
+ assert_instance_of CfScript::AppInfo, app_info
35
+ end
36
+ end
37
+
38
+ assert called, "Expected block to have been called"
39
+ end
40
+ end
41
+
42
+ it "correctly builds the AppInfo objects" do
43
+ fake_cf do
44
+ apps = command.run
45
+
46
+ assert_equal [
47
+ 'org-one-api',
48
+ 'org-one-worker',
49
+ 'org-two-api',
50
+ 'org-two-worker'
51
+ ], apps.map(&:name)
52
+
53
+ assert_equal [
54
+ 'stopped',
55
+ 'started',
56
+ 'stopped',
57
+ 'started'
58
+ ], apps.map(&:requested_state)
59
+
60
+ assert_equal ['0/1', '1/3', '0/2', '1/1'], apps.map(&:instances)
61
+ assert_equal ['256M', '1G', '256M', '2G'], apps.map(&:memory)
62
+ assert_equal ['1G', '2G', '3G', '4G'], apps.map(&:disk)
63
+
64
+ assert_equal [
65
+ ['example.com', 'example.net'],
66
+ [],
67
+ ['example.io', 'example.org'],
68
+ []
69
+ ], apps.map(&:urls)
70
+ end
71
+ end
72
+
73
+ it "returns an empty Array when no apps are found" do
74
+ fake_cf apps: :no_apps do
75
+ apps = command.run
76
+
77
+ assert_instance_of Array, apps
78
+ assert_equal [], apps
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ describe 'EnvCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::EnvCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :env,
11
+ fails_with: {}
12
+ }
13
+
14
+ it "returns a Hash" do
15
+ expected = {
16
+ 'SERVER_HOSTNAME' => 'host.example.com',
17
+ 'SERVER_HOSTPORT' => '1234',
18
+ 'SERVER_USERNAME' => 'name',
19
+ 'SERVER_PASSWORD' => 'word',
20
+ }
21
+
22
+ fake_cf do
23
+ envs = command.run(:worker)
24
+
25
+ assert_instance_of Hash, envs
26
+
27
+ assert_equal expected.length, envs.length
28
+
29
+ expected.each do |name, value|
30
+ assert_equal expected[name], envs[name]
31
+ end
32
+ end
33
+ end
34
+
35
+ it "yields a Hash when a block is given" do
36
+ fake_cf do
37
+ called = false
38
+
39
+ command.run(:worker) do |envs|
40
+ assert_instance_of Hash, envs
41
+ assert_equal 4, envs.length
42
+
43
+ called = true
44
+ end
45
+
46
+ assert called, "Expected block to have been called"
47
+ end
48
+ end
49
+
50
+ it "returns an empty Hash when no env variables are found" do
51
+ fake_cf env: :empty do
52
+ assert_equal({}, command.run(:worker))
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ describe 'PushCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::PushCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :push,
11
+ fails_with: nil
12
+ }
13
+
14
+ it "returns an AppInfo object on success" do
15
+ fake_cf do
16
+ app_info = command.run(:worker)
17
+
18
+ assert_instance_of CfScript::AppInfo, app_info
19
+ end
20
+ end
21
+
22
+ it "translates long option names to cf's short ones" do
23
+ fake_cf do
24
+ assert_equal({ f: 'a' }, command.translate_options({ manifest: 'a' }))
25
+ assert_equal({ i: 'a' }, command.translate_options({ instances: 'a' }))
26
+ assert_equal({ m: 'a' }, command.translate_options({ memory: 'a' }))
27
+ assert_equal({ c: 'a' }, command.translate_options({ command: 'a' }))
28
+ assert_equal({ b: 'a' }, command.translate_options({ buildpack: 'a' }))
29
+ assert_equal({ n: 'a' }, command.translate_options({ hostname: 'a' }))
30
+ assert_equal({ d: 'a' }, command.translate_options({ domain: 'a' }))
31
+ assert_equal({ k: 'a' }, command.translate_options({ disk: 'a' }))
32
+ assert_equal({ p: 'a' }, command.translate_options({ path: 'a' }))
33
+ assert_equal({ s: 'a' }, command.translate_options({ stack: 'a' }))
34
+ assert_equal({ t: 'a' }, command.translate_options({ timeout: 'a' }))
35
+ assert_equal({ o: 'a' }, command.translate_options({ docker_image: 'a' }))
36
+ assert_equal({ u: 'a' }, command.translate_options({ health_check_type: 'a' }))
37
+
38
+ assert_equal(
39
+ { m: 'b', c: 'a', u: 'd', k: 'c' },
40
+ command.translate_options(
41
+ { command: 'a', memory: 'b', disk: 'c', health_check_type: 'd' }
42
+ )
43
+ )
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ describe 'RestageCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::RestageCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :restage,
11
+ fails_with: nil
12
+ }
13
+
14
+ let(:expected_instances) {[
15
+ {
16
+ index: '#0',
17
+ state: 'running',
18
+ since: '2015-12-25 00:00:00 AM',
19
+ cpu: '42.0%',
20
+ memory: '12.3M of 256M',
21
+ disk: '45.6M of 1G',
22
+ details: ''
23
+ }, {
24
+ index: '#1',
25
+ state: 'stopped',
26
+ since: '2015-12-25 00:00:00 AM',
27
+ cpu: '0.0%',
28
+ memory: '0M of 256M',
29
+ disk: '45.6M of 1G',
30
+ details: ''
31
+ },
32
+ ]}
33
+
34
+ it "returns an AppStaus object with its instance_status set on success" do
35
+ fake_cf do
36
+ app_info = command.run(:some_app)
37
+
38
+ assert_app_info(app_info, expected_instances)
39
+ end
40
+ end
41
+
42
+ it "returns nil on failure" do
43
+ fake_cf restage: :not_found do
44
+ assert_equal nil, command.run(:some_app)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ describe 'RestartCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::RestartCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :restart,
11
+ fails_with: nil
12
+ }
13
+
14
+ let(:expected_instances) {[
15
+ {
16
+ index: '#0',
17
+ state: 'running',
18
+ since: '2015-12-25 00:00:00 AM',
19
+ cpu: '42.0%',
20
+ memory: '12.3M of 256M',
21
+ disk: '45.6M of 1G',
22
+ details: ''
23
+ }, {
24
+ index: '#1',
25
+ state: 'stopped',
26
+ since: '2015-12-25 00:00:00 AM',
27
+ cpu: '0.0%',
28
+ memory: '0M of 256M',
29
+ disk: '45.6M of 1G',
30
+ details: ''
31
+ },
32
+ ]}
33
+
34
+ it "returns an AppStaus object with its instance_status set on success" do
35
+ fake_cf do
36
+ app_info = command.run(:some_app)
37
+
38
+ assert_app_info(app_info, expected_instances)
39
+ end
40
+ end
41
+
42
+ it "returns nil on failure" do
43
+ fake_cf restart: :not_found do
44
+ assert_equal nil, command.run(:some_app)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ describe 'SetEnvCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::SetEnvCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :set_env,
11
+ fails_with: false
12
+ }
13
+
14
+ it "returns true on success" do
15
+ fake_cf do |o, e|
16
+ result = command.run(:worker, 'NAME', 'VALUE')
17
+
18
+ assert_equal true, result
19
+ end
20
+ end
21
+
22
+ it "returns false if the output was empty" do
23
+ fake_cf set_env: :empty do
24
+ result = command.run(:app, 'NAME', 'VALUE')
25
+
26
+ assert_equal false, result
27
+ end
28
+ end
29
+
30
+ it "prints an error on failure" do
31
+ fake_cf set_env: :not_found do |stdout, stderr|
32
+ result = command.run(:api, 'API_PASSWORD', 'password')
33
+
34
+ assert_equal false, result
35
+ assert_match /\{set_env\} FAILED/, stderr.lines.first
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ describe 'StartCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::StartCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :start,
11
+ fails_with: nil
12
+ }
13
+
14
+ let(:expected_instances) {[
15
+ {
16
+ index: '#0',
17
+ state: 'running',
18
+ since: '2015-12-25 00:00:00 AM',
19
+ cpu: '42.0%',
20
+ memory: '12.3M of 256M',
21
+ disk: '45.6M of 1G',
22
+ details: ''
23
+ }, {
24
+ index: '#1',
25
+ state: 'stopped',
26
+ since: '2015-12-25 00:00:00 AM',
27
+ cpu: '0.0%',
28
+ memory: '0M of 256M',
29
+ disk: '45.6M of 1G',
30
+ details: ''
31
+ },
32
+ ]}
33
+
34
+ it "returns an AppStaus object with its instance_status set on success" do
35
+ fake_cf do
36
+ app_info = command.run(:some_app)
37
+
38
+ assert_app_info(app_info, expected_instances)
39
+ end
40
+ end
41
+
42
+ it "correctly handles container creation output" do
43
+ fake_cf start: :with_container do
44
+ app_info = command.run(:frontend)
45
+
46
+ assert_app_info(app_info, expected_instances)
47
+ end
48
+ end
49
+
50
+ it "returns nil on failure" do
51
+ fake_cf start: :not_found do
52
+ assert_equal nil, command.run(:some_app)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ describe 'StopCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::StopCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :stop,
11
+ fails_with: false
12
+ }
13
+
14
+ it "returns true on success" do
15
+ fake_cf do
16
+ assert command.run(:worker)
17
+ end
18
+ end
19
+
20
+ it "prints an error on failure" do
21
+ fake_cf stop: :not_found do |stdout, stderr|
22
+ command.run(:bogus)
23
+
24
+ assert_match /\{stop\} failed to stop/, stderr.lines.first
25
+ end
26
+ end
27
+
28
+ it "returns false when the app is not found" do
29
+ fake_cf stop: :not_found do |stdout, stderr|
30
+ refute command.run(:bogus)
31
+
32
+ assert_match /\{stop\} failed to stop/, stderr.lines.first
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ describe 'UnsetEnvCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::UnsetEnvCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :unset_env,
11
+ fails_with: false
12
+ }
13
+
14
+ it "returns true on success" do
15
+ fake_cf do |o, e|
16
+ result = command.run(:worker, 'NAME')
17
+
18
+ assert_equal true, result
19
+ end
20
+ end
21
+
22
+ it "returns false if the output was empty" do
23
+ fake_cf unset_env: :empty do
24
+ result = command.run(:app, 'NAME')
25
+
26
+ assert_equal false, result
27
+ end
28
+ end
29
+
30
+ it "prints an error on failure" do
31
+ fake_cf unset_env: :not_found do |stdout, stderr|
32
+ result = command.run(:bogus, 'VAR_NAME')
33
+
34
+ assert_equal false, result
35
+ assert_match /\{unset_env\} FAILED/, stderr.lines.first
36
+ end
37
+ end
38
+ end