hammer_cli_katello 0.24.0 → 0.24.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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