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,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
|