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,108 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Output::Parser::Table do
|
|
4
|
+
attr_accessor :parser
|
|
5
|
+
|
|
6
|
+
attr_accessor :text_buffer
|
|
7
|
+
|
|
8
|
+
class TableParserTest
|
|
9
|
+
include CfScript::Utils
|
|
10
|
+
include CfScript::Output::Parser::Attributes
|
|
11
|
+
include CfScript::Output::Parser::Table
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
@parser = TableParserTest.new
|
|
16
|
+
|
|
17
|
+
@text_buffer = "Something\n\n" +
|
|
18
|
+
" value another value final value \n"+
|
|
19
|
+
"one 123 A bit long Last one\n" +
|
|
20
|
+
"two 234 Short \n" +
|
|
21
|
+
"tre 345 Third End\n" +
|
|
22
|
+
"\n"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "parse_columns" do
|
|
26
|
+
it "returns an Array with the column names" do
|
|
27
|
+
cols = parser.parse_columns(text_buffer.lines[2])
|
|
28
|
+
|
|
29
|
+
assert_instance_of Array, cols
|
|
30
|
+
assert_equal 4, cols.length
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "strips white space before/after column names" do
|
|
34
|
+
cols = parser.parse_columns(text_buffer.lines[2])
|
|
35
|
+
|
|
36
|
+
assert_equal [
|
|
37
|
+
'',
|
|
38
|
+
'value',
|
|
39
|
+
'another value',
|
|
40
|
+
'final value'
|
|
41
|
+
], cols
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "parse_row" do
|
|
46
|
+
it "returns an AttributeList object" do
|
|
47
|
+
cols = parser.parse_columns(text_buffer.lines[2])
|
|
48
|
+
row = parser.parse_row(text_buffer.lines[3], cols)
|
|
49
|
+
|
|
50
|
+
assert_instance_of CfScript::AttributeList, row
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "symbolizes attribute names" do
|
|
54
|
+
cols = parser.parse_columns(text_buffer.lines[2])
|
|
55
|
+
row = parser.parse_row(text_buffer.lines[3], cols)
|
|
56
|
+
|
|
57
|
+
assert_equal [
|
|
58
|
+
:index, :value, :another_value, :final_value
|
|
59
|
+
], row.names
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "strips whitespace surrounding values" do
|
|
63
|
+
cols = parser.parse_columns(text_buffer.lines[2])
|
|
64
|
+
row = parser.parse_row(text_buffer.lines[4], cols)
|
|
65
|
+
|
|
66
|
+
assert_equal [
|
|
67
|
+
"two", "234", "Short", ""
|
|
68
|
+
], row.values
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe "parse_rows" do
|
|
73
|
+
it "returns an Array of AttributeList objects" do
|
|
74
|
+
rows = parser.parse_rows(text_buffer.lines)
|
|
75
|
+
|
|
76
|
+
assert_instance_of Array, rows
|
|
77
|
+
rows.each do |row|
|
|
78
|
+
assert_instance_of CfScript::AttributeList, row
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "returns an empty Array if no table is found" do
|
|
83
|
+
rows = parser.parse_rows([''])
|
|
84
|
+
|
|
85
|
+
assert_instance_of Array, rows
|
|
86
|
+
assert_equal [], rows
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "parse_table" do
|
|
91
|
+
it "returns an Array of AttributeList objects" do
|
|
92
|
+
rows = parser.parse_table(text_buffer, [
|
|
93
|
+
'', 'value', 'another value', 'final value'
|
|
94
|
+
])
|
|
95
|
+
|
|
96
|
+
assert_instance_of Array, rows
|
|
97
|
+
rows.each do |row|
|
|
98
|
+
assert_instance_of CfScript::AttributeList, row
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "returns nil of nothing matched" do
|
|
103
|
+
rows = parser.parse_table(text_buffer, ['foo'])
|
|
104
|
+
|
|
105
|
+
assert_equal nil, rows
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Output::Tests do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
it "defines matches? and calls the out buffer matches?" do
|
|
7
|
+
output = fake_output
|
|
8
|
+
|
|
9
|
+
output.out.stub :matches?, 'called' do
|
|
10
|
+
assert_equal 'called', output.matches?('a')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "defines contains? and calls the out buffer matches?" do
|
|
15
|
+
output = fake_output
|
|
16
|
+
|
|
17
|
+
output.out.stub :contains?, 'called' do
|
|
18
|
+
assert_equal 'called', output.contains?('a')
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "defines ok?, calls the out buffer last_line_matches?" do
|
|
23
|
+
output = fake_output('OK')
|
|
24
|
+
|
|
25
|
+
assert output.ok?
|
|
26
|
+
refute fake_output('KO').ok?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "defines authenticated? and calls matches?" do
|
|
30
|
+
output = fake_output("Authenticating...\nOK")
|
|
31
|
+
|
|
32
|
+
assert output.authenticated?
|
|
33
|
+
refute fake_output('NOPE').authenticated?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "defines failed? and calls contains?" do
|
|
37
|
+
output = fake_output("FAILED")
|
|
38
|
+
|
|
39
|
+
assert output.failed?
|
|
40
|
+
refute fake_output('OK').failed?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "defines no_api_endpoint? and calls contains?" do
|
|
44
|
+
output = fake_output("No API endpoint set.")
|
|
45
|
+
|
|
46
|
+
assert output.no_api_endpoint?
|
|
47
|
+
refute fake_output('API endpoint set').no_api_endpoint?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "defines not_logged_in? and calls contains?" do
|
|
51
|
+
output = fake_output("Not logged in")
|
|
52
|
+
|
|
53
|
+
assert output.not_logged_in?
|
|
54
|
+
refute fake_output('logged in').not_logged_in?
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "defines not_authorized? and calls contains?" do
|
|
58
|
+
output = fake_output("You are not authorized")
|
|
59
|
+
|
|
60
|
+
assert output.not_authorized?
|
|
61
|
+
refute fake_output('You are authorized').not_authorized?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "defines credentials_rejected? and calls contains?" do
|
|
65
|
+
output = fake_output("Credentials were rejected")
|
|
66
|
+
|
|
67
|
+
assert output.credentials_rejected?
|
|
68
|
+
refute fake_output('Credentials accepted').credentials_rejected?
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "defines not_found? and calls out buffer's last_line_matches?" do
|
|
72
|
+
output = fake_output("App api not found")
|
|
73
|
+
|
|
74
|
+
assert output.not_found?('App', 'api')
|
|
75
|
+
refute fake_output('Found').not_found?('App', 'api')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "defines is_already? and calls out buffer's last_line_matches?" do
|
|
79
|
+
output = fake_output("app is already started")
|
|
80
|
+
|
|
81
|
+
assert output.is_already?('app', 'started')
|
|
82
|
+
refute fake_output('app not started').is_already?('app', 'started')
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "defines already_exists? and calls out buffer's last_line_matches?" do
|
|
86
|
+
output = fake_output("App api already exists")
|
|
87
|
+
|
|
88
|
+
assert output.already_exists?('App', 'api')
|
|
89
|
+
refute fake_output('App api does not exist').already_exists?('App', 'api')
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Output do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
attr_accessor :output
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@output = fake_output(
|
|
10
|
+
"one: first\n" +
|
|
11
|
+
"two: second, place: middle\n" +
|
|
12
|
+
"third: last\n\n" +
|
|
13
|
+
"col1 col2\n" +
|
|
14
|
+
"val1 val2\n" +
|
|
15
|
+
"val3 val4\n",
|
|
16
|
+
|
|
17
|
+
"stderr",
|
|
18
|
+
|
|
19
|
+
0
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "responds to good? and returns true if exit status == 0" do
|
|
24
|
+
assert output.respond_to?(:good?)
|
|
25
|
+
assert output.good?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "responds to good? and returns false if exit status != 0" do
|
|
29
|
+
refute fake_output('', '', 1).good?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "responds to out and returns a Buffer object" do
|
|
33
|
+
assert_instance_of CfScript::Output::Buffer, output.out
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "responds to err and returns a Buffer object" do
|
|
37
|
+
assert_instance_of CfScript::Output::Buffer, output.err
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "responds to last_line and returns last line of stdout" do
|
|
41
|
+
assert_equal 'val3 val4', output.last_line
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "attributes" do
|
|
45
|
+
it "calls parse_attribute_list" do
|
|
46
|
+
assert output.respond_to?(:attributes)
|
|
47
|
+
|
|
48
|
+
output.stub :parse_attribute_list, 'called' do
|
|
49
|
+
assert_equal 'called', output.attributes
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "returns an AttributeList object" do
|
|
54
|
+
assert_instance_of CfScript::AttributeList, output.attributes
|
|
55
|
+
assert_equal 3, output.attributes.length
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "line_attributes" do
|
|
60
|
+
it "calls parse_line_attributes" do
|
|
61
|
+
assert output.respond_to?(:line_attributes)
|
|
62
|
+
|
|
63
|
+
output.stub :parse_line_attributes, 'called' do
|
|
64
|
+
assert_equal 'called', output.line_attributes(/a/)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "returns an AttributeList object" do
|
|
69
|
+
regex = /two: (?<position>[^,]+), place: (?<index>.+)/
|
|
70
|
+
attrs = output.line_attributes(regex)
|
|
71
|
+
|
|
72
|
+
assert_instance_of CfScript::AttributeList, attrs
|
|
73
|
+
assert_equal 2, attrs.length
|
|
74
|
+
|
|
75
|
+
assert_equal 'second', attrs[:position].value
|
|
76
|
+
assert_equal 'middle', attrs[:index].value
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe "attributes_from" do
|
|
81
|
+
it "calls from on out buffer" do
|
|
82
|
+
expected = { from: 'called' }
|
|
83
|
+
|
|
84
|
+
output.out.stub :from, 'from: called' do
|
|
85
|
+
assert_equal expected, output.attributes_from('foo').to_h
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "calls parse_attribute_list" do
|
|
90
|
+
assert output.respond_to?(:attributes_from)
|
|
91
|
+
|
|
92
|
+
output.stub :parse_attribute_list, 'called' do
|
|
93
|
+
assert_equal 'called', output.attributes_from('two')
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "returns an AttributeList object" do
|
|
98
|
+
attrs = output.attributes_from('third')
|
|
99
|
+
|
|
100
|
+
assert_instance_of CfScript::AttributeList, attrs
|
|
101
|
+
assert_equal 1, attrs.length
|
|
102
|
+
|
|
103
|
+
assert_equal 'last', attrs[:third].value
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
describe "table" do
|
|
108
|
+
it "calls parse_table" do
|
|
109
|
+
assert output.respond_to?(:table)
|
|
110
|
+
|
|
111
|
+
output.stub :parse_table, 'called' do
|
|
112
|
+
assert_equal 'called', output.table([])
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "returns an Array of AttributeList objects" do
|
|
117
|
+
rows = output.table(['col1', 'col2'])
|
|
118
|
+
|
|
119
|
+
assert_instance_of Array, rows
|
|
120
|
+
assert_instance_of CfScript::AttributeList, rows.first
|
|
121
|
+
assert_equal 2, rows.length
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe "section_attributes" do
|
|
126
|
+
it "calls parse_section_attributes" do
|
|
127
|
+
assert output.respond_to?(:section_attributes)
|
|
128
|
+
|
|
129
|
+
output.stub :parse_section_attributes, 'called' do
|
|
130
|
+
assert_equal 'called', output.section_attributes('header')
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Scope::App::State do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:target) { CfScript::Target.new('API', 'ORG', 'staging') }
|
|
7
|
+
|
|
8
|
+
def create_app(name)
|
|
9
|
+
app = nil
|
|
10
|
+
fake_cf { app = CfScript::Scope::App.new(:api, target) }
|
|
11
|
+
app
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "defines a start method that calls Command.start with the app name" do
|
|
15
|
+
app = create_app(:api)
|
|
16
|
+
|
|
17
|
+
arg_catcher = lambda do |command, *args, &block|
|
|
18
|
+
assert_equal :start, command
|
|
19
|
+
assert_equal [:api], args
|
|
20
|
+
|
|
21
|
+
return :called
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
CfScript::Command.stub :run, arg_catcher do
|
|
25
|
+
assert_equal :called, app.start
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "defines a stop method that calls Command.stop with the app name" do
|
|
30
|
+
app = create_app(:api)
|
|
31
|
+
|
|
32
|
+
arg_catcher = lambda do |command, *args, &block|
|
|
33
|
+
assert_equal :stop, command
|
|
34
|
+
assert_equal [:api], args
|
|
35
|
+
|
|
36
|
+
return :called
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
app.stub :cf_self, true do
|
|
40
|
+
CfScript::Command.stub :run, arg_catcher do
|
|
41
|
+
assert_equal :called, app.stop
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "defines a push method that calls Command.push with the app name and options" do
|
|
47
|
+
app = create_app(:api)
|
|
48
|
+
|
|
49
|
+
arg_catcher = lambda do |command, *args, &block|
|
|
50
|
+
assert_equal :push, command
|
|
51
|
+
assert_equal :api, args.first
|
|
52
|
+
assert_equal({ memory: '128MB' }, args.last)
|
|
53
|
+
|
|
54
|
+
return :called
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
CfScript::Command.stub :run, arg_catcher do
|
|
58
|
+
assert_equal :called, app.push({ memory: '128MB' })
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Scope::App do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
let(:target) { CfScript::Target.new('API', 'ORG', 'staging') }
|
|
7
|
+
|
|
8
|
+
subject { fake_cf { CfScript::Scope::App.new(:api, target) } }
|
|
9
|
+
|
|
10
|
+
it "subclasses Scope::Base" do
|
|
11
|
+
assert_kind_of CfScript::Scope::Base, subject
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "sets current_target" do
|
|
15
|
+
assert subject.current_target, "Expected current_target to be set"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "calls cf_self (which sets app_info) when initialized by name" do
|
|
19
|
+
assert subject.app_info, "Expected app_info not to be nil"
|
|
20
|
+
assert_instance_of CfScript::AppInfo, subject.app_info
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "calls cf_self (which completes the app_info) when initialized by AppInfo" do
|
|
24
|
+
app = nil
|
|
25
|
+
|
|
26
|
+
fake_cf do
|
|
27
|
+
app_info = CfScript::AppInfo.new(:api, {})
|
|
28
|
+
app = CfScript::Scope::App.new(app_info, target)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
assert_equal 'stopped', subject.app_info.requested_state
|
|
32
|
+
assert_equal '0/1', subject.app_info.instances
|
|
33
|
+
assert_equal [], subject.app_info.urls
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "raises if initialized with anything other than a name or AppInfo" do
|
|
37
|
+
assert_raises(RuntimeError) {
|
|
38
|
+
fake_cf do
|
|
39
|
+
app = CfScript::Scope::App.new([], target)
|
|
40
|
+
end
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "responds to current_space and returns it" do
|
|
45
|
+
assert_equal 'staging', subject.current_space
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "reponds to name_tag and returns space:name" do
|
|
49
|
+
assert_equal 'staging:api', subject.name_tag
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "reponds to tag_color and returns state" do
|
|
53
|
+
subject.app_info.stub :state, 'started' do
|
|
54
|
+
assert_equal :active, subject.tag_color
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
subject.app_info.stub :state, 'stopped' do
|
|
58
|
+
assert_equal :inactive, subject.tag_color
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "delegates to app_info for all data attributes" do
|
|
63
|
+
assert_respond_to subject, :requested_state
|
|
64
|
+
assert_respond_to subject, :instances
|
|
65
|
+
assert_respond_to subject, :urls
|
|
66
|
+
assert_respond_to subject, :usage
|
|
67
|
+
assert_respond_to subject, :last_uploaded
|
|
68
|
+
assert_respond_to subject, :stack
|
|
69
|
+
assert_respond_to subject, :buildpack
|
|
70
|
+
assert_respond_to subject, :memory
|
|
71
|
+
assert_respond_to subject, :disk
|
|
72
|
+
assert_respond_to subject, :state
|
|
73
|
+
assert_respond_to subject, :started?
|
|
74
|
+
assert_respond_to subject, :hot?
|
|
75
|
+
assert_respond_to subject, :stopped?
|
|
76
|
+
assert_respond_to subject, :cold?
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "includes the App::State module" do
|
|
80
|
+
assert_respond_to subject, :start
|
|
81
|
+
assert_respond_to subject, :stop
|
|
82
|
+
assert_respond_to subject, :push
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "includes the App::Env module" do
|
|
86
|
+
assert_respond_to subject, :env
|
|
87
|
+
assert_respond_to subject, :set_env
|
|
88
|
+
assert_respond_to subject, :unset_env
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "includes the App::Routes module" do
|
|
92
|
+
assert_respond_to subject, :has_route?
|
|
93
|
+
assert_respond_to subject, :map_route
|
|
94
|
+
assert_respond_to subject, :unmap_route
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "includes the App::Utils module" do
|
|
98
|
+
assert_respond_to subject, :dump
|
|
99
|
+
assert_respond_to subject, :show
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Scope::Script do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
it "behaves like a subclass of Scope::Target" do
|
|
7
|
+
script = nil
|
|
8
|
+
|
|
9
|
+
fake_cf target: :production do
|
|
10
|
+
script = CfScript::Scope::Script.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
assert_kind_of CfScript::Scope::Target, script
|
|
14
|
+
assert_equal 'production', script.current_space
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "responds to run and calls exec_in with self and the block" do
|
|
18
|
+
script = nil
|
|
19
|
+
|
|
20
|
+
fake_cf target: :staging do
|
|
21
|
+
script = CfScript::Scope::Script.new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
assert script.respond_to?(:run)
|
|
25
|
+
|
|
26
|
+
arg_catcher = lambda do |scope, args, &block|
|
|
27
|
+
assert_same script, scope
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
script.stub :exec_in, arg_catcher do
|
|
31
|
+
assert script.run { nil }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "calls the api command when the api option is given without login options" do
|
|
36
|
+
script = nil
|
|
37
|
+
|
|
38
|
+
fake_cf do
|
|
39
|
+
script = CfScript::Scope::Script.new({ api: :ipa })
|
|
40
|
+
|
|
41
|
+
arg_catcher = lambda do |command, args, &block|
|
|
42
|
+
assert_equal :api, command
|
|
43
|
+
assert_equal :ipa, args
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
CfScript::Command.stub :run, arg_catcher do
|
|
47
|
+
script.apply_options()
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "calls the login command when the user/pass options are given" do
|
|
53
|
+
script = nil
|
|
54
|
+
options = { api: :skip, username: :name, password: :word, space: :skip }
|
|
55
|
+
|
|
56
|
+
fake_cf do
|
|
57
|
+
script = CfScript::Scope::Script.new(options)
|
|
58
|
+
|
|
59
|
+
arg_catcher = lambda do |command, *args, &block|
|
|
60
|
+
assert_equal :login, command
|
|
61
|
+
assert_equal :name, args[0]
|
|
62
|
+
assert_equal :word, args[1]
|
|
63
|
+
assert_equal options, args[2]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
CfScript::Command.stub :run, arg_catcher do
|
|
67
|
+
script.apply_options()
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "calls the target command when the space option is given without login options" do
|
|
73
|
+
script = nil
|
|
74
|
+
|
|
75
|
+
fake_cf do
|
|
76
|
+
script = CfScript::Scope::Script.new({ space: :staging })
|
|
77
|
+
|
|
78
|
+
arg_catcher = lambda do |command, args, &block|
|
|
79
|
+
assert_equal :target, command
|
|
80
|
+
assert_equal :staging, args
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
CfScript::Command.stub :run, arg_catcher do
|
|
84
|
+
script.apply_options()
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe CfScript::Scope::Space do
|
|
4
|
+
include MockExecution
|
|
5
|
+
|
|
6
|
+
it "behaves like a subclass of Scope::Target" do
|
|
7
|
+
space = nil
|
|
8
|
+
|
|
9
|
+
fake_cf target: :staging do
|
|
10
|
+
space = CfScript::Scope::Space.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
assert_kind_of CfScript::Scope::Target, space
|
|
14
|
+
|
|
15
|
+
assert_equal 'staging', space.current_space
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "calls target when initialized with a space name" do
|
|
19
|
+
space = nil
|
|
20
|
+
|
|
21
|
+
fake_cf target: :staging do
|
|
22
|
+
space = CfScript::Scope::Space.new(:production)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
assert_equal 'production', space.current_space
|
|
26
|
+
end
|
|
27
|
+
end
|