cf_script 0.0.1.beta.1
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.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +12 -0
- data/LICENSE +22 -0
- data/README.md +84 -0
- data/Rakefile +33 -0
- data/cf_script.gemspec +34 -0
- data/lib/cf_script/callbacks.rb +43 -0
- data/lib/cf_script/command/base.rb +57 -0
- data/lib/cf_script/command/cf/apps/app.rb +19 -0
- data/lib/cf_script/command/cf/apps/apps.rb +44 -0
- data/lib/cf_script/command/cf/apps/env.rb +20 -0
- data/lib/cf_script/command/cf/apps/push.rb +47 -0
- data/lib/cf_script/command/cf/apps/restage.rb +19 -0
- data/lib/cf_script/command/cf/apps/restart.rb +19 -0
- data/lib/cf_script/command/cf/apps/set_env.rb +18 -0
- data/lib/cf_script/command/cf/apps/start.rb +19 -0
- data/lib/cf_script/command/cf/apps/stop.rb +19 -0
- data/lib/cf_script/command/cf/apps/unset_env.rb +18 -0
- data/lib/cf_script/command/cf/apps.rb +55 -0
- data/lib/cf_script/command/cf/general/api.rb +36 -0
- data/lib/cf_script/command/cf/general/auth.rb +28 -0
- data/lib/cf_script/command/cf/general/login.rb +42 -0
- data/lib/cf_script/command/cf/general/logout.rb +15 -0
- data/lib/cf_script/command/cf/general/target.rb +64 -0
- data/lib/cf_script/command/cf/general.rb +15 -0
- data/lib/cf_script/command/cf/routes/check_route.rb +17 -0
- data/lib/cf_script/command/cf/routes/create_route.rb +19 -0
- data/lib/cf_script/command/cf/routes/delete_route.rb +19 -0
- data/lib/cf_script/command/cf/routes/map_route.rb +30 -0
- data/lib/cf_script/command/cf/routes/routes.rb +40 -0
- data/lib/cf_script/command/cf/routes/unmap_route.rb +30 -0
- data/lib/cf_script/command/cf/routes.rb +17 -0
- data/lib/cf_script/command/cf/spaces/space.rb +36 -0
- data/lib/cf_script/command/cf/spaces/spaces.rb +23 -0
- data/lib/cf_script/command/cf/spaces.rb +9 -0
- data/lib/cf_script/command/error.rb +5 -0
- data/lib/cf_script/command/line.rb +105 -0
- data/lib/cf_script/command/registry.rb +50 -0
- data/lib/cf_script/command/runner.rb +97 -0
- data/lib/cf_script/command.rb +44 -0
- data/lib/cf_script/config.rb +60 -0
- data/lib/cf_script/executor/non_blocking.rb +107 -0
- data/lib/cf_script/executor/recorder.rb +16 -0
- data/lib/cf_script/executor/simple.rb +17 -0
- data/lib/cf_script/executor.rb +5 -0
- data/lib/cf_script/manifest.rb +38 -0
- data/lib/cf_script/object/api_endpoint.rb +10 -0
- data/lib/cf_script/object/app_info.rb +69 -0
- data/lib/cf_script/object/app_list.rb +24 -0
- data/lib/cf_script/object/app_spec.rb +55 -0
- data/lib/cf_script/object/attribute.rb +18 -0
- data/lib/cf_script/object/attribute_list.rb +40 -0
- data/lib/cf_script/object/instance_status.rb +29 -0
- data/lib/cf_script/object/route_info.rb +14 -0
- data/lib/cf_script/object/space.rb +17 -0
- data/lib/cf_script/object/target.rb +23 -0
- data/lib/cf_script/object.rb +24 -0
- data/lib/cf_script/output/buffer.rb +74 -0
- data/lib/cf_script/output/parser/attributes.rb +44 -0
- data/lib/cf_script/output/parser/section.rb +15 -0
- data/lib/cf_script/output/parser/table.rb +46 -0
- data/lib/cf_script/output/parser.rb +15 -0
- data/lib/cf_script/output/tests.rb +51 -0
- data/lib/cf_script/output/utils.rb +13 -0
- data/lib/cf_script/output.rb +62 -0
- data/lib/cf_script/scope/app/env.rb +15 -0
- data/lib/cf_script/scope/app/routes.rb +21 -0
- data/lib/cf_script/scope/app/state.rb +33 -0
- data/lib/cf_script/scope/app/utils.rb +32 -0
- data/lib/cf_script/scope/app.rb +94 -0
- data/lib/cf_script/scope/proxy.rb +36 -0
- data/lib/cf_script/scope/script.rb +59 -0
- data/lib/cf_script/scope/space.rb +9 -0
- data/lib/cf_script/scope/target.rb +90 -0
- data/lib/cf_script/scope.rb +68 -0
- data/lib/cf_script/ui.rb +261 -0
- data/lib/cf_script/utils.rb +19 -0
- data/lib/cf_script/version.rb +3 -0
- data/lib/cf_script.rb +105 -0
- data/test/fixtures/commands/apps/app/good.yml +18 -0
- data/test/fixtures/commands/apps/app/not_found.yml +8 -0
- data/test/fixtures/commands/apps/app/running.yml +19 -0
- data/test/fixtures/commands/apps/apps/good.yml +14 -0
- data/test/fixtures/commands/apps/apps/no_apps.yml +10 -0
- data/test/fixtures/commands/apps/env/empty.yml +37 -0
- data/test/fixtures/commands/apps/env/good.yml +41 -0
- data/test/fixtures/commands/apps/push/good.yml +60 -0
- data/test/fixtures/commands/apps/restage/good.yml +48 -0
- data/test/fixtures/commands/apps/restage/not_found.yml +8 -0
- data/test/fixtures/commands/apps/restart/good.yml +35 -0
- data/test/fixtures/commands/apps/restart/not_found.yml +8 -0
- data/test/fixtures/commands/apps/set_env/empty.yml +5 -0
- data/test/fixtures/commands/apps/set_env/good.yml +9 -0
- data/test/fixtures/commands/apps/set_env/not_found.yml +8 -0
- data/test/fixtures/commands/apps/start/good.yml +32 -0
- data/test/fixtures/commands/apps/start/not_found.yml +8 -0
- data/test/fixtures/commands/apps/start/with_container.yml +98 -0
- data/test/fixtures/commands/apps/stop/good.yml +8 -0
- data/test/fixtures/commands/apps/stop/not_found.yml +8 -0
- data/test/fixtures/commands/apps/unset_env/empty.yml +5 -0
- data/test/fixtures/commands/apps/unset_env/good.yml +9 -0
- data/test/fixtures/commands/apps/unset_env/not_found.yml +8 -0
- data/test/fixtures/commands/common/fail.yml +5 -0
- data/test/fixtures/commands/common/no_endpoint.yml +11 -0
- data/test/fixtures/commands/common/no_login.yml +8 -0
- data/test/fixtures/commands/general/api/bad_argument.yml +9 -0
- data/test/fixtures/commands/general/api/bad_endpoint.yml +9 -0
- data/test/fixtures/commands/general/api/good.yml +7 -0
- data/test/fixtures/commands/general/api/not_set.yml +7 -0
- data/test/fixtures/commands/general/api/set.yml +7 -0
- data/test/fixtures/commands/general/auth/empty.yml +5 -0
- data/test/fixtures/commands/general/auth/good.yml +10 -0
- data/test/fixtures/commands/general/auth/rejected.yml +10 -0
- data/test/fixtures/commands/general/login/good.yml +8 -0
- data/test/fixtures/commands/general/login/rejected.yml +23 -0
- data/test/fixtures/commands/general/logout/good.yml +8 -0
- data/test/fixtures/commands/general/target/empty.yml +5 -0
- data/test/fixtures/commands/general/target/good.yml +11 -0
- data/test/fixtures/commands/general/target/no_space.yml +10 -0
- data/test/fixtures/commands/general/target/not_found.yml +9 -0
- data/test/fixtures/commands/general/target/production.yml +11 -0
- data/test/fixtures/commands/general/target/staging.yml +11 -0
- data/test/fixtures/commands/general/target/staging_org.yml +11 -0
- data/test/fixtures/commands/general/target/test.yml +11 -0
- data/test/fixtures/commands/routes/check_route/good.yml +9 -0
- data/test/fixtures/commands/routes/check_route/no_domain.yml +9 -0
- data/test/fixtures/commands/routes/check_route/no_route.yml +9 -0
- data/test/fixtures/commands/routes/create_route/exists.yml +9 -0
- data/test/fixtures/commands/routes/create_route/good.yml +8 -0
- data/test/fixtures/commands/routes/delete_route/good.yml +8 -0
- data/test/fixtures/commands/routes/delete_route/not_exist.yml +8 -0
- data/test/fixtures/commands/routes/map_route/good.yml +10 -0
- data/test/fixtures/commands/routes/map_route/host_taken.yml +10 -0
- data/test/fixtures/commands/routes/map_route/invalid.yml +9 -0
- data/test/fixtures/commands/routes/map_route/no_app.yml +8 -0
- data/test/fixtures/commands/routes/map_route/no_domain.yml +9 -0
- data/test/fixtures/commands/routes/routes/good.yml +14 -0
- data/test/fixtures/commands/routes/unmap_route/good.yml +8 -0
- data/test/fixtures/commands/routes/unmap_route/no_app.yml +8 -0
- data/test/fixtures/commands/routes/unmap_route/no_domain.yml +9 -0
- data/test/fixtures/commands/spaces/space/empty.yml +5 -0
- data/test/fixtures/commands/spaces/space/good.yml +16 -0
- data/test/fixtures/commands/spaces/space/staging.yml +16 -0
- data/test/fixtures/commands/spaces/spaces/empty.yml +5 -0
- data/test/fixtures/commands/spaces/spaces/good.yml +12 -0
- data/test/lib/cf_script/command/base_test.rb +21 -0
- data/test/lib/cf_script/command/cf/apps/app_test.rb +56 -0
- data/test/lib/cf_script/command/cf/apps/apps_test.rb +81 -0
- data/test/lib/cf_script/command/cf/apps/env_test.rb +55 -0
- data/test/lib/cf_script/command/cf/apps/push_test.rb +46 -0
- data/test/lib/cf_script/command/cf/apps/restage_test.rb +47 -0
- data/test/lib/cf_script/command/cf/apps/restart_test.rb +47 -0
- data/test/lib/cf_script/command/cf/apps/set_env_test.rb +38 -0
- data/test/lib/cf_script/command/cf/apps/start_test.rb +55 -0
- data/test/lib/cf_script/command/cf/apps/stop_test.rb +35 -0
- data/test/lib/cf_script/command/cf/apps/unset_env_test.rb +38 -0
- data/test/lib/cf_script/command/cf/general/api_test.rb +55 -0
- data/test/lib/cf_script/command/cf/general/auth_test.rb +76 -0
- data/test/lib/cf_script/command/cf/general/login_test.rb +80 -0
- data/test/lib/cf_script/command/cf/general/logout_test.rb +34 -0
- data/test/lib/cf_script/command/cf/general/target_test.rb +110 -0
- data/test/lib/cf_script/command/cf/routes/check_route_test.rb +31 -0
- data/test/lib/cf_script/command/cf/routes/create_route_test.rb +19 -0
- data/test/lib/cf_script/command/cf/routes/delete_route_test.rb +19 -0
- data/test/lib/cf_script/command/cf/routes/map_route_test.rb +56 -0
- data/test/lib/cf_script/command/cf/routes/routes_test.rb +24 -0
- data/test/lib/cf_script/command/cf/routes/unmap_route_test.rb +36 -0
- data/test/lib/cf_script/command/cf/spaces/space_test.rb +55 -0
- data/test/lib/cf_script/command/cf/spaces/spaces_test.rb +47 -0
- data/test/lib/cf_script/command/line_test.rb +59 -0
- data/test/lib/cf_script/object/api_endpoint_test.rb +19 -0
- data/test/lib/cf_script/object/app_info_test.rb +127 -0
- data/test/lib/cf_script/object/app_list_test.rb +51 -0
- data/test/lib/cf_script/object/attribute_list_test.rb +42 -0
- data/test/lib/cf_script/object/attribute_test.rb +29 -0
- data/test/lib/cf_script/object/instance_status_test.rb +37 -0
- data/test/lib/cf_script/object/space_test.rb +31 -0
- data/test/lib/cf_script/object/target_test.rb +41 -0
- data/test/lib/cf_script/output/buffer_test.rb +73 -0
- data/test/lib/cf_script/output/parser/attributes_test.rb +102 -0
- data/test/lib/cf_script/output/parser/section_test.rb +60 -0
- data/test/lib/cf_script/output/parser/table_test.rb +108 -0
- data/test/lib/cf_script/output/tests_test.rb +91 -0
- data/test/lib/cf_script/output_test.rb +134 -0
- data/test/lib/cf_script/scope/app/state_test.rb +61 -0
- data/test/lib/cf_script/scope/app_test.rb +101 -0
- data/test/lib/cf_script/scope/script_test.rb +88 -0
- data/test/lib/cf_script/scope/space_test.rb +27 -0
- data/test/lib/cf_script/scope/target_test.rb +158 -0
- data/test/lib/cf_script/scope_test.rb +41 -0
- data/test/lib/cf_script/utils_test.rb +20 -0
- data/test/lib/cf_script_test.rb +73 -0
- data/test/support/assertions.rb +14 -0
- data/test/support/helpers/config_context.rb +19 -0
- data/test/support/helpers/fixture_executor.rb +79 -0
- data/test/support/helpers/mock_execution.rb +58 -0
- data/test/support/helpers/object_helpers.rb +29 -0
- data/test/support/helpers/output_sink.rb +25 -0
- data/test/support/helpers.rb +3 -0
- data/test/support/shared_examples/command_object.rb +38 -0
- data/test/support/shared_examples.rb +30 -0
- data/test/test_helper.rb +34 -0
- metadata +321 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'ApiCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::General::ApiCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :general,
|
|
10
|
+
has_name: :api,
|
|
11
|
+
fails_with: nil
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
describe "without an argument" do
|
|
15
|
+
it "returns the current api endpoint" do
|
|
16
|
+
fake_cf api: :good do |stdout, stderr|
|
|
17
|
+
endpoint = command.run
|
|
18
|
+
|
|
19
|
+
assert_instance_of CfScript::ApiEndpoint, endpoint
|
|
20
|
+
assert_equal 'https://api.cf.io', endpoint.url
|
|
21
|
+
assert_equal '1.0.0', endpoint.version
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "returns nil when the api endpoint is not set" do
|
|
26
|
+
fake_cf api: :not_set do |stdout, stderr|
|
|
27
|
+
assert_equal nil, command.run
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "with an argument" do
|
|
33
|
+
it "sets the current api endpoint and returns its object" do
|
|
34
|
+
fake_cf api: :set do |stdout, stderr|
|
|
35
|
+
endpoint = command.run 'https://api.test.com'
|
|
36
|
+
|
|
37
|
+
assert_instance_of CfScript::ApiEndpoint, endpoint
|
|
38
|
+
assert_equal 'https://api.test.com', endpoint.url
|
|
39
|
+
assert_equal '1.2.3', endpoint.version
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "returns nil when the argument is invalid" do
|
|
44
|
+
fake_cf api: :bad_argument do |stdout, stderr|
|
|
45
|
+
assert_equal nil, command.run('')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "returns nil when the endpoint is invalid" do
|
|
50
|
+
fake_cf api: :bad_endpoint do |stdout, stderr|
|
|
51
|
+
assert_equal nil, command.run('https://api.example.com')
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'AuthCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::General::AuthCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :general,
|
|
10
|
+
has_name: :auth,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run('user', 'pass')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "returns false when credentials get rejected" do
|
|
21
|
+
fake_cf auth: :rejected do
|
|
22
|
+
assert_equal false, command.run('user', 'pass')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "returns false if the output is empty" do
|
|
27
|
+
fake_cf auth: :empty do
|
|
28
|
+
result = command.run('name', 'word')
|
|
29
|
+
|
|
30
|
+
assert_equal false, result
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "hides the password in trace messages" do
|
|
35
|
+
fake_cf do |stdout, stderr|
|
|
36
|
+
command.run('user', 'pass')
|
|
37
|
+
|
|
38
|
+
assert_includes stdout, "<running> cf auth user [PASSWORD HIDDEN]\n"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "prints an error when credentials get rejected" do
|
|
43
|
+
fake_cf auth: :rejected do |stdout, stderr|
|
|
44
|
+
command.run('user', 'pass')
|
|
45
|
+
|
|
46
|
+
assert_includes stderr.lines, "{auth} Credentials were rejected\n"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "with a block" do
|
|
51
|
+
it "yields true on success" do
|
|
52
|
+
fake_cf do
|
|
53
|
+
called = false
|
|
54
|
+
|
|
55
|
+
command.run 'user', 'pass' do |logged_in|
|
|
56
|
+
assert_equal true, logged_in
|
|
57
|
+
called = true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
assert called, "Expected block to have been called"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "does not yield on failure" do
|
|
65
|
+
fake_cf auth: :fail do
|
|
66
|
+
called = false
|
|
67
|
+
|
|
68
|
+
command.run 'user', 'pass' do |logged_in|
|
|
69
|
+
called = true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
refute called, "Expected block to not have been called"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'LoginCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::General::LoginCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :general,
|
|
10
|
+
has_name: :login,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run('user', 'pass')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "include api, org, and space options" do
|
|
21
|
+
options = {
|
|
22
|
+
api: 'https://api.example.io',
|
|
23
|
+
org: 'ACME',
|
|
24
|
+
space: 'staging'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
fake_cf do |stdout, stderr|
|
|
28
|
+
command.run('user', 'pass', options)
|
|
29
|
+
|
|
30
|
+
trace = stdout.lines.last
|
|
31
|
+
assert_match /cf login/, trace
|
|
32
|
+
assert_match /-u user -p \[PASSWORD HIDDEN\]/, trace
|
|
33
|
+
assert_match /-a https:\/\/api.example.io/, trace
|
|
34
|
+
assert_match /-o ACME/, trace
|
|
35
|
+
assert_match /-s staging/, trace
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "returns false when credentials get rejected" do
|
|
40
|
+
fake_cf login: :rejected do
|
|
41
|
+
assert_equal false, command.run('user', 'pass')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "prints an error when credentials get rejected" do
|
|
46
|
+
fake_cf login: :rejected do |stdout, stderr|
|
|
47
|
+
command.run('user', 'pass')
|
|
48
|
+
|
|
49
|
+
assert_includes stdout.lines, "<running> cf login -u user -p [PASSWORD HIDDEN]\n"
|
|
50
|
+
assert_includes stderr.lines, "{login} Credentials were rejected\n"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe "with a block" do
|
|
55
|
+
it "yields true on success" do
|
|
56
|
+
fake_cf do
|
|
57
|
+
called = false
|
|
58
|
+
|
|
59
|
+
command.run 'user', 'pass' do |logged_in|
|
|
60
|
+
assert_equal true, logged_in
|
|
61
|
+
called = true
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
assert called, "Expected block to have been called"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "does not yield on failure" do
|
|
69
|
+
fake_cf login: :fail do
|
|
70
|
+
called = false
|
|
71
|
+
|
|
72
|
+
command.run 'user', 'pass' do |logged_in|
|
|
73
|
+
called = true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
refute called, "Expected block to not have been called"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'LogoutCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::General::LogoutCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :general,
|
|
10
|
+
has_name: :logout,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "with a block" do
|
|
21
|
+
it "yields true" do
|
|
22
|
+
fake_cf do
|
|
23
|
+
called = false
|
|
24
|
+
|
|
25
|
+
command.run do |logged_out|
|
|
26
|
+
assert_equal true, logged_out
|
|
27
|
+
called = true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
assert called, "Expected block to have been called"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'TargetCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::General::TargetCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :general,
|
|
10
|
+
has_name: :target,
|
|
11
|
+
fails_with: nil
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns nil and prints an error on parsing failure" do
|
|
15
|
+
fake_cf target: :empty do |stdout, stderr|
|
|
16
|
+
assert_equal nil, command.run
|
|
17
|
+
|
|
18
|
+
assert_includes stderr.lines, "{target} object is nil\n"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "without an argument" do
|
|
23
|
+
it "returns the current target's attributes" do
|
|
24
|
+
expected = {
|
|
25
|
+
api_endpoint: 'https://api.cf.io (API version: 1.0.0)',
|
|
26
|
+
org: 'ACME',
|
|
27
|
+
user: 'user@example.com',
|
|
28
|
+
space: 'development'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
fake_cf target: :good do
|
|
32
|
+
target = command.run
|
|
33
|
+
|
|
34
|
+
expected.keys.each do |key|
|
|
35
|
+
assert_equal expected[key], target.send(key)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "returns a blank space name when there isn't a current one targeted" do
|
|
41
|
+
expected = {
|
|
42
|
+
api_endpoint: 'https://api.cf.io (API version: 1.0.0)',
|
|
43
|
+
org: 'ACME',
|
|
44
|
+
user: 'user@example.com',
|
|
45
|
+
space: ''
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fake_cf target: :no_space do |stdout, stderr|
|
|
49
|
+
target = command.run
|
|
50
|
+
|
|
51
|
+
expected.keys.each do |key|
|
|
52
|
+
assert_equal expected[key], target.send(key)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "with an argument" do
|
|
59
|
+
it "returns the target attributes for the given space" do
|
|
60
|
+
expected = {
|
|
61
|
+
api_endpoint: 'https://api.cf.io (API version: 1.0.0)',
|
|
62
|
+
org: 'ACME',
|
|
63
|
+
user: 'user@example.com',
|
|
64
|
+
space: 'staging'
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
fake_cf target: :staging do
|
|
68
|
+
target = command.run(:staging)
|
|
69
|
+
|
|
70
|
+
expected.keys.each do |key|
|
|
71
|
+
assert_equal expected[key], target.send(key)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "returns nil and prints an error when the space is not found" do
|
|
77
|
+
fake_cf do |stdout, stderr|
|
|
78
|
+
assert_equal nil, command.run(:not_found)
|
|
79
|
+
|
|
80
|
+
assert_includes stderr.lines, "{target} Space not_found not found\n"
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe "without a block" do
|
|
86
|
+
it "returns an object with the target's attributes" do
|
|
87
|
+
fake_cf target: :good do
|
|
88
|
+
target = command.run
|
|
89
|
+
|
|
90
|
+
assert_respond_to target, :api_endpoint
|
|
91
|
+
assert_respond_to target, :org
|
|
92
|
+
assert_respond_to target, :user
|
|
93
|
+
assert_respond_to target, :space
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe "with a block" do
|
|
99
|
+
it "yields an object with the target's attributes" do
|
|
100
|
+
fake_cf target: :good do |stdout, stderr|
|
|
101
|
+
command.run do |target|
|
|
102
|
+
assert_respond_to target, :api_endpoint
|
|
103
|
+
assert_respond_to target, :org
|
|
104
|
+
assert_respond_to target, :user
|
|
105
|
+
assert_respond_to target, :space
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'CheckRouteCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Routes::CheckRouteCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :routes,
|
|
10
|
+
has_name: :check_route,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run('api', 'example.com')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "returns false when the route does not exist" do
|
|
21
|
+
fake_cf check_route: :no_route do
|
|
22
|
+
assert_equal false, command.run('api', 'example.com')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "returns false when the domain does not exist" do
|
|
27
|
+
fake_cf check_route: :no_domain do
|
|
28
|
+
assert_equal false, command.run('api', 'example.com')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'CreateRouteCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Routes::CreateRouteCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :routes,
|
|
10
|
+
has_name: :create_route,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run(:staging, :api, 'example.com')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'DeleteRouteCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Routes::DeleteRouteCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :routes,
|
|
10
|
+
has_name: :delete_route,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run('example.com', :api)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'MapRouteCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Routes::MapRouteCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :routes,
|
|
10
|
+
has_name: :map_route,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run(:api, 'example.com')
|
|
17
|
+
assert_equal true, command.run(:api, 'example.com', 'api')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "prints an error and returns false when the route is invalid" do
|
|
22
|
+
fake_cf map_route: :invalid do |stdout, stderr|
|
|
23
|
+
assert_equal false, command.run(:api, 'example.com')
|
|
24
|
+
|
|
25
|
+
assert_match /\{map_route\}/, stderr.lines.last
|
|
26
|
+
assert_match /Server error/, stderr.lines.last
|
|
27
|
+
assert_match /route is invalid/, stderr.lines.last
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "prints an error and returns false when the app can not be found" do
|
|
32
|
+
fake_cf map_route: :no_app do |stdout, stderr|
|
|
33
|
+
assert_equal false, command.run(:api, 'example.com')
|
|
34
|
+
|
|
35
|
+
assert_includes stderr.lines, "{map_route} App api not found\n"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "prints an error and returns false when the domain can not be found" do
|
|
40
|
+
fake_cf map_route: :no_domain do |stdout, stderr|
|
|
41
|
+
assert_equal false, command.run(:api, 'example.com')
|
|
42
|
+
|
|
43
|
+
assert_includes stderr.lines, "{map_route} Domain example.com not found\n"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "prints an error and returns false when the hostname is taken" do
|
|
48
|
+
fake_cf map_route: :host_taken do |stdout, stderr|
|
|
49
|
+
assert_equal false, command.run(:api, 'example.com')
|
|
50
|
+
|
|
51
|
+
assert_match /\{map_route\}/, stderr.lines.last
|
|
52
|
+
assert_match /Server error/, stderr.lines.last
|
|
53
|
+
assert_match /The host is taken: api/, stderr.lines.last
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'RoutesCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Routes::RoutesCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :routes,
|
|
10
|
+
has_name: :routes,
|
|
11
|
+
fails_with: nil
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns an Array of RouteInfo objects on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
routes = command.run
|
|
17
|
+
|
|
18
|
+
assert_instance_of Array, routes
|
|
19
|
+
routes.each do |route|
|
|
20
|
+
assert_instance_of CfScript::RouteInfo, route
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'UnmapRouteCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Routes::UnmapRouteCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :routes,
|
|
10
|
+
has_name: :unmap_route,
|
|
11
|
+
fails_with: false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns true on success" do
|
|
15
|
+
fake_cf do
|
|
16
|
+
assert_equal true, command.run(:api, 'example.com')
|
|
17
|
+
assert_equal true, command.run(:api, 'example.com', 'api')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "prints an error and returns false when the app can not be found" do
|
|
22
|
+
fake_cf unmap_route: :no_app do |stdout, stderr|
|
|
23
|
+
assert_equal false, command.run(:api, 'example.com')
|
|
24
|
+
|
|
25
|
+
assert_includes stderr.lines, "{unmap_route} App api not found\n"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "prints an error and returns false when the domain can not be found" do
|
|
30
|
+
fake_cf unmap_route: :no_domain do |stdout, stderr|
|
|
31
|
+
assert_equal false, command.run(:api, 'example.com')
|
|
32
|
+
|
|
33
|
+
assert_includes stderr.lines, "{unmap_route} Domain example.com not found\n"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'SpaceCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Spaces::SpaceCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :spaces,
|
|
10
|
+
has_name: :space,
|
|
11
|
+
fails_with: nil
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns a space object" do
|
|
15
|
+
expected = {
|
|
16
|
+
name: :staging,
|
|
17
|
+
org: 'ACME',
|
|
18
|
+
apps: ['org-frontend-staging', 'org-backend-staging'],
|
|
19
|
+
domains: ['cf.io', 'example.com'],
|
|
20
|
+
services: ['org-db', 'org-cache'],
|
|
21
|
+
security_groups: ['ssh', 'dns', 'log'],
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
fake_cf do
|
|
25
|
+
space = command.run(:staging)
|
|
26
|
+
|
|
27
|
+
expected.keys.each do |key|
|
|
28
|
+
assert_equal expected[key], space.send(key)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns nil if the output was empty" do
|
|
34
|
+
fake_cf space: :empty do
|
|
35
|
+
space = command.run(:space)
|
|
36
|
+
|
|
37
|
+
assert_equal nil, space
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "with a block" do
|
|
42
|
+
it "yields a space object" do
|
|
43
|
+
fake_cf space: :good do
|
|
44
|
+
command.run(:staging) do |space|
|
|
45
|
+
assert_respond_to space, :name
|
|
46
|
+
assert_respond_to space, :org
|
|
47
|
+
assert_respond_to space, :apps
|
|
48
|
+
assert_respond_to space, :domains
|
|
49
|
+
assert_respond_to space, :services
|
|
50
|
+
assert_respond_to space, :security_groups
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe 'SpacesCommand' do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:command) { CfScript::Command::Spaces::SpacesCommand.instance }
|
|
7
|
+
|
|
8
|
+
it_behaves_like 'a command object that', {
|
|
9
|
+
has_type: :spaces,
|
|
10
|
+
has_name: :spaces,
|
|
11
|
+
fails_with: nil
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
it "returns an Array of space names" do
|
|
15
|
+
fake_cf spaces: :good do
|
|
16
|
+
spaces = command.run
|
|
17
|
+
|
|
18
|
+
assert_kind_of Array, spaces
|
|
19
|
+
assert_equal ['development', 'staging', 'production'], spaces
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "returns nil if the spaces table was not found" do
|
|
24
|
+
fake_cf spaces: :empty do
|
|
25
|
+
spaces = command.run
|
|
26
|
+
|
|
27
|
+
assert_equal nil, spaces
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "yields an Array of space names when a block is given" do
|
|
32
|
+
fake_cf do
|
|
33
|
+
called = false
|
|
34
|
+
|
|
35
|
+
command.run do |spaces|
|
|
36
|
+
called = true
|
|
37
|
+
|
|
38
|
+
assert_kind_of Array, spaces
|
|
39
|
+
spaces.each do |space_name|
|
|
40
|
+
assert_includes ['development', 'staging', 'production'], space_name
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
assert called, "Expected block to have been called"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|