cf_script 0.0.1 → 0.0.2
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 +4 -4
- data/.travis.yml +5 -6
- data/CHANGELOG.md +11 -0
- data/README.md +9 -7
- data/lib/cf_script/command/base.rb +8 -4
- data/lib/cf_script/command/cf/apps.rb +4 -0
- data/lib/cf_script/command/cf/apps/restart_app_instance.rb +20 -0
- data/lib/cf_script/command/cf/apps/scale.rb +39 -0
- data/lib/cf_script/command/cf/routes/check_route.rb +1 -1
- data/lib/cf_script/command/cf/spaces/space.rb +1 -1
- data/lib/cf_script/command/registry.rb +1 -1
- data/lib/cf_script/command/runner.rb +6 -4
- data/lib/cf_script/executor/simple.rb +1 -1
- data/lib/cf_script/object/app_info.rb +8 -8
- data/lib/cf_script/output/buffer.rb +1 -1
- data/lib/cf_script/output/parser/attributes.rb +1 -1
- data/lib/cf_script/output/tests.rb +6 -6
- data/lib/cf_script/scope/app/state.rb +12 -0
- data/lib/cf_script/scope/script.rb +1 -1
- data/lib/cf_script/version.rb +1 -1
- data/test/fixtures/commands/apps/restart_app_instance/good.yml +8 -0
- data/test/fixtures/commands/apps/restart_app_instance/not_found.yml +8 -0
- data/test/fixtures/commands/apps/scale/good.yml +8 -0
- data/test/lib/cf_script/command/base_test.rb +127 -2
- data/test/lib/cf_script/command/cf/apps/app_test.rb +2 -2
- data/test/lib/cf_script/command/cf/apps/delete_test.rb +1 -1
- data/test/lib/cf_script/command/cf/apps/push_test.rb +1 -1
- data/test/lib/cf_script/command/cf/apps/rename_test.rb +2 -2
- data/test/lib/cf_script/command/cf/apps/restage_test.rb +2 -2
- data/test/lib/cf_script/command/cf/apps/restart_app_instance_test.rb +41 -0
- data/test/lib/cf_script/command/cf/apps/restart_test.rb +2 -2
- data/test/lib/cf_script/command/cf/apps/scale_test.rb +51 -0
- data/test/lib/cf_script/command/cf/apps/set_env_test.rb +1 -1
- data/test/lib/cf_script/command/cf/apps/start_test.rb +2 -2
- data/test/lib/cf_script/command/cf/apps/stop_test.rb +2 -2
- data/test/lib/cf_script/command/cf/apps/unset_env_test.rb +1 -1
- data/test/lib/cf_script/command/cf/general/api_test.rb +3 -3
- data/test/lib/cf_script/command/cf/general/target_test.rb +2 -2
- data/test/lib/cf_script/command/cf/routes/map_route_test.rb +6 -6
- data/test/lib/cf_script/command/cf/routes/routes_test.rb +1 -1
- data/test/lib/cf_script/command/cf/spaces/space_test.rb +1 -1
- data/test/lib/cf_script/command/cf/spaces/spaces_test.rb +1 -1
- data/test/lib/cf_script/command/line_test.rb +16 -8
- data/test/lib/cf_script/command/registry_test.rb +53 -0
- data/test/lib/cf_script/object/api_endpoint_test.rb +2 -2
- data/test/lib/cf_script/object/app_info_test.rb +13 -13
- data/test/lib/cf_script/object/instance_status_test.rb +7 -7
- data/test/lib/cf_script/object/space_test.rb +1 -1
- data/test/lib/cf_script/object/target_test.rb +1 -1
- data/test/lib/cf_script/output/buffer_test.rb +1 -1
- data/test/lib/cf_script/output/parser/section_test.rb +1 -1
- data/test/lib/cf_script/output/parser/table_test.rb +1 -1
- data/test/lib/cf_script/scope/app/state_test.rb +34 -0
- data/test/lib/cf_script/scope/app_test.rb +5 -1
- data/test/lib/cf_script/ui_test.rb +3 -3
- data/test/support/helpers/object_helpers.rb +4 -4
- data/test/support/shared_examples/command_object.rb +17 -3
- metadata +14 -3
@@ -37,13 +37,13 @@ describe 'AppCommand' do
|
|
37
37
|
fake_cf app: :empty do
|
38
38
|
result = command.run(:worker)
|
39
39
|
|
40
|
-
|
40
|
+
assert_nil result
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
it "returns nil when the app is not found" do
|
45
45
|
fake_cf app: :not_found do
|
46
|
-
|
46
|
+
assert_nil command.run(:api)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -21,7 +21,7 @@ describe 'DeleteCommand' do
|
|
21
21
|
fake_cf delete: :not_exist do |stdout, stderr|
|
22
22
|
command.run(:name)
|
23
23
|
|
24
|
-
assert_match
|
24
|
+
assert_match(/\{delete\} failed to delete app/, stderr.lines.first)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -21,7 +21,7 @@ describe 'RenameCommand' do
|
|
21
21
|
fake_cf rename: :not_found do |stdout, stderr|
|
22
22
|
command.run(:old, :new)
|
23
23
|
|
24
|
-
assert_match
|
24
|
+
assert_match(/\{rename\} failed to rename/, stderr.lines.first)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -29,7 +29,7 @@ describe 'RenameCommand' do
|
|
29
29
|
fake_cf rename: :not_found do |stdout, stderr|
|
30
30
|
assert_equal false, command.run(:old, :new)
|
31
31
|
|
32
|
-
assert_match
|
32
|
+
assert_match(/\{rename\} failed to rename/, stderr.lines.first)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -43,13 +43,13 @@ describe 'RestageCommand' do
|
|
43
43
|
fake_cf restage: :empty do
|
44
44
|
result = command.run(:api)
|
45
45
|
|
46
|
-
|
46
|
+
assert_nil result
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
it "returns nil on failure" do
|
51
51
|
fake_cf restage: :not_found do
|
52
|
-
|
52
|
+
assert_nil command.run(:some_app)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'RestartAppInstanceCommand' do
|
4
|
+
include MockExecution
|
5
|
+
|
6
|
+
let(:command) { CfScript::Command::Apps::RestartAppInstanceCommand.instance }
|
7
|
+
|
8
|
+
it_behaves_like 'a command object that', {
|
9
|
+
has_type: :apps,
|
10
|
+
has_name: :restart_app_instance,
|
11
|
+
fails_with: false
|
12
|
+
}
|
13
|
+
|
14
|
+
it "returns true on success" do
|
15
|
+
fake_cf do
|
16
|
+
assert_equal true, command.run(:worker, 0)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "prints an error on failure" do
|
21
|
+
fake_cf restart_app_instance: :not_found do |stdout, stderr|
|
22
|
+
command.run(:bogus, 0)
|
23
|
+
|
24
|
+
assert_match(
|
25
|
+
/\{restart_app_instance\} failed to restart app instance 0/,
|
26
|
+
stderr.lines.first
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns false when the app is not found" do
|
32
|
+
fake_cf restart_app_instance: :not_found do |stdout, stderr|
|
33
|
+
assert_equal false, command.run(:bogus, 0)
|
34
|
+
|
35
|
+
assert_match(
|
36
|
+
/\{restart_app_instance\} failed to restart app instance 0/,
|
37
|
+
stderr.lines.first
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -43,13 +43,13 @@ describe 'RestartCommand' do
|
|
43
43
|
fake_cf restart: :empty do
|
44
44
|
result = command.run(:worker)
|
45
45
|
|
46
|
-
|
46
|
+
assert_nil result
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
it "returns nil on failure" do
|
51
51
|
fake_cf restart: :not_found do
|
52
|
-
|
52
|
+
assert_nil command.run(:some_app)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'ScaleCommand' do
|
4
|
+
include MockExecution
|
5
|
+
|
6
|
+
let(:command) { CfScript::Command::Apps::ScaleCommand.instance }
|
7
|
+
|
8
|
+
it_behaves_like 'a command object that', {
|
9
|
+
has_type: :apps,
|
10
|
+
has_name: :scale,
|
11
|
+
fails_with: nil
|
12
|
+
}
|
13
|
+
|
14
|
+
it "returns true on success" do
|
15
|
+
fake_cf do
|
16
|
+
result = command.run(:worker)
|
17
|
+
|
18
|
+
assert_instance_of TrueClass, result
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns false if no attributes were found" do
|
23
|
+
fake_cf scale: :empty do
|
24
|
+
result = command.run(:api)
|
25
|
+
|
26
|
+
assert_equal false, result
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "translates long option names to cf's short ones" do
|
31
|
+
fake_cf do
|
32
|
+
assert_equal({ f: 'a' }, command.translate_options({ force_restart: 'a' }))
|
33
|
+
assert_equal({ i: 'a' }, command.translate_options({ instances: 'a' }))
|
34
|
+
assert_equal({ m: 'a' }, command.translate_options({ memory: 'a' }))
|
35
|
+
assert_equal({ k: 'a' }, command.translate_options({ disk: 'a' }))
|
36
|
+
|
37
|
+
assert_equal(
|
38
|
+
{ i: 'a', m: 'b', k: 'c' },
|
39
|
+
command.translate_options(
|
40
|
+
{ instances: 'a', memory: 'b', disk: 'c' }
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "builds options and flag for run_cf" do
|
47
|
+
assert_command_args command,
|
48
|
+
[:worker, i: 2, memory: '123', disk: '345'],
|
49
|
+
[:worker, { i: 2, m: '123', k: '345' }]
|
50
|
+
end
|
51
|
+
end
|
@@ -51,13 +51,13 @@ describe 'StartCommand' do
|
|
51
51
|
fake_cf start: :empty do
|
52
52
|
result = command.run(:worker)
|
53
53
|
|
54
|
-
|
54
|
+
assert_nil result
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
it "returns nil on failure" do
|
59
59
|
fake_cf start: :not_found do
|
60
|
-
|
60
|
+
assert_nil command.run(:some_app)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -21,7 +21,7 @@ describe 'StopCommand' do
|
|
21
21
|
fake_cf stop: :not_found do |stdout, stderr|
|
22
22
|
command.run(:bogus)
|
23
23
|
|
24
|
-
assert_match
|
24
|
+
assert_match(/\{stop\} failed to stop/, stderr.lines.first)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -29,7 +29,7 @@ describe 'StopCommand' do
|
|
29
29
|
fake_cf stop: :not_found do |stdout, stderr|
|
30
30
|
assert_equal false, command.run(:bogus)
|
31
31
|
|
32
|
-
assert_match
|
32
|
+
assert_match(/\{stop\} failed to stop/, stderr.lines.first)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -24,7 +24,7 @@ describe 'ApiCommand' do
|
|
24
24
|
|
25
25
|
it "returns nil when the api endpoint is not set" do
|
26
26
|
fake_cf api: :not_set do |stdout, stderr|
|
27
|
-
|
27
|
+
assert_nil command.run
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -42,13 +42,13 @@ describe 'ApiCommand' do
|
|
42
42
|
|
43
43
|
it "returns nil when the argument is invalid" do
|
44
44
|
fake_cf api: :bad_argument do |stdout, stderr|
|
45
|
-
|
45
|
+
assert_nil command.run('')
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
it "returns nil when the endpoint is invalid" do
|
50
50
|
fake_cf api: :bad_endpoint do |stdout, stderr|
|
51
|
-
|
51
|
+
assert_nil command.run('https://api.example.com')
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -13,7 +13,7 @@ describe 'TargetCommand' do
|
|
13
13
|
|
14
14
|
it "returns nil and prints an error on parsing failure" do
|
15
15
|
fake_cf target: :empty do |stdout, stderr|
|
16
|
-
|
16
|
+
assert_nil command.run
|
17
17
|
|
18
18
|
assert_includes stderr.lines, "{target} object is nil\n"
|
19
19
|
end
|
@@ -75,7 +75,7 @@ describe 'TargetCommand' do
|
|
75
75
|
|
76
76
|
it "returns nil and prints an error when the space is not found" do
|
77
77
|
fake_cf do |stdout, stderr|
|
78
|
-
|
78
|
+
assert_nil command.run(:not_found)
|
79
79
|
|
80
80
|
assert_includes stderr.lines, "{target} Space not_found not found\n"
|
81
81
|
end
|
@@ -34,9 +34,9 @@ describe 'MapRouteCommand' do
|
|
34
34
|
fake_cf map_route: :invalid do |stdout, stderr|
|
35
35
|
assert_equal false, command.run(:api, 'example.com')
|
36
36
|
|
37
|
-
assert_match
|
38
|
-
assert_match
|
39
|
-
assert_match
|
37
|
+
assert_match(/\{map_route\}/, stderr.lines.last)
|
38
|
+
assert_match(/Server error/, stderr.lines.last)
|
39
|
+
assert_match(/route is invalid/, stderr.lines.last)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -60,9 +60,9 @@ describe 'MapRouteCommand' do
|
|
60
60
|
fake_cf map_route: :host_taken do |stdout, stderr|
|
61
61
|
assert_equal false, command.run(:api, 'example.com')
|
62
62
|
|
63
|
-
assert_match
|
64
|
-
assert_match
|
65
|
-
assert_match
|
63
|
+
assert_match(/\{map_route\}/, stderr.lines.last)
|
64
|
+
assert_match(/Server error/, stderr.lines.last)
|
65
|
+
assert_match(/The host is taken: api/, stderr.lines.last)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -4,7 +4,9 @@ describe CfScript::Command::Line do
|
|
4
4
|
subject { CfScript::Command::Line }
|
5
5
|
|
6
6
|
it "initializes bin, name, args, options, and flags" do
|
7
|
-
line = subject.new({ foo: :bar}, 'bin', :test, :dummy,
|
7
|
+
line = subject.new({ foo: :bar }, 'bin', :test, :dummy,
|
8
|
+
[:arg1, :arg2, { i: 1, o: 2, flags: [:s] }]
|
9
|
+
)
|
8
10
|
|
9
11
|
assert_equal 'bin', line.bin
|
10
12
|
assert_equal :dummy, line.name
|
@@ -15,19 +17,25 @@ describe CfScript::Command::Line do
|
|
15
17
|
|
16
18
|
describe "line" do
|
17
19
|
it "returns a formatted command line" do
|
18
|
-
line = subject.new({}, 'cf', :test, :dummy,
|
20
|
+
line = subject.new({}, 'cf', :test, :dummy,
|
21
|
+
[:arg1, :arg2, { i: 1, o: 2, flags: [:s] }]
|
22
|
+
)
|
19
23
|
|
20
24
|
assert_equal 'cf dummy arg1 arg2 -i 1 -o 2 -s', line.line
|
21
25
|
end
|
22
26
|
|
23
27
|
it "formats long flag names" do
|
24
|
-
line = subject.new({}, 'cf', :test, :dummy,
|
28
|
+
line = subject.new({}, 'cf', :test, :dummy,
|
29
|
+
[:arg1, { i: 1, flags: [:some_thing] }]
|
30
|
+
)
|
25
31
|
|
26
32
|
assert_equal 'cf dummy arg1 -i 1 --some-thing', line.line
|
27
33
|
end
|
28
34
|
|
29
35
|
it "pass preformatted flags as is" do
|
30
|
-
line = subject.new({}, 'cf', :test, :dummy,
|
36
|
+
line = subject.new({}, 'cf', :test, :dummy,
|
37
|
+
[:arg1, { i: 1, flags: ['--one', '--foo-bar'] }]
|
38
|
+
)
|
31
39
|
|
32
40
|
assert_equal 'cf dummy arg1 -i 1 --one --foo-bar', line.line
|
33
41
|
end
|
@@ -50,10 +58,10 @@ describe CfScript::Command::Line do
|
|
50
58
|
line = subject.new({}, 'cf', :test, :login, [test])
|
51
59
|
text = line.hide_sensitive
|
52
60
|
|
53
|
-
assert_match
|
54
|
-
assert_match
|
55
|
-
assert_match
|
56
|
-
assert_match
|
61
|
+
assert_match(/cf login /, text)
|
62
|
+
assert_match(/-p \[PASSWORD HIDDEN\]/, text)
|
63
|
+
assert_match(/-u name/, text)
|
64
|
+
assert_match(/-a work/, text)
|
57
65
|
end
|
58
66
|
end
|
59
67
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe CfScript::Command::Registry do
|
4
|
+
subject { CfScript::Command::Registry.new }
|
5
|
+
|
6
|
+
class DummyCommand < CfScript::Command::Base
|
7
|
+
def initialize
|
8
|
+
super(:test, :dummy)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "starts with zero commands" do
|
13
|
+
assert_equal({}, subject.commands)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "known?" do
|
17
|
+
it "returns false when given command is not registered" do
|
18
|
+
assert_equal false, subject.known?(:dummy)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns true when given command is registered" do
|
22
|
+
subject.add! DummyCommand
|
23
|
+
|
24
|
+
assert_equal true, subject.known?(:dummy)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "check!" do
|
29
|
+
it "raises an exception for unknown commands" do
|
30
|
+
assert_raises(CfScript::Command::Registry::UnimplementedCommand) {
|
31
|
+
subject.check! :dummy
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "add!" do
|
37
|
+
it "adds commands" do
|
38
|
+
assert_equal false, subject.known?(:dummy)
|
39
|
+
|
40
|
+
subject.add! DummyCommand
|
41
|
+
|
42
|
+
assert_equal true, subject.known?(:dummy)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "raises an exception for duplicate commands" do
|
46
|
+
subject.add! DummyCommand
|
47
|
+
|
48
|
+
assert_raises(CfScript::Command::Registry::DuplicateCommand) {
|
49
|
+
subject.add! DummyCommand
|
50
|
+
}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -6,8 +6,8 @@ describe CfScript::ApiEndpoint do
|
|
6
6
|
it "initializes all attributes to sensible defaults" do
|
7
7
|
api_endpoint = subject.new
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
assert_nil api_endpoint.url
|
10
|
+
assert_nil api_endpoint.version
|
11
11
|
end
|
12
12
|
|
13
13
|
it "sets all given attributes" do
|