cf_script 0.0.1.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|