hammer_cli_katello 0.24.0 → 0.24.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.
@@ -0,0 +1,236 @@
1
+ require File.join(File.dirname(__FILE__), '../../../test_helper')
2
+ require_relative '../content_export_helpers'
3
+ require 'hammer_cli_katello/content_export'
4
+
5
+ describe 'content-export incremental version' do
6
+ include ForemanTaskHelpers
7
+ include ContentExportHelpers
8
+
9
+ before do
10
+ @cmd = %w(content-export incremental version)
11
+ end
12
+
13
+ let(:task_id) { '5' }
14
+ let(:response) do
15
+ {
16
+ 'id' => task_id,
17
+ 'state' => 'planned',
18
+ 'output' => {
19
+ 'export_history_id' => 2
20
+ }
21
+ }
22
+ end
23
+
24
+ let(:export_history_id) { 1000 }
25
+
26
+ let(:export_history) do
27
+ {
28
+ "id": export_history_id,
29
+ "path": "/tmp",
30
+ "metadata": {}
31
+ }
32
+ end
33
+
34
+ let(:content_view_id) { '77' }
35
+ let(:content_view_version_id) { 100 }
36
+
37
+ let(:version) { '10.0' }
38
+ let(:destination_server) { "dream.example.com" }
39
+
40
+ it "performs export with required options and async" do
41
+ params = [
42
+ "--id=#{content_view_version_id}",
43
+ '--destination-server=foo',
44
+ '--async'
45
+ ]
46
+ expects_repositories_in_version(content_view_version_id)
47
+
48
+ ex = api_expects(:content_export_incrementals, :version)
49
+ ex.returns(response)
50
+
51
+ result = run_cmd(@cmd + params)
52
+
53
+ assert_equal("Content view version is being exported in task #{task_id}.\n"\
54
+ + "Once the task completes the export metadata must be generated with the "\
55
+ + "command:\n hammer content-export generate-metadata --task-id #{task_id}\n", result.out)
56
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
57
+ end
58
+
59
+ it "performs export with required options" do
60
+ params = [
61
+ "--id=#{content_view_version_id}",
62
+ '--destination-server=foo'
63
+ ]
64
+
65
+ expects_repositories_in_version(content_view_version_id)
66
+ ex = api_expects(:content_export_incrementals, :version)
67
+ ex.returns(response)
68
+
69
+ expect_foreman_task(task_id).at_least_once
70
+
71
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
72
+ any_instance.
73
+ expects(:fetch_export_history).
74
+ returns(export_history)
75
+
76
+ result = run_cmd(@cmd + params)
77
+ assert_match(/Generated .*metadata.*json/, result.out)
78
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
79
+ end
80
+
81
+ it "performs export with history id" do
82
+ params = [
83
+ "--id=#{content_view_version_id}",
84
+ "--destination-server=#{destination_server}",
85
+ "--from-history-id=#{export_history_id}"
86
+ ]
87
+ expects_repositories_in_version(content_view_version_id)
88
+ api_expects(:content_export_incrementals, :version)
89
+ .with_params('id' => content_view_version_id,
90
+ 'destination_server' => destination_server,
91
+ 'from_history_id' => export_history_id)
92
+ .returns(response)
93
+
94
+ expect_foreman_task(task_id).at_least_once
95
+
96
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
97
+ any_instance.
98
+ expects(:fetch_export_history).
99
+ returns(export_history)
100
+
101
+ result = run_cmd(@cmd + params)
102
+ assert_match(/Generated .*metadata.*json/, result.out)
103
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
104
+ end
105
+
106
+ it 'fails on missing required params' do
107
+ params = [
108
+ '--boo-id=2'
109
+ ]
110
+
111
+ result = run_cmd(@cmd + params)
112
+ expected_error = "Could not export the content view version:\n"
113
+
114
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
115
+ assert_equal(result.err[/#{expected_error}/], expected_error)
116
+ end
117
+
118
+ it 'correctly resolves content-view-id and content view version number' do
119
+ params = ["--content-view-id=#{content_view_id}",
120
+ "--version=#{version}",
121
+ "--destination-server=#{destination_server}",
122
+ "--async"]
123
+ expects_repositories_in_version(content_view_version_id)
124
+ cvv_expect = api_expects(:content_view_versions, :index) do |p|
125
+ assert_equal p['content_view_id'].to_s, content_view_id.to_s
126
+ assert_equal p["version"], version
127
+ end
128
+
129
+ cvv_expect.at_least_once.
130
+ returns(index_response([{'id' => content_view_version_id}]))
131
+
132
+ ex = api_expects(:content_export_incrementals, :version) do |p|
133
+ assert_equal p['id'], content_view_version_id
134
+ assert_equal p["destination_server"], destination_server
135
+ end
136
+ ex.returns(response)
137
+
138
+ run_cmd(@cmd + params)
139
+ end
140
+
141
+ it 'fails on missing content-view name/id' do
142
+ params = []
143
+
144
+ result = run_cmd(@cmd + params)
145
+ expected_error = " At least one of options --id, --content-view, --content-view-id is required"
146
+
147
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
148
+ assert_match(/#{expected_error}/, result.err)
149
+ end
150
+
151
+ it 'fails on missing content-view version' do
152
+ params = ["--content-view-id=2"]
153
+ result = run_cmd(@cmd + params)
154
+ expected_error = "Option --version is required"
155
+
156
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
157
+ assert_match(/#{expected_error}/, result.err)
158
+ end
159
+
160
+ it 'fails on missing content-view missing org' do
161
+ params = ["--content-view=lol", "--version=4.0"]
162
+ result = run_cmd(@cmd + params)
163
+ expected_error = "At least one of options --organization-id, "\
164
+ "--organization, --organization-label is required."
165
+
166
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
167
+ assert_match(/#{expected_error}/, result.err)
168
+ end
169
+
170
+ it 'correctly resolves content-view-id and content view version number' do
171
+ params = ["--content-view-id=#{content_view_id}",
172
+ "--version=#{version}",
173
+ "--destination-server=#{destination_server}",
174
+ "--async"]
175
+
176
+ cvv_expect = api_expects(:content_view_versions, :index) do |p|
177
+ assert_equal p['content_view_id'].to_s, content_view_id.to_s
178
+ assert_equal p["version"], version
179
+ end
180
+
181
+ cvv_expect.at_least_once.
182
+ returns(index_response([{'id' => content_view_version_id}]))
183
+
184
+ api_expects(:content_export_incrementals, :version)
185
+ .with_params('id' => content_view_version_id)
186
+ .returns(response)
187
+
188
+ expects_repositories_in_version(content_view_version_id)
189
+ run_cmd(@cmd + params)
190
+ end
191
+
192
+ it 'warns of lazy repositories' do
193
+ params = ["--id=#{content_view_version_id}"]
194
+ expects_repositories_in_version(content_view_version_id, [{id: 200}])
195
+
196
+ api_expects(:content_export_incrementals, :version)
197
+ .with_params('id' => content_view_version_id)
198
+ .returns(response)
199
+
200
+ expect_foreman_task(task_id).at_least_once
201
+
202
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
203
+ any_instance.
204
+ expects(:fetch_export_history).
205
+ returns(export_history)
206
+
207
+ result = run_cmd(@cmd + params)
208
+ assert_match(/Unable to fully export this version because/, result.out)
209
+ assert_match(/200/, result.out)
210
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
211
+ end
212
+
213
+ it 'Errors out on lazy repositories if --fail-on-missing-content' do
214
+ params = ["--id=#{content_view_version_id}",
215
+ "--fail-on-missing-content"]
216
+ expects_repositories_in_version(content_view_version_id, [{id: 200}])
217
+
218
+ ex = api_expects(:content_export_incrementals, :version)
219
+ ex.returns(response)
220
+
221
+ expect_foreman_task(task_id).at_least_once
222
+
223
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
224
+ any_instance.
225
+ expects(:fetch_export_history).
226
+ returns(export_history)
227
+
228
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
229
+ any_instance.
230
+ expects(:exit).with(HammerCLI::EX_SOFTWARE)
231
+
232
+ result = run_cmd(@cmd + params)
233
+ assert_match(/Unable to fully export this version because/, result.out)
234
+ assert_match(/200/, result.out)
235
+ end
236
+ end
@@ -1,7 +1,7 @@
1
1
  require File.join(File.dirname(__FILE__), '../../test_helper')
2
- require 'hammer_cli_katello/content_view_version'
2
+ require 'hammer_cli_katello/content_export'
3
3
 
4
- describe 'content-view version export-histories' do
4
+ describe 'content-export list' do
5
5
  let(:empty_response) do
6
6
  {
7
7
  "total" => 0,
@@ -19,7 +19,7 @@ describe 'content-view version export-histories' do
19
19
  end
20
20
 
21
21
  it 'allows minimal options' do
22
- ex = api_expects(:content_view_versions, :export_histories)
22
+ ex = api_expects(:content_exports, :index)
23
23
 
24
24
  ex.returns(empty_response)
25
25
  # rubocop:disable LineLength
@@ -28,7 +28,7 @@ ID | DESTINATION SERVER | PATH | CONTENT VIEW VERSION | CONTENT VIEW VERSION ID
28
28
  ---|--------------------|------|----------------------|-------------------------|------------|-----------
29
29
  ')
30
30
  # rubocop:enable LineLength
31
- result = run_cmd(%w(content-view version export-histories))
31
+ result = run_cmd(%w(content-export list))
32
32
  assert_cmd(expected_result, result)
33
33
  end
34
34
  end
@@ -0,0 +1,85 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require 'hammer_cli_katello/content_import'
3
+
4
+ describe 'content-import library' do
5
+ include ForemanTaskHelpers
6
+
7
+ before do
8
+ @cmd = %w(content-import library)
9
+ end
10
+
11
+ let(:task_id) { '5' }
12
+
13
+ let(:response) do
14
+ {
15
+ 'id' => task_id,
16
+ 'state' => 'planned'
17
+ }
18
+ end
19
+
20
+ let(:path) do
21
+ File.dirname(__FILE__)
22
+ end
23
+
24
+ let(:metadata) do
25
+ JSON.parse(File.read("#{path}/metadata.json"))
26
+ end
27
+
28
+ let(:organization_id) { 3 }
29
+
30
+ it "performs import with required options and async" do
31
+ params = [
32
+ "--organization-id=#{organization_id}",
33
+ "--path=#{path}",
34
+ '--async'
35
+ ]
36
+ api_expects(:content_imports, :library)
37
+ .with_params('organization_id' => organization_id, 'path' => path, 'metadata' => metadata)
38
+ .returns(response)
39
+
40
+ result = run_cmd(@cmd + params)
41
+
42
+ assert_equal("Archive is being imported in task #{task_id}.\n", result.out)
43
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
44
+ end
45
+
46
+ it "performs import with required options" do
47
+ params = [
48
+ "--organization-id=#{organization_id}",
49
+ "--path=#{path}"
50
+ ]
51
+
52
+ api_expects(:content_imports, :library)
53
+ .with_params('organization_id' => organization_id, 'path' => path, 'metadata' => metadata)
54
+ .returns(response)
55
+
56
+ expect_foreman_task(task_id)
57
+
58
+ result = run_cmd(@cmd + params)
59
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
60
+ end
61
+
62
+ it 'fails on missing required params' do
63
+ params = [
64
+ '--id=2'
65
+ ]
66
+
67
+ result = run_cmd(@cmd + params)
68
+ expected_error = "Could not import the archive."
69
+
70
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
71
+ assert_equal(result.err[/#{expected_error}/], expected_error)
72
+ end
73
+
74
+ it 'fails on missing metadata.json' do
75
+ bad_path = "/nosuchdir"
76
+ params = [
77
+ "--organization-id=#{organization_id}",
78
+ "--path=#{bad_path}"
79
+ ]
80
+ result = run_cmd(@cmd + params)
81
+ expected_error = "Unable to find '#{bad_path}/metadata.json'."
82
+
83
+ assert_match(/#{expected_error}/, result.err)
84
+ end
85
+ end
@@ -0,0 +1 @@
1
+ {"organization":"export-9697","repository_mapping":{"katello-15062":{"repository":"katello","product":"prod","redhat":false},"misc-28137":{"repository":"misc","product":"prod","redhat":false},"candlepin-37918":{"repository":"candlepin","product":"prod","redhat":false}},"content_view":"view","content_view_version":{"major":1,"minor":0},"incremental":false,"toc":"export-24d91ced-3d11-4fa2-b5ea-19a41f7b97a5-20201118_1523-toc.json"}
@@ -0,0 +1,85 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require 'hammer_cli_katello/content_import'
3
+
4
+ describe 'content-import version' do
5
+ include ForemanTaskHelpers
6
+
7
+ before do
8
+ @cmd = %w(content-import version)
9
+ end
10
+
11
+ let(:task_id) { '5' }
12
+
13
+ let(:response) do
14
+ {
15
+ 'id' => task_id,
16
+ 'state' => 'planned'
17
+ }
18
+ end
19
+
20
+ let(:path) do
21
+ File.dirname(__FILE__)
22
+ end
23
+
24
+ let(:metadata) do
25
+ JSON.parse(File.read("#{path}/metadata.json"))
26
+ end
27
+
28
+ let(:content_view_id) { 3 }
29
+
30
+ it "performs import with required options and async" do
31
+ params = [
32
+ "--content-view-id=#{content_view_id}",
33
+ "--path=#{path}",
34
+ '--async'
35
+ ]
36
+ api_expects(:content_imports, :version)
37
+ .with_params('content_view_id' => content_view_id, 'path' => path, 'metadata' => metadata)
38
+ .returns(response)
39
+
40
+ result = run_cmd(@cmd + params)
41
+
42
+ assert_equal("Archive is being imported in task #{task_id}.\n", result.out)
43
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
44
+ end
45
+
46
+ it "performs import with required options" do
47
+ params = [
48
+ "--content-view-id=#{content_view_id}",
49
+ "--path=#{path}"
50
+ ]
51
+
52
+ api_expects(:content_imports, :version)
53
+ .with_params('content_view_id' => content_view_id, 'path' => path, 'metadata' => metadata)
54
+ .returns(response)
55
+
56
+ expect_foreman_task(task_id)
57
+
58
+ result = run_cmd(@cmd + params)
59
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
60
+ end
61
+
62
+ it 'fails on missing required params' do
63
+ params = [
64
+ '--id=2'
65
+ ]
66
+
67
+ result = run_cmd(@cmd + params)
68
+ expected_error = "Could not import the archive."
69
+
70
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
71
+ assert_equal(result.err[/#{expected_error}/], expected_error)
72
+ end
73
+
74
+ it 'fails on missing metadata.json' do
75
+ bad_path = "/nosuchdir"
76
+ params = [
77
+ "--content-view-id=#{content_view_id}",
78
+ "--path=#{bad_path}"
79
+ ]
80
+ result = run_cmd(@cmd + params)
81
+ expected_error = "Unable to find '#{bad_path}/metadata.json'."
82
+
83
+ assert_match(/#{expected_error}/, result.err)
84
+ end
85
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammer_cli_katello
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.0
4
+ version: 0.24.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Price
@@ -35,7 +35,7 @@ authors:
35
35
  autorequire:
36
36
  bindir: bin
37
37
  cert_chain: []
38
- date: 2020-11-02 00:00:00.000000000 Z
38
+ date: 2020-12-09 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: hammer_cli_foreman
@@ -240,6 +240,11 @@ files:
240
240
  - lib/hammer_cli_katello/commands.rb
241
241
  - lib/hammer_cli_katello/composite_content_view_name_resolvable.rb
242
242
  - lib/hammer_cli_katello/content_credential.rb
243
+ - lib/hammer_cli_katello/content_export.rb
244
+ - lib/hammer_cli_katello/content_export_complete.rb
245
+ - lib/hammer_cli_katello/content_export_helper.rb
246
+ - lib/hammer_cli_katello/content_export_incremental.rb
247
+ - lib/hammer_cli_katello/content_import.rb
243
248
  - lib/hammer_cli_katello/content_override.rb
244
249
  - lib/hammer_cli_katello/content_view.rb
245
250
  - lib/hammer_cli_katello/content_view_component.rb
@@ -364,6 +369,16 @@ files:
364
369
  - test/functional/capsule/list_test.rb
365
370
  - test/functional/content_credentials/info_test.rb
366
371
  - test/functional/content_credentials/list_test.rb
372
+ - test/functional/content_export/complete/library_test.rb
373
+ - test/functional/content_export/complete/version_test.rb
374
+ - test/functional/content_export/content_export_helpers.rb
375
+ - test/functional/content_export/generate_metadata_test.rb
376
+ - test/functional/content_export/incremental/library_test.rb
377
+ - test/functional/content_export/incremental/version_test.rb
378
+ - test/functional/content_export/list_test.rb
379
+ - test/functional/content_import/library_test.rb
380
+ - test/functional/content_import/metadata.json
381
+ - test/functional/content_import/version_test.rb
367
382
  - test/functional/content_view/add_content_view_version_test.rb
368
383
  - test/functional/content_view/add_repository_test.rb
369
384
  - test/functional/content_view/component/add_test.rb
@@ -388,7 +403,6 @@ files:
388
403
  - test/functional/content_view/remove_test.rb
389
404
  - test/functional/content_view/update_test.rb
390
405
  - test/functional/content_view/version/default_export_test.rb
391
- - test/functional/content_view/version/export_histories_test.rb
392
406
  - test/functional/content_view/version/export_test.rb
393
407
  - test/functional/content_view/version/import_test.rb
394
408
  - test/functional/content_view/version/incremental_update_test.rb
@@ -521,8 +535,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
521
535
  - !ruby/object:Gem::Version
522
536
  version: '0'
523
537
  requirements: []
524
- rubyforge_project:
525
- rubygems_version: 2.7.6.2
538
+ rubygems_version: 3.1.4
526
539
  signing_key:
527
540
  specification_version: 4
528
541
  summary: Katello commands for Hammer
@@ -572,6 +585,16 @@ test_files:
572
585
  - test/functional/capsule/list_test.rb
573
586
  - test/functional/content_credentials/info_test.rb
574
587
  - test/functional/content_credentials/list_test.rb
588
+ - test/functional/content_export/complete/library_test.rb
589
+ - test/functional/content_export/complete/version_test.rb
590
+ - test/functional/content_export/content_export_helpers.rb
591
+ - test/functional/content_export/generate_metadata_test.rb
592
+ - test/functional/content_export/incremental/library_test.rb
593
+ - test/functional/content_export/incremental/version_test.rb
594
+ - test/functional/content_export/list_test.rb
595
+ - test/functional/content_import/library_test.rb
596
+ - test/functional/content_import/metadata.json
597
+ - test/functional/content_import/version_test.rb
575
598
  - test/functional/content_view/add_content_view_version_test.rb
576
599
  - test/functional/content_view/add_repository_test.rb
577
600
  - test/functional/content_view/component/add_test.rb
@@ -596,7 +619,6 @@ test_files:
596
619
  - test/functional/content_view/remove_test.rb
597
620
  - test/functional/content_view/update_test.rb
598
621
  - test/functional/content_view/version/default_export_test.rb
599
- - test/functional/content_view/version/export_histories_test.rb
600
622
  - test/functional/content_view/version/export_test.rb
601
623
  - test/functional/content_view/version/import_test.rb
602
624
  - test/functional/content_view/version/incremental_update_test.rb