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_syncup_spec.rb
CHANGED
|
@@ -16,46 +16,41 @@ RSpec.describe 'murano syncup', :cmd, :needs_password do
|
|
|
16
16
|
murano_solutions_expunge_yes
|
|
17
17
|
|
|
18
18
|
@product_name = rname('syncupTestPrd')
|
|
19
|
-
out, err
|
|
20
|
-
|
|
19
|
+
out, err = murano_command_run(
|
|
20
|
+
'solution create', '--type', 'product', @product_name, '--save',
|
|
21
21
|
)
|
|
22
22
|
expect(err).to eq('')
|
|
23
23
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
24
|
-
expect(status.exitstatus).to eq(0)
|
|
25
24
|
|
|
26
25
|
@applctn_name = rname('syncupTestApp')
|
|
27
|
-
out, err
|
|
28
|
-
|
|
26
|
+
out, err = murano_command_run(
|
|
27
|
+
'solution create', '--type', 'application', @applctn_name, '--save',
|
|
29
28
|
)
|
|
30
29
|
expect(err).to eq('')
|
|
31
30
|
soln_id = out
|
|
32
31
|
expect(soln_id.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
33
|
-
expect(status.exitstatus).to eq(0)
|
|
34
32
|
|
|
35
|
-
out, err
|
|
33
|
+
out, err = murano_command_run('assign set')
|
|
36
34
|
#expect(out).to a_string_starting_with("Linked product #{@product_name}")
|
|
37
35
|
olines = out.lines
|
|
38
36
|
expect(strip_fancy(olines[0]))
|
|
39
37
|
.to eq("Linked '#{@product_name}' to '#{@applctn_name}'\n")
|
|
40
38
|
expect(olines[1]).to eq("Created default event handler\n")
|
|
41
39
|
expect(err).to eq('')
|
|
42
|
-
expect(status.exitstatus).to eq(0)
|
|
43
40
|
end
|
|
44
41
|
|
|
45
42
|
after(:example) do
|
|
46
|
-
out, err, status =
|
|
47
|
-
|
|
43
|
+
out, err, status = murano_command_run(
|
|
44
|
+
'solution delete', @applctn_name, '-y',
|
|
48
45
|
)
|
|
49
46
|
expect(out).to eq('')
|
|
50
47
|
expect(err).to eq('')
|
|
51
|
-
expect(status.exitstatus).to eq(0)
|
|
52
48
|
|
|
53
|
-
out, err, status =
|
|
54
|
-
|
|
49
|
+
out, err, status = murano_command_run(
|
|
50
|
+
'solution delete', @product_name, '-y',
|
|
55
51
|
)
|
|
56
52
|
expect(out).to eq('')
|
|
57
53
|
expect(err).to eq('')
|
|
58
|
-
expect(status.exitstatus).to eq(0)
|
|
59
54
|
end
|
|
60
55
|
|
|
61
56
|
context 'without ProjectFile' do
|
|
@@ -78,12 +73,12 @@ RSpec.describe 'murano syncup', :cmd, :needs_password do
|
|
|
78
73
|
# ‘/tmp/d20170809-7670-z315jn/project/services’ (Interfaces)
|
|
79
74
|
expect(elines).to(satisfy { |_v| elines.length == 2 })
|
|
80
75
|
elines.each do |line|
|
|
81
|
-
expect(strip_fancy(line)).to start_with("
|
|
76
|
+
expect(strip_fancy(line)).to start_with("Skipping missing location '")
|
|
82
77
|
end
|
|
83
78
|
end
|
|
84
79
|
|
|
85
80
|
it 'syncup', :club_40s, :club_30s, :club_20s, :club_10s do
|
|
86
|
-
out, err
|
|
81
|
+
out, err = murano_command_run('syncup')
|
|
87
82
|
outl = out.lines
|
|
88
83
|
# The spec tests set --no-progress, so each sync action gets reported.
|
|
89
84
|
# You'll see:
|
|
@@ -101,13 +96,9 @@ RSpec.describe 'murano syncup', :cmd, :needs_password do
|
|
|
101
96
|
# expect(outl[5]).to eq("Adding item table_util\n")
|
|
102
97
|
expect(outl[5]).to start_with('Adding item ')
|
|
103
98
|
expect(outl[5]).to end_with("table_util\n")
|
|
104
|
-
|
|
105
|
-
# => "
|
|
106
|
-
|
|
107
|
-
# => "Removing item k58sn37r6qz800000_event\n",
|
|
108
|
-
# => "Removing item config_service\n",
|
|
109
|
-
# => "Removing item config_status\n",
|
|
110
|
-
(6..11).each { |ln| expect(outl[ln]).to start_with('Removing item ') }
|
|
99
|
+
expect(outl[6]).to eq("Clearing item user_account\n")
|
|
100
|
+
# => "Clearing item k58sn37r6qz800000_event\n",
|
|
101
|
+
expect(outl[7]).to start_with('Clearing item ')
|
|
111
102
|
# => "Adding item POST_/api/fire\n",
|
|
112
103
|
# => "Adding item PUT_/api/fire/{code}\n",
|
|
113
104
|
# => "Adding item DELETE_/api/fire/{code}\n",
|
|
@@ -115,11 +106,10 @@ RSpec.describe 'murano syncup', :cmd, :needs_password do
|
|
|
115
106
|
# => "Adding item /icon.png\n",
|
|
116
107
|
# => "Adding item /\n",
|
|
117
108
|
# => "Adding item /js/script.js\n",
|
|
118
|
-
(
|
|
109
|
+
(8..14).each { |ln| expect(outl[ln]).to start_with('Adding item ') }
|
|
119
110
|
verify_err_missing_location(err)
|
|
120
|
-
expect(status.exitstatus).to eq(0)
|
|
121
111
|
|
|
122
|
-
out, err
|
|
112
|
+
out, err = murano_command_run('status')
|
|
123
113
|
# MUR-6477/MUR-6479: Uploading empty files broken. There's a fix in
|
|
124
114
|
# the pipeline, but until then, disable the original expect.
|
|
125
115
|
# FIXME: Why is files/icon.png showing up as different?
|
|
@@ -134,41 +124,16 @@ RSpec.describe 'murano syncup', :cmd, :needs_password do
|
|
|
134
124
|
expect(out.lines).to match(
|
|
135
125
|
[
|
|
136
126
|
"Nothing new locally\n",
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
" - S config_status\n",
|
|
140
|
-
" - I config_service\n",
|
|
141
|
-
" - I config_status\n",
|
|
142
|
-
"Items that differ:\n",
|
|
143
|
-
# FIXME/MUR-6477/MUR-6479: Remove these two lines after fix released.
|
|
144
|
-
" M A files/index.html\n",
|
|
145
|
-
" M A files/js/script.js\n",
|
|
127
|
+
"Nothing new remotely\n",
|
|
128
|
+
"Nothing that differs\n",
|
|
146
129
|
]
|
|
147
130
|
)
|
|
148
131
|
end
|
|
149
132
|
verify_err_missing_location(err)
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
out
|
|
153
|
-
expect(out.lines).to match(
|
|
154
|
-
[
|
|
155
|
-
" - S config_service\n",
|
|
156
|
-
" - S config_status\n",
|
|
157
|
-
" - I config_service\n",
|
|
158
|
-
" - I config_status\n",
|
|
159
|
-
# FIXME/MUR-6477/MUR-6479: Uploading empty files is currently broken.
|
|
160
|
-
# So these two diffs show the newline kludge. Change this when fixed.
|
|
161
|
-
# 2018-04-23 16:30: ???: Happening on Jenkins server:
|
|
162
|
-
#" M A files/index.html\n",
|
|
163
|
-
#"@@ -1 +0,0 @@\n",
|
|
164
|
-
#"-\n",
|
|
165
|
-
#" M A files/js/script.js\n",
|
|
166
|
-
#"@@ -1 +0,0 @@\n",
|
|
167
|
-
#"-\n",
|
|
168
|
-
]
|
|
169
|
-
)
|
|
133
|
+
|
|
134
|
+
out, err = murano_command_run('status', '--diff', '--no-grouped')
|
|
135
|
+
expect(out).to eq('')
|
|
170
136
|
verify_err_missing_location(err)
|
|
171
|
-
expect(status.exitstatus).to eq(0)
|
|
172
137
|
end
|
|
173
138
|
end
|
|
174
139
|
|
data/spec/cmd_token_spec.rb
CHANGED
|
@@ -22,9 +22,6 @@ RSpec.describe 'murano token', :cmd, :needs_password, :nondeterministic do
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
context 'with project' do
|
|
25
|
-
#before(:example) { project_up }
|
|
26
|
-
#after(:example) { project_down }
|
|
27
|
-
|
|
28
25
|
def expect_token_host_user_table(stdout, stderr, num_cols: nil)
|
|
29
26
|
expect(stderr).to eq('')
|
|
30
27
|
lines = stdout.lines
|
data/spec/cmd_usage_spec.rb
CHANGED
|
@@ -16,27 +16,33 @@ RSpec.describe 'murano usage', :cmd, :needs_password do
|
|
|
16
16
|
# NOTE: The usage command works on one or more solutions of any type.
|
|
17
17
|
@product_name = rname('usageTest')
|
|
18
18
|
|
|
19
|
-
out, err
|
|
19
|
+
out, err = murano_command_run(
|
|
20
|
+
'solution create', '--type', 'product', @product_name, '--save',
|
|
21
|
+
)
|
|
20
22
|
expect(err).to eq('')
|
|
21
23
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
22
|
-
expect(status.exitstatus).to eq(0)
|
|
23
24
|
|
|
24
|
-
out, err
|
|
25
|
+
out, err = murano_command_run(
|
|
26
|
+
'solution create', '--type', 'application', @product_name, '--save',
|
|
27
|
+
)
|
|
25
28
|
expect(err).to eq('')
|
|
26
29
|
expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
|
|
27
|
-
expect(status.exitstatus).to eq(0)
|
|
28
30
|
end
|
|
31
|
+
|
|
29
32
|
after(:example) do
|
|
30
|
-
out, err
|
|
33
|
+
out, err = murano_command_run('solutions expunge', '--yes')
|
|
31
34
|
expect(out).to eq("Deleted 2 solutions\n")
|
|
32
35
|
expect(err).to eq('')
|
|
33
|
-
expect(status.exitstatus).to eq(0)
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
def confirm_usage_table(olines, ix)
|
|
37
|
-
expect(olines[ix + 0]).to match(
|
|
39
|
+
expect(olines[ix + 0]).to match(
|
|
40
|
+
%r{^(Product|Application): usage[tT]est[a-z0-9]+ <[a-z0-9]+> https://[.\-a-z0-9]+$}
|
|
41
|
+
)
|
|
38
42
|
expect(olines[ix + 1]).to match(/^(\+-+){5}\+$/)
|
|
39
|
-
expect(olines[ix + 2]).to match(
|
|
43
|
+
expect(olines[ix + 2]).to match(
|
|
44
|
+
/^\|\s+\| Quota\s+\| Daily\s+\| Monthly\s+\| Total\s+\|$/
|
|
45
|
+
)
|
|
40
46
|
# Beneath the header row is a splitter line.
|
|
41
47
|
expect(olines[ix + 3]).to match(/^(\+-+){5}\+$/)
|
|
42
48
|
ix += 4
|
|
@@ -54,13 +60,12 @@ RSpec.describe 'murano usage', :cmd, :needs_password do
|
|
|
54
60
|
end
|
|
55
61
|
|
|
56
62
|
it 'show usage', :club_10s do
|
|
57
|
-
out, err
|
|
63
|
+
out, err = murano_command_run('usage')
|
|
58
64
|
expect(err).to eq('')
|
|
59
65
|
olines = out.lines
|
|
60
66
|
ix = 0
|
|
61
67
|
ix = confirm_usage_table(olines, ix)
|
|
62
68
|
_ix = confirm_usage_table(olines, ix)
|
|
63
|
-
expect(status.exitstatus).to eq(0)
|
|
64
69
|
end
|
|
65
70
|
end
|
|
66
71
|
|
data/spec/dry_run_formatter.rb
CHANGED
|
@@ -20,6 +20,7 @@ class DryRunFormatter < RSpec::Core::Formatters::BaseFormatter
|
|
|
20
20
|
RSpec::Core::Formatters.register self, :example_started
|
|
21
21
|
|
|
22
22
|
def start(example_count)
|
|
23
|
+
# 2018-07-26: (lb): "Running 538 specs."
|
|
23
24
|
output << "Running #{example_count.count} specs\n"
|
|
24
25
|
exit(0)
|
|
25
26
|
end
|
data/spec/fixtures/dumped_config
CHANGED
|
@@ -20,8 +20,8 @@ protocol = https
|
|
|
20
20
|
|
|
21
21
|
[location]
|
|
22
22
|
base = <%= File.realpath(@project_dir) %>
|
|
23
|
-
files =
|
|
24
|
-
endpoints =
|
|
23
|
+
files = assets
|
|
24
|
+
endpoints = endpoints
|
|
25
25
|
modules = modules
|
|
26
26
|
eventhandlers = services
|
|
27
27
|
resources = specs/resources.yaml
|
|
@@ -36,14 +36,14 @@ searchFor = **/*
|
|
|
36
36
|
ignoring =
|
|
37
37
|
|
|
38
38
|
[endpoints]
|
|
39
|
-
searchFor = {,../endpoints}/*.lua {,../endpoints}
|
|
39
|
+
searchFor = {,../endpoints}/*.lua {,../endpoints}/*/*.lua
|
|
40
40
|
ignoring = *_test.lua *_spec.lua .*
|
|
41
41
|
|
|
42
42
|
[eventhandler]
|
|
43
43
|
searchFor = *.lua */*.lua {../eventhandlers,../event_handler}/*.lua {../eventhandlers,../event_handler}/*/*.lua
|
|
44
44
|
ignoring = *_test.lua *_spec.lua .*
|
|
45
45
|
skiplist = device.service_call device2.event interface webservice websocket
|
|
46
|
-
undeletable = *.event timer.timer tsdb.exportJob user.account
|
|
46
|
+
undeletable = *.event timer.timer tsdb.exportJob user.account config.service config.status
|
|
47
47
|
|
|
48
48
|
[modules]
|
|
49
49
|
searchFor = *.lua **/*.lua
|
data/spec/spec_helper.rb
CHANGED
|
@@ -36,6 +36,9 @@ RSpec.configure do |config|
|
|
|
36
36
|
config.filter_run_excluding :needs_password if ENV['MURANO_PASSWORD'].nil?
|
|
37
37
|
config.filter_run_excluding :broken_on_windows if Gem.win_platform?
|
|
38
38
|
|
|
39
|
+
# FIXME/2018-07-12: (lb): Make test acct. with element. 'til then: disabled.
|
|
40
|
+
config.filter_run_excluding :needs_exchange_element
|
|
41
|
+
|
|
39
42
|
# rspec-expectations config goes here. You can use an alternate
|
|
40
43
|
# assertion/expectation library such as wrong or the stdlib/minitest
|
|
41
44
|
# assertions if you prefer.
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: MuranoCLI
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.2.
|
|
4
|
+
version: 3.2.1.pre.beta.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael Conrad Tadpol Tilstra
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
11
|
+
date: 2018-07-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: certified
|
|
@@ -528,6 +528,7 @@ files:
|
|
|
528
528
|
- lib/MrMurano/Webservice.rb
|
|
529
529
|
- lib/MrMurano/commands.rb
|
|
530
530
|
- lib/MrMurano/commands/business.rb
|
|
531
|
+
- lib/MrMurano/commands/child.rb
|
|
531
532
|
- lib/MrMurano/commands/completion-bash.erb
|
|
532
533
|
- lib/MrMurano/commands/completion-zsh.erb
|
|
533
534
|
- lib/MrMurano/commands/completion.rb
|
|
@@ -626,6 +627,7 @@ files:
|
|
|
626
627
|
- spec/cmd_status_spec.rb
|
|
627
628
|
- spec/cmd_syncdown_application_spec.rb
|
|
628
629
|
- spec/cmd_syncdown_both_spec.rb
|
|
630
|
+
- spec/cmd_syncdown_unit_spec.rb
|
|
629
631
|
- spec/cmd_syncup_spec.rb
|
|
630
632
|
- spec/cmd_token_spec.rb
|
|
631
633
|
- spec/cmd_usage_spec.rb
|