MuranoCLI 3.2.0.beta.9 → 3.2.1.pre.beta.3
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/.rubocop.yml +3 -0
- data/Rakefile +5 -0
- data/dockers/README.rst +7 -0
- data/dockers/RELEASE.rst +6 -3
- data/dockers/docker-test.sh +45 -17
- data/docs/completions/murano_completion-bash +211 -86
- data/lib/MrMurano/Account.rb +72 -4
- data/lib/MrMurano/Business.rb +163 -2
- data/lib/MrMurano/Commander-Entry.rb +1 -2
- data/lib/MrMurano/Config.rb +19 -18
- data/lib/MrMurano/Content.rb +26 -19
- data/lib/MrMurano/Gateway.rb +51 -10
- data/lib/MrMurano/ReCommander.rb +1 -1
- data/lib/MrMurano/Solution-Services.rb +80 -35
- data/lib/MrMurano/Solution-Users.rb +1 -0
- data/lib/MrMurano/SyncRoot.rb +10 -3
- data/lib/MrMurano/SyncUpDown-Core.rb +47 -36
- data/lib/MrMurano/SyncUpDown-Item.rb +46 -14
- data/lib/MrMurano/SyncUpDown.rb +22 -20
- data/lib/MrMurano/Webservice-Endpoint.rb +20 -18
- data/lib/MrMurano/Webservice-File.rb +63 -20
- data/lib/MrMurano/commands/business.rb +14 -1
- data/lib/MrMurano/commands/child.rb +148 -0
- data/lib/MrMurano/commands/devices.rb +298 -149
- data/lib/MrMurano/commands/element.rb +2 -1
- data/lib/MrMurano/commands/globals.rb +3 -0
- data/lib/MrMurano/commands/network.rb +152 -33
- data/lib/MrMurano/commands/sync.rb +2 -2
- data/lib/MrMurano/commands.rb +1 -0
- data/lib/MrMurano/verbosing.rb +13 -2
- data/lib/MrMurano/version.rb +1 -1
- data/spec/Account_spec.rb +43 -11
- data/spec/Content_spec.rb +5 -3
- data/spec/GatewayBase_spec.rb +1 -1
- data/spec/GatewayDevice_spec.rb +47 -8
- data/spec/GatewayResource_spec.rb +1 -1
- data/spec/GatewaySettings_spec.rb +1 -1
- data/spec/HttpAuthed_spec.rb +17 -3
- data/spec/ProjectFile_spec.rb +59 -23
- data/spec/Setting_spec.rb +2 -1
- data/spec/Solution-ServiceConfig_spec.rb +1 -1
- data/spec/Solution-ServiceEventHandler_spec.rb +27 -20
- data/spec/Solution-ServiceModules_spec.rb +7 -5
- data/spec/Solution-UsersRoles_spec.rb +7 -1
- data/spec/Solution_spec.rb +9 -1
- data/spec/SyncRoot_spec.rb +5 -5
- data/spec/SyncUpDown_spec.rb +262 -211
- data/spec/Verbosing_spec.rb +49 -8
- data/spec/Webservice-Cors_spec.rb +10 -1
- data/spec/Webservice-Endpoint_spec.rb +84 -65
- data/spec/Webservice-File_spec.rb +16 -11
- data/spec/Webservice-Setting_spec.rb +7 -1
- data/spec/_workspace.rb +9 -0
- data/spec/cmd_business_spec.rb +5 -10
- data/spec/cmd_common.rb +67 -32
- data/spec/cmd_config_spec.rb +9 -14
- data/spec/cmd_content_spec.rb +15 -26
- data/spec/cmd_cors_spec.rb +9 -12
- data/spec/cmd_device_spec.rb +31 -45
- data/spec/cmd_domain_spec.rb +12 -10
- data/spec/cmd_element_spec.rb +18 -17
- data/spec/cmd_exchange_spec.rb +1 -4
- data/spec/cmd_init_spec.rb +56 -72
- data/spec/cmd_keystore_spec.rb +17 -26
- data/spec/cmd_link_spec.rb +13 -17
- data/spec/cmd_password_spec.rb +9 -10
- data/spec/cmd_setting_application_spec.rb +95 -68
- data/spec/cmd_setting_product_spec.rb +59 -37
- data/spec/cmd_status_spec.rb +46 -84
- data/spec/cmd_syncdown_application_spec.rb +28 -50
- data/spec/cmd_syncdown_both_spec.rb +44 -93
- data/spec/cmd_syncdown_unit_spec.rb +858 -0
- data/spec/cmd_syncup_spec.rb +21 -56
- data/spec/cmd_token_spec.rb +0 -3
- data/spec/cmd_usage_spec.rb +15 -10
- data/spec/dry_run_formatter.rb +1 -0
- data/spec/fixtures/dumped_config +4 -4
- data/spec/spec_helper.rb +3 -0
- metadata +4 -2
data/spec/cmd_cors_spec.rb
CHANGED
|
@@ -14,24 +14,24 @@ RSpec.describe 'murano cors', :cmd, :needs_password do
|
|
|
14
14
|
include_context 'CI_CMD'
|
|
15
15
|
|
|
16
16
|
before(:example) do
|
|
17
|
-
@
|
|
18
|
-
out, err
|
|
17
|
+
@application_name = rname('corstest')
|
|
18
|
+
out, err = murano_command_run(
|
|
19
|
+
'solution create', '--type', 'application', @application_name, '--save',
|
|
20
|
+
)
|
|
19
21
|
expect(err).to eq('')
|
|
20
22
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
21
|
-
expect(status.exitstatus).to eq(0)
|
|
22
23
|
end
|
|
24
|
+
|
|
23
25
|
after(:example) do
|
|
24
|
-
out, err
|
|
26
|
+
out, err = murano_command_run('solution delete', @application_name, '-y')
|
|
25
27
|
expect(out).to eq('')
|
|
26
28
|
expect(err).to eq('')
|
|
27
|
-
expect(status.exitstatus).to eq(0)
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
it 'show CORS' do
|
|
31
|
-
out, err
|
|
32
|
+
out, err = murano_command_run('cors', '-c', 'outformat=json')
|
|
32
33
|
expect { JSON.parse(out) }.to_not raise_error
|
|
33
34
|
expect(err).to eq('')
|
|
34
|
-
expect(status.exitstatus).to eq(0)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
it 'sets CORS' do
|
|
@@ -39,17 +39,14 @@ RSpec.describe 'murano cors', :cmd, :needs_password do
|
|
|
39
39
|
io << { origin: ['http://localhost:*'] }.to_json
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
out, err
|
|
42
|
+
out, err = murano_command_run('cors set', 'cors.yaml')
|
|
43
43
|
expect(out).to eq('')
|
|
44
44
|
expect(err).to eq('')
|
|
45
|
-
expect(status.exitstatus).to eq(0)
|
|
46
45
|
|
|
47
|
-
out, err
|
|
46
|
+
out, err = murano_command_run('cors', '-c', 'outformat=json')
|
|
48
47
|
expect { out = JSON.parse(out) }.to_not raise_error
|
|
49
48
|
expect(out).to include('origin' => contain_exactly('http://localhost:*'))
|
|
50
49
|
expect(err).to eq('')
|
|
51
|
-
expect(status.exitstatus).to eq(0)
|
|
52
50
|
end
|
|
53
51
|
end
|
|
54
52
|
|
|
55
|
-
# vim: set ai et sw=2 ts=2 :
|
data/spec/cmd_device_spec.rb
CHANGED
|
@@ -14,25 +14,27 @@ RSpec.describe 'murano device', :cmd, :needs_password do
|
|
|
14
14
|
|
|
15
15
|
before(:example) do
|
|
16
16
|
@product_name = rname('deviceTest')
|
|
17
|
-
out, err
|
|
17
|
+
out, err = murano_command_run(
|
|
18
|
+
'solution create', '--type', 'product', @product_name, '--save',
|
|
19
|
+
)
|
|
18
20
|
expect(err).to eq('')
|
|
19
21
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
20
|
-
expect(status.exitstatus).to eq(0)
|
|
21
22
|
end
|
|
23
|
+
|
|
22
24
|
after(:example) do
|
|
23
|
-
out, err
|
|
25
|
+
out, err = murano_command_run(
|
|
26
|
+
'solution delete', '-y', @product_name,
|
|
27
|
+
)
|
|
24
28
|
expect(out).to eq('')
|
|
25
29
|
expect(err).to eq('')
|
|
26
|
-
expect(status.exitstatus).to eq(0)
|
|
27
30
|
end
|
|
28
31
|
|
|
29
32
|
it 'enables and lists' do
|
|
30
|
-
out, err
|
|
33
|
+
out, err = murano_command_run('product device enable', '12345')
|
|
31
34
|
expect(out).to eq('')
|
|
32
35
|
expect(err).to eq('')
|
|
33
|
-
expect(status.exitstatus).to eq(0)
|
|
34
36
|
|
|
35
|
-
out, err
|
|
37
|
+
out, err = murano_command_run('product device list')
|
|
36
38
|
expect(err).to eq('')
|
|
37
39
|
olines = out.lines
|
|
38
40
|
expect(olines[0]).to match(/^(\+-+){3}\+$/)
|
|
@@ -40,7 +42,6 @@ RSpec.describe 'murano device', :cmd, :needs_password do
|
|
|
40
42
|
expect(olines[2]).to match(/^(\+-+){3}\+$/)
|
|
41
43
|
expect(olines[3]).to match(/^\| 12345\s+\| whitelisted\s+\| false\s+\|$/)
|
|
42
44
|
expect(olines[4]).to match(/^(\+-+){3}\+$/)
|
|
43
|
-
expect(status.exitstatus).to eq(0)
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
it 'enables a batch' do
|
|
@@ -51,13 +52,11 @@ RSpec.describe 'murano device', :cmd, :needs_password do
|
|
|
51
52
|
io << "1236\n"
|
|
52
53
|
end
|
|
53
54
|
|
|
54
|
-
out, err
|
|
55
|
+
out, err = murano_command_run('product device enable', '--file', 'ids.csv')
|
|
55
56
|
expect(out).to eq('')
|
|
56
57
|
expect(err).to eq('')
|
|
57
|
-
expect(status.exitstatus).to eq(0)
|
|
58
58
|
|
|
59
|
-
out, err
|
|
60
|
-
expect(err).to eq('')
|
|
59
|
+
out, err = murano_command_run('product device list')
|
|
61
60
|
olines = out.lines
|
|
62
61
|
expect(olines[0]).to match(/^(\+-+){3}\+$/)
|
|
63
62
|
expect(olines[1]).to match(/^\| Identifier\s+\| Status\s+\| Online\s+\|$/)
|
|
@@ -66,22 +65,17 @@ RSpec.describe 'murano device', :cmd, :needs_password do
|
|
|
66
65
|
expect(olines[4]).to match(/^\| 1235\s+\| whitelisted\s+\| false\s+\|$/)
|
|
67
66
|
expect(olines[5]).to match(/^\| 1236\s+\| whitelisted\s+\| false\s+\|$/)
|
|
68
67
|
expect(olines[6]).to match(/^(\+-+){3}\+$/)
|
|
69
|
-
expect(
|
|
68
|
+
expect(err).to eq('')
|
|
70
69
|
end
|
|
71
70
|
|
|
72
71
|
it 'activates' do
|
|
73
|
-
out, err
|
|
72
|
+
out, err = murano_command_run('product device enable', '12345')
|
|
74
73
|
expect(out).to eq('')
|
|
75
74
|
expect(err).to eq('')
|
|
76
|
-
expect(status.exitstatus).to eq(0)
|
|
77
75
|
|
|
78
|
-
out, err
|
|
79
|
-
|
|
80
|
-
# a-zA-Z0-9 (but not \w, which also includes underscore).
|
|
81
|
-
#expect(out.chomp).to match(/^\h{40}$/)
|
|
82
|
-
expect(out.chomp).to match(/^[a-zA-Z0-9]{40}$/)
|
|
76
|
+
out, err = murano_command_run('product device activate', '12345')
|
|
77
|
+
expect(out.chomp).to match(/^[{}a-zA-Z0-9]{40}$/)
|
|
83
78
|
expect(err).to eq('')
|
|
84
|
-
expect(status.exitstatus).to eq(0)
|
|
85
79
|
end
|
|
86
80
|
|
|
87
81
|
it 'writes and reads', :club_10s do
|
|
@@ -91,40 +85,33 @@ RSpec.describe 'murano device', :cmd, :needs_password do
|
|
|
91
85
|
'specs/resources.yaml',
|
|
92
86
|
)
|
|
93
87
|
|
|
94
|
-
out, err
|
|
95
|
-
expect(out).to eq(
|
|
88
|
+
out, err = murano_command_run('syncup', '--resources')
|
|
89
|
+
expect(out).to eq(
|
|
90
|
+
"Adding item state\n" +
|
|
91
|
+
"Adding item temperature\n" +
|
|
92
|
+
"Adding item uptime\n" +
|
|
93
|
+
"Adding item humidity\n" +
|
|
94
|
+
"Updating remote product resources\n"
|
|
95
|
+
)
|
|
96
96
|
expect(err).to eq('')
|
|
97
|
-
expect(status.exitstatus).to eq(0)
|
|
98
97
|
|
|
99
|
-
out, err
|
|
98
|
+
out, err = murano_command_run('product device enable', '12345')
|
|
100
99
|
expect(out).to eq('')
|
|
101
100
|
expect(err).to eq('')
|
|
102
|
-
expect(status.exitstatus).to eq(0)
|
|
103
101
|
|
|
104
|
-
out, err
|
|
102
|
+
out, err = murano_command_run('product device activate', '12345')
|
|
105
103
|
# 2017-06-01: This used to return hex, e.g., /^\h{40}$/, but now returns
|
|
106
104
|
# a-zA-Z0-9 (but not \w, which also includes underscore).
|
|
107
|
-
|
|
105
|
+
# 2018-07-18: (lb): Now I'm also seeing curly braces. It might help-
|
|
106
|
+
# ful to see the spec. on exactly what the acceptable format is...
|
|
107
|
+
expect(out.chomp).to match(/^[{}a-zA-Z0-9]{40}$/)
|
|
108
108
|
expect(err).to eq('')
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
# out, err, status = Open3.capture3(capcmd('murano', 'product', 'device', 'twee', '12345'))
|
|
112
|
-
# expect(err).to eq('')
|
|
113
|
-
# olines = out.lines
|
|
114
|
-
# expect(olines[0]).to match(/^(\+-+){4}\+$/)
|
|
115
|
-
# expect(olines[1]).to match(/^\|\s+12345\s+activated\s+\|$/)
|
|
116
|
-
# expect(olines[2]).to match(/^(\+-+){4}\+$/)
|
|
117
|
-
# expect(olines[3]).to match(/^\| Resource\s+\| Format\s+\| Modified\s+\| Value\s+\|$/)
|
|
118
|
-
# expect(olines[4]).to match(/^(\+-+){4}\+$/)
|
|
119
|
-
# expect(olines[-1]).to match(/^(\+-+){4}\+$/)
|
|
120
|
-
# expect(status.exitstatus).to eq(0)
|
|
121
|
-
|
|
122
|
-
out, err, status = Open3.capture3(capcmd('murano', 'product', 'device', 'write', '12345', 'state=42'))
|
|
109
|
+
|
|
110
|
+
out, err = murano_command_run('product device write', '12345', 'state=42')
|
|
123
111
|
expect(out).to eq('')
|
|
124
112
|
expect(err).to eq('')
|
|
125
|
-
expect(status.exitstatus).to eq(0)
|
|
126
113
|
|
|
127
|
-
out, err
|
|
114
|
+
out, err = murano_command_run('product device read', '12345', 'state')
|
|
128
115
|
#expect(out.strip).to eq('42')
|
|
129
116
|
expect(err).to eq('')
|
|
130
117
|
expect(out.lines).to match_array(
|
|
@@ -136,7 +123,6 @@ RSpec.describe 'murano device', :cmd, :needs_password do
|
|
|
136
123
|
/^(\+-+){4}\+$/,
|
|
137
124
|
]
|
|
138
125
|
)
|
|
139
|
-
expect(status.exitstatus).to eq(0)
|
|
140
126
|
end
|
|
141
127
|
end
|
|
142
128
|
|
data/spec/cmd_domain_spec.rb
CHANGED
|
@@ -14,29 +14,32 @@ RSpec.describe 'murano domain', :cmd, :needs_password do
|
|
|
14
14
|
|
|
15
15
|
before(:example) do
|
|
16
16
|
@product_name = rname('domainTest')
|
|
17
|
-
out, err
|
|
17
|
+
out, err = murano_command_run(
|
|
18
|
+
'solution create', '--type', 'product', @product_name, '--save',
|
|
19
|
+
)
|
|
18
20
|
expect(err).to eq('')
|
|
19
21
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
|
|
23
|
+
@application_name = rname('domainTest')
|
|
24
|
+
out, err = murano_command_run(
|
|
25
|
+
'solution create', '--type', 'application', @application_name, '--save',
|
|
26
|
+
)
|
|
22
27
|
expect(err).to eq('')
|
|
23
28
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
24
|
-
expect(status.exitstatus).to eq(0)
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
after(:example) do
|
|
28
|
-
out, err
|
|
32
|
+
out, err = murano_command_run('product delete', @product_name, '-y')
|
|
29
33
|
expect(out).to eq('')
|
|
30
34
|
expect(err).to eq('')
|
|
31
|
-
|
|
32
|
-
out, err
|
|
35
|
+
|
|
36
|
+
out, err = murano_command_run('application delete', @application_name, '--yes')
|
|
33
37
|
expect(out).to eq('')
|
|
34
38
|
expect(err).to eq('')
|
|
35
|
-
expect(status.exitstatus).to eq(0)
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
it 'show domain', :club_20s, :club_10s do
|
|
39
|
-
out, err
|
|
42
|
+
out, err = murano_command_run('domain')
|
|
40
43
|
# 2017-05-31: Previously, the project could be named whatever and
|
|
41
44
|
# the URI would start with the same.
|
|
42
45
|
# expect(out.chomp).to start_with("#{@product_name.downcase}.apps.exosite").and end_with('.io')
|
|
@@ -50,7 +53,6 @@ RSpec.describe 'murano domain', :cmd, :needs_password do
|
|
|
50
53
|
)
|
|
51
54
|
end
|
|
52
55
|
expect(err).to eq('')
|
|
53
|
-
expect(status.exitstatus).to eq(0)
|
|
54
56
|
end
|
|
55
57
|
end
|
|
56
58
|
|
data/spec/cmd_element_spec.rb
CHANGED
|
@@ -68,21 +68,21 @@ RSpec.describe 'murano element', :cmd, :needs_password do
|
|
|
68
68
|
|
|
69
69
|
it 'as default-table' do
|
|
70
70
|
# FIXME/2018-04-30: Make test-specific elements for this test!
|
|
71
|
-
stdout, stderr = murano_command_run('element show', '
|
|
71
|
+
stdout, stderr = murano_command_run('element show', 'Security as a Culture')
|
|
72
72
|
expect_exchange_element_table(stdout, stderr, num_cols: 2)
|
|
73
73
|
expect(stderr).to eq('')
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
it 'as table wrap' do
|
|
77
77
|
# FIXME/2018-04-30: Make test-specific elements for this test!
|
|
78
|
-
stdout, stderr = murano_command_run('element show', '
|
|
78
|
+
stdout, stderr = murano_command_run('element show', 'Security as a Culture', '--wrap')
|
|
79
79
|
expect_exchange_element_table(stdout, stderr, num_cols: 2)
|
|
80
80
|
expect(stderr).to eq('')
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
it 'as table truncate' do
|
|
84
84
|
# FIXME/2018-04-30: Make test-specific elements for this test!
|
|
85
|
-
stdout, stderr = murano_command_run('element show', '
|
|
85
|
+
stdout, stderr = murano_command_run('element show', 'Security as a Culture', '--truncate')
|
|
86
86
|
expect_exchange_element_table(stdout, stderr, num_cols: 2)
|
|
87
87
|
expect(stderr).to eq('')
|
|
88
88
|
end
|
|
@@ -90,7 +90,7 @@ RSpec.describe 'murano element', :cmd, :needs_password do
|
|
|
90
90
|
# (lb): NOTE: This does not add any additional coverage to element.rb:
|
|
91
91
|
it 'as json' do
|
|
92
92
|
# FIXME/2018-04-30: Make test-specific elements for this test!
|
|
93
|
-
stdout, stderr = murano_command_run('element show', '--json', '
|
|
93
|
+
stdout, stderr = murano_command_run('element show', '--json', 'Security as a Culture')
|
|
94
94
|
expect { JSON.parse(stdout) }.to_not raise_error
|
|
95
95
|
expect(stderr).to eq('')
|
|
96
96
|
end
|
|
@@ -98,7 +98,7 @@ RSpec.describe 'murano element', :cmd, :needs_password do
|
|
|
98
98
|
# (lb): NOTE: This does not add any additional coverage to element.rb:
|
|
99
99
|
it 'as yaml' do
|
|
100
100
|
# FIXME/2018-04-30: Make test-specific elements for this test!
|
|
101
|
-
stdout, stderr = murano_command_run('element show', '
|
|
101
|
+
stdout, stderr = murano_command_run('element show', 'Security as a Culture', '--yaml')
|
|
102
102
|
expect { YAML.parse(stdout) }.to_not raise_error
|
|
103
103
|
expect(stderr).to eq('')
|
|
104
104
|
end
|
|
@@ -106,13 +106,14 @@ RSpec.describe 'murano element', :cmd, :needs_password do
|
|
|
106
106
|
# (lb): This adds 1 line of coverage.
|
|
107
107
|
it 'as csv' do
|
|
108
108
|
# FIXME/2018-04-30: Make test-specific elements for this test!
|
|
109
|
-
stdout, stderr = murano_command_run('element show', '
|
|
109
|
+
stdout, stderr = murano_command_run('element show', 'Security as a Culture', '--csv')
|
|
110
110
|
expect(stdout).to_not eq('')
|
|
111
111
|
expect(stderr).to eq('')
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
# FIXME/2018-07-12: (lb): Make test acct. with element. 'til then: disabled.
|
|
116
|
+
context 'edit', :needs_exchange_element do
|
|
116
117
|
before(:example) do
|
|
117
118
|
@json_input_file = 'element-show.json'
|
|
118
119
|
@spec_swagger_20k = 'swagger-mur-6407__20k.yaml'
|
|
@@ -160,16 +161,6 @@ RSpec.describe 'murano element', :cmd, :needs_password do
|
|
|
160
161
|
end
|
|
161
162
|
end
|
|
162
163
|
|
|
163
|
-
# DEL:
|
|
164
|
-
def element_editor_expect_edit_json_from_string
|
|
165
|
-
expect(TTY::Editor).to receive(:open) do |path|
|
|
166
|
-
pname = path.is_a?(Pathname) && path || Pathname.new(path)
|
|
167
|
-
pname.write(
|
|
168
|
-
%({"tiers":[],"bizid":"55cop31gs89","access":"private","attachment":{},"contact":"#{rname}","description":"For testing Murano CLI element-edit.\\n\\nTEST2222\\n\\nTEST MORE","image":{"detail":{"color":"#224123","filename":"","url":""},"thumbnail":{"color":"#224655","filename":"xxx","url":""}},"markdown":"AxxxxAA2333BBBCCC\\n","name":"MUR-6407 Test Element","source":{"from":"service","name":"mur6407testelement","url":"https://testtesttest.apps.exosite-dev.io/swagger-mur-6407.yaml"},"specs":"","type":"service","tags":[],"active":true,"approval":"approved","elementId":"5ae3600e313d01708c2a6e0f"})
|
|
169
|
-
)
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
|
|
173
164
|
it '--help' do
|
|
174
165
|
stdout, stderr = murano_command_wont_parse('element edit', '--help')
|
|
175
166
|
expect(stdout).to a_string_starting_with('Usage:')
|
|
@@ -396,5 +387,15 @@ RSpec.describe 'murano element', :cmd, :needs_password do
|
|
|
396
387
|
expect(stderr).to eq %(Request Failed: 400: [400] "tiers" is not allowed. "approval" is not allowed\n)
|
|
397
388
|
end
|
|
398
389
|
end
|
|
390
|
+
|
|
391
|
+
context 'edit unknown' do
|
|
392
|
+
it 'as unknown element' do
|
|
393
|
+
stdout, stderr = murano_command_exits(
|
|
394
|
+
'element edit', '-e', '', 'BLAH-BLAH-BLAH-NO-NAME-MATCH'
|
|
395
|
+
)
|
|
396
|
+
expect(stdout).to eq('')
|
|
397
|
+
expect(stderr).to eq %(No matching element was found.\n)
|
|
398
|
+
end
|
|
399
|
+
end
|
|
399
400
|
end
|
|
400
401
|
|
data/spec/cmd_exchange_spec.rb
CHANGED
|
@@ -21,9 +21,6 @@ RSpec.describe 'murano exchange', :cmd, :needs_password do
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
context 'with project' do
|
|
24
|
-
#before(:example) { project_up }
|
|
25
|
-
#after(:example) { project_down }
|
|
26
|
-
|
|
27
24
|
def expect_exchange_element_table(stdout, stderr, num_cols: nil)
|
|
28
25
|
expect(stderr).to eq('')
|
|
29
26
|
lines = stdout.lines
|
|
@@ -96,7 +93,7 @@ RSpec.describe 'murano exchange', :cmd, :needs_password do
|
|
|
96
93
|
stdout, stderr = murano_command_exits('exchange purchase', 'IoT')
|
|
97
94
|
expect(stdout).to eq('')
|
|
98
95
|
expect(stderr).to a_string_starting_with(
|
|
99
|
-
|
|
96
|
+
"Please be more specific: More than one matching element was found:\n "
|
|
100
97
|
)
|
|
101
98
|
end
|
|
102
99
|
|
data/spec/cmd_init_spec.rb
CHANGED
|
@@ -13,7 +13,7 @@ RSpec.describe 'murano init', :cmd do
|
|
|
13
13
|
include_context 'CI_CMD'
|
|
14
14
|
|
|
15
15
|
def expected_response_when_ids_found_in_config(
|
|
16
|
-
|
|
16
|
+
test,
|
|
17
17
|
expect_rebasing: false,
|
|
18
18
|
has_one_each_soln: false,
|
|
19
19
|
has_no_solutions: false,
|
|
@@ -29,18 +29,18 @@ RSpec.describe 'murano init', :cmd do
|
|
|
29
29
|
]
|
|
30
30
|
if !expect_rebasing
|
|
31
31
|
expecting += [
|
|
32
|
-
|
|
32
|
+
test.a_string_starting_with('Creating project at '), # 1
|
|
33
33
|
]
|
|
34
34
|
else
|
|
35
35
|
expecting += [
|
|
36
|
-
|
|
36
|
+
test.a_string_starting_with('Rebasing project at '), # 1
|
|
37
37
|
]
|
|
38
38
|
end
|
|
39
39
|
expecting += [
|
|
40
40
|
"\n", # 2
|
|
41
|
-
|
|
41
|
+
test.a_string_starting_with('Found User '), # 3
|
|
42
42
|
"\n", # 4
|
|
43
|
-
|
|
43
|
+
test.a_string_starting_with('Found Business '), # 5
|
|
44
44
|
"\n", # 6
|
|
45
45
|
]
|
|
46
46
|
if has_one_each_soln
|
|
@@ -65,16 +65,16 @@ RSpec.describe 'murano init', :cmd do
|
|
|
65
65
|
]
|
|
66
66
|
else
|
|
67
67
|
expecting += [
|
|
68
|
-
|
|
68
|
+
test.a_string_starting_with('Found Application '), # 7
|
|
69
69
|
"\n", # 8
|
|
70
|
-
|
|
70
|
+
test.a_string_starting_with('Found Product '), # 9
|
|
71
71
|
"\n", # 10
|
|
72
72
|
]
|
|
73
73
|
end
|
|
74
74
|
expecting += [
|
|
75
|
-
|
|
75
|
+
test.a_string_matching(/Linked '\w+' to '\w+'\n/),
|
|
76
76
|
"\n",
|
|
77
|
-
|
|
77
|
+
test.a_string_matching(/Created default event handler\n/),
|
|
78
78
|
"\n",
|
|
79
79
|
]
|
|
80
80
|
if expect_proj_file_write
|
|
@@ -108,34 +108,26 @@ RSpec.describe 'murano init', :cmd do
|
|
|
108
108
|
]
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
#
|
|
112
|
-
# services{product.id}_event.lua
|
|
113
|
-
# services/user_account.lua
|
|
114
|
-
# specs/resources.yaml
|
|
115
|
-
# 2018-04-11: Currently:
|
|
111
|
+
# 2018-07-23: Currently:
|
|
116
112
|
# "Updating local product resources\n",
|
|
117
|
-
# "Adding item config_service\n",
|
|
118
|
-
# "Adding item config_status\n",
|
|
119
113
|
# "Adding item user_account\n",
|
|
120
114
|
# "Adding item g3vm2aa9xjfy00000_event\n",
|
|
121
|
-
# "
|
|
122
|
-
# "Adding item config_status\n",
|
|
123
|
-
# "Synced 7 items\n",
|
|
115
|
+
# "Synced 3 items\n",
|
|
124
116
|
expecting += [
|
|
125
117
|
"Updating local product resources\n",
|
|
126
118
|
]
|
|
127
|
-
|
|
119
|
+
2.times { expecting += [test.a_string_starting_with('Adding item ')] }
|
|
128
120
|
expecting += [
|
|
129
|
-
"Synced
|
|
121
|
+
"Synced 3 items\n",
|
|
130
122
|
"\n",
|
|
131
123
|
]
|
|
132
124
|
|
|
133
125
|
expecting += [
|
|
134
126
|
"Success!\n",
|
|
135
127
|
"\n",
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
128
|
+
test.a_string_matching(/\s+Business ID: \w+\n/),
|
|
129
|
+
test.a_string_matching(/(\s+Application ID: \w+\n)?/),
|
|
130
|
+
test.a_string_matching(/(\s+Product ID: \w+\n)?/),
|
|
139
131
|
"\n",
|
|
140
132
|
]
|
|
141
133
|
expecting
|
|
@@ -144,10 +136,9 @@ RSpec.describe 'murano init', :cmd do
|
|
|
144
136
|
it %(Won't init in HOME (gracefully)) do
|
|
145
137
|
# this is in the project dir. Want to be in HOME
|
|
146
138
|
Dir.chdir(ENV['HOME']) do
|
|
147
|
-
out, err
|
|
139
|
+
out, err = murano_command_exits('init')
|
|
148
140
|
expect(out).to eq('')
|
|
149
|
-
expect(err).to eq("
|
|
150
|
-
expect(status.exitstatus).to eq(2)
|
|
141
|
+
expect(err).to eq("Cannot init a project in your HOME directory.\n")
|
|
151
142
|
end
|
|
152
143
|
end
|
|
153
144
|
|
|
@@ -160,45 +151,41 @@ RSpec.describe 'murano init', :cmd do
|
|
|
160
151
|
murano_solutions_expunge_yes
|
|
161
152
|
|
|
162
153
|
@applctn_name = rname('initEmptyApp')
|
|
163
|
-
out, err
|
|
164
|
-
|
|
154
|
+
out, err = murano_command_run(
|
|
155
|
+
'solution create', '--type', 'application', @applctn_name, '--save',
|
|
165
156
|
)
|
|
166
157
|
expect(err).to eq('')
|
|
167
158
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
168
|
-
expect(status.exitstatus).to eq(0)
|
|
169
159
|
|
|
170
160
|
@product_name = rname('initEmptyPrd')
|
|
171
|
-
out, err
|
|
172
|
-
|
|
161
|
+
out, err = murano_command_run(
|
|
162
|
+
'solution create', '--type', 'product', @product_name, '--save',
|
|
173
163
|
)
|
|
174
164
|
expect(err).to eq('')
|
|
175
165
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
176
|
-
expect(status.exitstatus).to eq(0)
|
|
177
166
|
|
|
178
167
|
# delete all of this so it is a empty directory.
|
|
179
168
|
FileUtils.remove_entry('.murano')
|
|
180
169
|
end
|
|
181
170
|
|
|
182
171
|
after(:example) do
|
|
183
|
-
out, err
|
|
184
|
-
|
|
172
|
+
out, err = murano_command_run(
|
|
173
|
+
'solution delete', @product_name, '-y',
|
|
185
174
|
)
|
|
186
175
|
expect(out).to eq('')
|
|
187
176
|
expect(err).to eq('')
|
|
188
|
-
expect(status.exitstatus).to eq(0)
|
|
189
177
|
|
|
190
|
-
out, err
|
|
191
|
-
|
|
178
|
+
out, err = murano_command_run(
|
|
179
|
+
'solution delete', @applctn_name, '-y',
|
|
192
180
|
)
|
|
193
181
|
expect(out).to eq('')
|
|
194
182
|
expect(err).to eq('')
|
|
195
|
-
expect(status.exitstatus).to eq(0)
|
|
196
183
|
end
|
|
197
184
|
|
|
198
185
|
it 'existing project', :club_20s, :club_10s do
|
|
199
186
|
# The test account will have one business, one product, and one application.
|
|
200
187
|
# So it won't ask any questions.
|
|
201
|
-
out, err
|
|
188
|
+
out, err = murano_command_run('init')
|
|
202
189
|
expecting = expected_response_when_ids_found_in_config(
|
|
203
190
|
self,
|
|
204
191
|
has_one_each_soln: true,
|
|
@@ -206,13 +193,14 @@ RSpec.describe 'murano init', :cmd do
|
|
|
206
193
|
out_lines = out.lines.map { |line| strip_fancy(line) }
|
|
207
194
|
expect(out_lines).to match_array(expecting)
|
|
208
195
|
expect(err).to eq('')
|
|
209
|
-
expect(status.exitstatus).to eq(0)
|
|
210
196
|
|
|
211
197
|
expect(File.directory?('.murano')).to be true
|
|
212
198
|
expect(File.exist?('.murano/config')).to be true
|
|
213
|
-
expect(File.directory?('routes')).to be
|
|
199
|
+
expect(File.directory?('routes')).to be false
|
|
200
|
+
expect(File.directory?('endpoints')).to be true
|
|
214
201
|
expect(File.directory?('services')).to be true
|
|
215
|
-
expect(File.directory?('files')).to be
|
|
202
|
+
expect(File.directory?('files')).to be false
|
|
203
|
+
expect(File.directory?('assets')).to be true
|
|
216
204
|
expect(File.directory?('modules')).to be true
|
|
217
205
|
expect(File.directory?('specs')).to be true
|
|
218
206
|
end
|
|
@@ -225,19 +213,17 @@ RSpec.describe 'murano init', :cmd do
|
|
|
225
213
|
@product_name = rname('initCreatingPrd')
|
|
226
214
|
end
|
|
227
215
|
after(:example) do
|
|
228
|
-
out, err
|
|
229
|
-
|
|
216
|
+
out, err = murano_command_run(
|
|
217
|
+
'solution delete', @product_name, '-y',
|
|
230
218
|
)
|
|
231
219
|
expect(out).to eq('')
|
|
232
220
|
expect(err).to eq('')
|
|
233
|
-
expect(status.exitstatus).to eq(0)
|
|
234
221
|
|
|
235
|
-
out, err
|
|
236
|
-
|
|
222
|
+
out, err = murano_command_run(
|
|
223
|
+
'solution delete', @applctn_name, '-y',
|
|
237
224
|
)
|
|
238
225
|
expect(out).to eq('')
|
|
239
226
|
expect(err).to eq('')
|
|
240
|
-
expect(status.exitstatus).to eq(0)
|
|
241
227
|
end
|
|
242
228
|
|
|
243
229
|
it 'existing project', :club_20s, :club_10s do
|
|
@@ -250,6 +236,7 @@ RSpec.describe 'murano init', :cmd do
|
|
|
250
236
|
#{@product_name}
|
|
251
237
|
DATA
|
|
252
238
|
# 2017-07-05: [lb] added line numbers to use debugger to help maintain this test.
|
|
239
|
+
# FIXME/2018-07-26: (lb): Use murano_command_run here? What about stdin_date?
|
|
253
240
|
out, err, status = Open3.capture3(capcmd('murano', 'init'), stdin_data: data)
|
|
254
241
|
expecting = expected_response_when_ids_found_in_config(
|
|
255
242
|
self,
|
|
@@ -296,9 +283,11 @@ RSpec.describe 'murano init', :cmd do
|
|
|
296
283
|
|
|
297
284
|
expect(File.directory?('.murano')).to be true
|
|
298
285
|
expect(File.exist?('.murano/config')).to be true
|
|
299
|
-
expect(File.directory?('routes')).to be
|
|
286
|
+
expect(File.directory?('routes')).to be false
|
|
287
|
+
expect(File.directory?('endpoints')).to be true
|
|
300
288
|
expect(File.directory?('services')).to be true
|
|
301
|
-
expect(File.directory?('files')).to be
|
|
289
|
+
expect(File.directory?('files')).to be false
|
|
290
|
+
expect(File.directory?('assets')).to be true
|
|
302
291
|
expect(File.directory?('modules')).to be true
|
|
303
292
|
expect(File.directory?('specs')).to be true
|
|
304
293
|
end
|
|
@@ -313,40 +302,36 @@ RSpec.describe 'murano init', :cmd do
|
|
|
313
302
|
FileUtils.move('assets', 'files')
|
|
314
303
|
|
|
315
304
|
@applctn_name = rname('initEmptyApp')
|
|
316
|
-
out, err
|
|
317
|
-
|
|
305
|
+
out, err = murano_command_run(
|
|
306
|
+
'solution create', '--type', 'application', @applctn_name, '--save',
|
|
318
307
|
)
|
|
319
308
|
expect(err).to eq('')
|
|
320
309
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
321
|
-
expect(status.exitstatus).to eq(0)
|
|
322
310
|
|
|
323
311
|
@product_name = rname('initEmptyPrd')
|
|
324
|
-
out, err
|
|
325
|
-
|
|
312
|
+
out, err = murano_command_run(
|
|
313
|
+
'solution create', '--type', 'product', @product_name, '--save',
|
|
326
314
|
)
|
|
327
315
|
expect(err).to eq('')
|
|
328
316
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
329
|
-
expect(status.exitstatus).to eq(0)
|
|
330
317
|
end
|
|
331
318
|
|
|
332
319
|
after(:example) do
|
|
333
320
|
Dir.chdir(ENV['HOME']) do
|
|
334
321
|
if defined?(@product_name)
|
|
335
|
-
out, err
|
|
336
|
-
|
|
322
|
+
out, err = murano_command_run(
|
|
323
|
+
'solution delete', @product_name, '-y',
|
|
337
324
|
)
|
|
338
325
|
expect(out).to eq('')
|
|
339
326
|
expect(err).to eq('')
|
|
340
|
-
expect(status.exitstatus).to eq(0)
|
|
341
327
|
end
|
|
342
328
|
|
|
343
329
|
if defined?(@applctn_name)
|
|
344
|
-
out, err
|
|
345
|
-
|
|
330
|
+
out, err = murano_command_run(
|
|
331
|
+
'solution delete', @applctn_name, '-y',
|
|
346
332
|
)
|
|
347
333
|
expect(out).to eq('')
|
|
348
334
|
expect(err).to eq('')
|
|
349
|
-
expect(status.exitstatus).to eq(0)
|
|
350
335
|
end
|
|
351
336
|
end
|
|
352
337
|
end
|
|
@@ -354,7 +339,7 @@ RSpec.describe 'murano init', :cmd do
|
|
|
354
339
|
it 'without ProjectFile', :club_20s, :club_10s do
|
|
355
340
|
# The test account will have one business, one product, and one application.
|
|
356
341
|
# So it won't ask any questions.
|
|
357
|
-
out, err
|
|
342
|
+
out, err = murano_command_run('init')
|
|
358
343
|
the_expected = expected_response_when_ids_found_in_config(
|
|
359
344
|
self,
|
|
360
345
|
expect_rebasing: true,
|
|
@@ -363,7 +348,6 @@ RSpec.describe 'murano init', :cmd do
|
|
|
363
348
|
out_lines = out.lines.map { |line| strip_fancy(line) }
|
|
364
349
|
expect(out_lines).to match_array(the_expected)
|
|
365
350
|
expect(err).to eq('')
|
|
366
|
-
expect(status.exitstatus).to eq(0)
|
|
367
351
|
|
|
368
352
|
expect(File.directory?('.murano')).to be true
|
|
369
353
|
expect(File.exist?('.murano/config')).to be true
|
|
@@ -375,10 +359,13 @@ RSpec.describe 'murano init', :cmd do
|
|
|
375
359
|
end
|
|
376
360
|
|
|
377
361
|
it 'with ProjectFile', :club_20s, :club_10s do
|
|
378
|
-
FileUtils.copy(
|
|
362
|
+
FileUtils.copy(
|
|
363
|
+
File.join(@testdir, 'spec/fixtures/ProjectFiles/only_meta.yaml',),
|
|
364
|
+
'test.murano',
|
|
365
|
+
)
|
|
379
366
|
# The test account will have one business, one product, and one application.
|
|
380
367
|
# So it won't ask any questions.
|
|
381
|
-
out, err
|
|
368
|
+
out, err = murano_command_run('init')
|
|
382
369
|
expected = expected_response_when_ids_found_in_config(
|
|
383
370
|
self,
|
|
384
371
|
expect_rebasing: true,
|
|
@@ -388,7 +375,6 @@ RSpec.describe 'murano init', :cmd do
|
|
|
388
375
|
out_lines = out.lines.map { |line| strip_fancy(line) }
|
|
389
376
|
expect(out_lines).to match_array(expected)
|
|
390
377
|
expect(err).to eq('')
|
|
391
|
-
expect(status.exitstatus).to eq(0)
|
|
392
378
|
|
|
393
379
|
expect(File.directory?('.murano')).to be true
|
|
394
380
|
expect(File.exist?('.murano/config')).to be true
|
|
@@ -419,7 +405,7 @@ RSpec.describe 'murano init', :cmd do
|
|
|
419
405
|
# So it won't ask any questions.
|
|
420
406
|
# NOTE: This tests uses an old Solutionfile.json, config v0.2.0, and it
|
|
421
407
|
# downloads Lua scripts to the root of the project directory. Just FYI.
|
|
422
|
-
out, err
|
|
408
|
+
out, err = murano_command_run('init')
|
|
423
409
|
expected = expected_response_when_ids_found_in_config(
|
|
424
410
|
self,
|
|
425
411
|
expect_rebasing: true,
|
|
@@ -428,7 +414,6 @@ RSpec.describe 'murano init', :cmd do
|
|
|
428
414
|
out_lines = out.lines.map { |line| strip_fancy(line) }
|
|
429
415
|
expect(out_lines).to match_array(expected)
|
|
430
416
|
expect(err).to eq('')
|
|
431
|
-
expect(status.exitstatus).to eq(0)
|
|
432
417
|
|
|
433
418
|
expect(File.directory?('.murano')).to be true
|
|
434
419
|
expect(File.exist?('.murano/config')).to be true
|
|
@@ -458,7 +443,7 @@ RSpec.describe 'murano init', :cmd do
|
|
|
458
443
|
end
|
|
459
444
|
# The test account will have one business, one product, and one application.
|
|
460
445
|
# So it won't ask any questions.
|
|
461
|
-
out, err
|
|
446
|
+
out, err = murano_command_run('init')
|
|
462
447
|
expected = expected_response_when_ids_found_in_config(
|
|
463
448
|
self,
|
|
464
449
|
expect_rebasing: true,
|
|
@@ -467,7 +452,6 @@ RSpec.describe 'murano init', :cmd do
|
|
|
467
452
|
out_lines = out.lines.map { |line| strip_fancy(line) }
|
|
468
453
|
expect(out_lines).to match_array(expected)
|
|
469
454
|
expect(err).to eq('')
|
|
470
|
-
expect(status.exitstatus).to eq(0)
|
|
471
455
|
|
|
472
456
|
expect(File.directory?('.murano')).to be true
|
|
473
457
|
expect(File.exist?('.murano/config')).to be true
|