hammer_cli_katello 1.0.1 → 1.2.0

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello.rb +5 -1
  3. data/lib/hammer_cli_katello/content_import.rb +16 -1
  4. data/lib/hammer_cli_katello/content_view_version.rb +0 -273
  5. data/lib/hammer_cli_katello/docker.rb +13 -0
  6. data/lib/hammer_cli_katello/docker_manifest.rb +53 -0
  7. data/lib/hammer_cli_katello/docker_tag.rb +40 -0
  8. data/lib/hammer_cli_katello/host_collection.rb +6 -0
  9. data/lib/hammer_cli_katello/host_collection_erratum.rb +10 -0
  10. data/lib/hammer_cli_katello/host_collection_package.rb +30 -0
  11. data/lib/hammer_cli_katello/host_collection_package_group.rb +30 -0
  12. data/lib/hammer_cli_katello/host_errata.rb +9 -1
  13. data/lib/hammer_cli_katello/host_package.rb +32 -0
  14. data/lib/hammer_cli_katello/host_package_group.rb +16 -0
  15. data/lib/hammer_cli_katello/id_resolver.rb +3 -1
  16. data/lib/hammer_cli_katello/organization.rb +10 -0
  17. data/lib/hammer_cli_katello/ping.rb +13 -5
  18. data/lib/hammer_cli_katello/repository.rb +21 -27
  19. data/lib/hammer_cli_katello/simple_content_access.rb +2 -0
  20. data/lib/hammer_cli_katello/version.rb +1 -1
  21. data/locale/hammer-cli-katello.pot +0 -25
  22. data/test/data/4.0/foreman_api.json +1 -1
  23. data/test/data/4.1/foreman_api.json +1 -0
  24. data/test/functional/activation_key/subscriptions_test.rb +5 -2
  25. data/test/functional/content_export/complete/version_test.rb +35 -0
  26. data/test/functional/content_import/list_test.rb +65 -0
  27. data/test/functional/content_import/version_test.rb +6 -6
  28. data/test/functional/host_collection/create_test.rb +11 -0
  29. data/test/functional/organization/info_test.rb +22 -0
  30. data/test/functional/ping_test.rb +52 -13
  31. data/test/test_helper.rb +1 -1
  32. metadata +15 -45
  33. data/lib/hammer_cli_katello/cv_import_export_helper.rb +0 -187
  34. data/test/functional/content_view/version/cv_import_export_helper_test.rb +0 -20
  35. data/test/functional/content_view/version/default_export_test.rb +0 -40
  36. data/test/functional/content_view/version/export_test.rb +0 -148
  37. data/test/functional/content_view/version/import_test.rb +0 -346
  38. data/test/functional/repository/export_test.rb +0 -121
@@ -1,187 +0,0 @@
1
- # rubocop:disable Metrics/ModuleLength
2
- module HammerCLIKatello
3
- module CVImportExportHelper
4
- PUBLISHED_REPOS_DIR = "/var/lib/pulp/published/yum/https/repos/".freeze
5
-
6
- def fetch_exportable_cvv_repositories(cvv)
7
- immediate = []
8
- non_immediate_names = []
9
-
10
- cvv['repositories'].each do |repo|
11
- next unless repo['content_type'] == 'yum'
12
-
13
- api_repo = show(:repositories, 'id' => repo['id'], :full_result => true)
14
-
15
- download_policy = if api_repo['library_instance_id']
16
- library = show(:repositories, 'id' => api_repo['library_instance_id'])
17
- library['download_policy']
18
- else
19
- api_repo['download_policy']
20
- end
21
-
22
- if download_policy == 'immediate'
23
- immediate << api_repo
24
- else
25
- non_immediate_names << api_repo['name']
26
- end
27
- end
28
-
29
- warn_repo_download_policy(non_immediate_names)
30
-
31
- return immediate
32
- end
33
-
34
- def find_local_component_id(component_from_export)
35
- *name, version = component_from_export.split(' ')
36
- name = name.join(' ')
37
- existing_component_cv = content_view(name, options['option_organization_id'])
38
- found_composite_version = existing_component_cv['versions'].select do |v|
39
- v['version'] == version
40
- end
41
- if found_composite_version.empty?
42
- raise _("Unable to find CV version %{cvv} on system. Please ensure it " \
43
- "is already imported." % {'cvv' => component_from_export})
44
- end
45
- found_composite_version.first['id']
46
- end
47
-
48
- def warn_repo_download_policy(repository_names)
49
- return if repository_names.empty?
50
-
51
- msg = <<~MSG
52
- The following repositories could not be exported due to the download policy
53
- not being set to 'immediate':
54
- #{repository_names.join(', ')}
55
- MSG
56
- print_message msg
57
- end
58
-
59
- def collect_packages(repositories)
60
- repositories.each do |repo|
61
- per_page = 50
62
- repo['packages'] = []
63
- repo['errata'] = []
64
- repo_packages = repo['content_counts']['rpm']
65
- errata_count = repo['content_counts']['erratum']
66
- pkg_pages = (repo_packages / per_page.to_f).ceil
67
- errata_pages = (errata_count / per_page.to_f).ceil
68
- (1..pkg_pages).each do |page|
69
- repo['packages'] += index(:packages, 'repository_id' => repo['id'],
70
- :page => page, :per_page => 50)
71
- end
72
- (1..errata_pages).each do |page|
73
- repo['errata'] += index(:errata, 'repository_id' => repo['id'],
74
- :page => page, :per_page => 50)
75
- end
76
- end
77
- end
78
-
79
- def import_checks(cv, import_cv, major, minor)
80
- version = "#{major}.#{minor}".to_f
81
-
82
- if import_cv.nil?
83
- raise _("The Content View #{cv['name']} is not present on this server,"\
84
- " please create the Content View and try the import again.")
85
- end
86
-
87
- unless import_cv['default']
88
- if import_cv['latest_version'].to_f >= version
89
- raise _("The latest version (#{import_cv['latest_version']}) of"\
90
- " the Content View '#{cv['name']}'"\
91
- " is greater or equal to the version you are trying to import (#{version})")
92
- end
93
- end
94
-
95
- unless import_cv['repository_ids'].nil?
96
- repositories = import_cv['repository_ids'].collect do |repo_id|
97
- show(:repositories, 'id' => repo_id)
98
- end
99
- repositories.each do |repo|
100
- if repo['mirror_on_sync'] == true
101
- raise _("The Repository '#{repo['name']}' is set with Mirror-on-Sync to YES."\
102
- " Please change Mirror-on-Sync to NO and try the import again.")
103
- end
104
- end
105
- end
106
- end
107
-
108
- def untar_export(options)
109
- export_tar_file = options[:filename]
110
- export_tar_dir = options[:dirname]
111
- export_tar_prefix = options[:prefix]
112
-
113
- Dir.chdir(export_tar_dir) do
114
- `tar -xf #{export_tar_file}`
115
- end
116
-
117
- Dir.chdir("#{export_tar_dir}/#{export_tar_prefix}") do
118
- if File.exist?(export_tar_file.gsub('.tar', '-repos.tar'))
119
- `tar -xf #{export_tar_file.gsub('.tar', '-repos.tar')}`
120
- end
121
- end
122
- end
123
-
124
- def obtain_export_params(option_export_tar)
125
- export_tar_file = File.basename(option_export_tar)
126
- {:filename => export_tar_file,
127
- :dirname => File.dirname(option_export_tar),
128
- :prefix => export_tar_file.gsub('.tar', '')}
129
- end
130
-
131
- def read_json(options)
132
- export_tar_file = options[:filename]
133
- export_tar_dir = options[:dirname]
134
- export_tar_prefix = options[:prefix]
135
-
136
- json_file = export_tar_file.gsub('tar', 'json')
137
- json_file = "#{export_tar_dir}/#{export_tar_prefix}/#{json_file}"
138
- json_file = File.read(json_file)
139
- JSON.parse(json_file)
140
- end
141
-
142
- def export_json(export_json_options)
143
- content_view_version = export_json_options[:cvv]
144
- repositories = export_json_options[:repositories]
145
- json = {
146
- "name" => content_view_version['content_view']['name'],
147
- "major" => content_view_version['major'],
148
- "minor" => content_view_version['minor']
149
- }
150
- json["composite_components"] = export_json_options[:component_cvvs]
151
- json["repositories"] = repositories.collect do |repo|
152
- {
153
- "id" => repo['id'],
154
- "label" => repo['label'],
155
- "content_type" => repo['content_type'],
156
- "backend_identifier" => repo['backend_identifier'],
157
- "relative_path" => repo['relative_path'],
158
- "on_disk_path" => "#{PUBLISHED_REPOS_DIR}/#{repo['relative_path']}",
159
- "rpm_filenames" => repo['packages'].collect { |package| package['filename'] },
160
- "errata_ids" => repo['errata'].collect { |errata| errata['errata_id'] }
161
- }
162
- end
163
- json
164
- end
165
-
166
- def fail_msg_import
167
- _("This command is not supported with Pulp 3. Use `hammer content-import` instead.")
168
- end
169
-
170
- def fail_msg_export
171
- _("This command is not supported with Pulp 3. Use `hammer content-export` instead.")
172
- end
173
-
174
- def validate_pulp3_not_enabled(failure_message)
175
- pulp3_enabled = HammerCLIForeman
176
- .foreman_api_connection
177
- .resource(:content_exports)
178
- .call(:api_status)['api_usable']
179
- if pulp3_enabled
180
- raise failure_message
181
- end
182
- rescue NoMethodError
183
- # if the api endpoint isn't there, the validation passes
184
- true
185
- end
186
- end
187
- end
@@ -1,20 +0,0 @@
1
- require_relative '../../test_helper'
2
- describe 'CVImportExportHelper' do
3
- describe 'validate_pulp3_not_enabled' do
4
- include HammerCLIKatello::CVImportExportHelper
5
- it 'returns true when the api endpoint does not return a value' do
6
- api_expects(:content_exports, :api_status)
7
- assert_equal true, validate_pulp3_not_enabled('fail_msg')
8
- end
9
-
10
- it 'raises error when the api reports Pulp 3 is enabled' do
11
- api_expects(:content_exports, :api_status).returns('api_usable' => true)
12
- assert_raises(RuntimeError, 'fail msg') { validate_pulp3_not_enabled('fail msg') }
13
- end
14
-
15
- it 'returns nil when the api reports Pulp 3 is not enabled' do
16
- api_expects(:content_exports, :api_status).returns('api_usable' => false)
17
- assert_equal nil, validate_pulp3_not_enabled('fail_msg')
18
- end
19
- end
20
- end
@@ -1,40 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../../test_helper')
2
-
3
- describe 'content-view version export' do
4
- include ForemanTaskHelpers
5
-
6
- before do
7
- @cmd = %w(content-view version export-default)
8
- end
9
-
10
- it "performs export with bad SELinux" do
11
- params = [
12
- '--export-dir=/tmp/default'
13
- ]
14
-
15
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
16
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
17
-
18
- Dir.expects(:mkdir).with('/tmp/default').returns(0)
19
- Kernel.expects(:system).with("rsync -aL /var/lib/pulp/published/yum/https/repos/ /tmp/default")
20
-
21
- result = run_cmd(@cmd + params)
22
- assert_equal(HammerCLI::EX_CANTCREAT, result.exit_code)
23
- end
24
-
25
- it "performs export" do
26
- params = [
27
- '--export-dir=/tmp/default'
28
- ]
29
-
30
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
31
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
32
-
33
- Dir.expects(:exist?).with('/tmp/default').returns(0)
34
- Kernel.expects(:system).with("rsync -aL /var/lib/pulp/published/yum/https/repos/ /tmp/default")
35
- .returns(true)
36
-
37
- result = run_cmd(@cmd + params)
38
- assert_equal(HammerCLI::EX_OK, result.exit_code)
39
- end
40
- end
@@ -1,148 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../../test_helper')
2
-
3
- describe 'content-view version export' do
4
- include ForemanTaskHelpers
5
-
6
- before do
7
- @cmd = %w(content-view version export)
8
- end
9
-
10
- it "performs export" do
11
- HammerCLIKatello::ContentViewVersion::ExportCommand
12
- .any_instance
13
- .expects(:validate_pulp3_not_enabled)
14
- .returns(true)
15
- params = [
16
- '--id=5',
17
- '--export-dir=/tmp/exports'
18
- ]
19
-
20
- ex = api_expects(:content_view_versions, :show)
21
- ex.returns(
22
- 'id' => '5',
23
- 'repositories' => [{'id' => '2', 'content_type' => 'yum'}],
24
- 'major' => 1,
25
- 'minor' => 0,
26
- 'content_view' => {'name' => 'cv'},
27
- 'content_view_id' => 4321
28
- )
29
-
30
- ex = api_expects(:content_views, :show)
31
- ex.returns(
32
- 'id' => '4321',
33
- 'composite' => false,
34
- 'label' => 'cv'
35
- )
36
-
37
- ex = api_expects(:repositories, :show).with_params('id' => '2')
38
- ex.returns(
39
- 'id' => '2',
40
- 'label' => 'Test_Repo',
41
- 'content_type' => 'yum',
42
- 'download_policy' => 'immediate',
43
- 'backend_identifier' => 'Default_Organization-Library-Test_Repo',
44
- 'relative_path' => 'Default_Organization/Library/Test_Repo',
45
- 'library_instance_id' => '1',
46
- 'content_counts' => {
47
- 'rpm' => 1,
48
- 'erratum' => 1
49
- }
50
- )
51
-
52
- api_expects(:repositories, :show).with_params('id' => '1').returns(
53
- 'id' => '1',
54
- 'download_policy' => 'immediate'
55
- )
56
- api_expects(:packages, :index).returns('results' => [])
57
- api_expects(:errata, :index).returns('results' => [])
58
-
59
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
60
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
61
-
62
- Dir.expects(:chdir).with("/var/lib/pulp/published/yum/https/repos/").returns(true)
63
- Dir.expects(:mkdir).with('/tmp/exports/export-cv-1.0').returns(0)
64
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
65
- Dir.expects(:chdir).with('/tmp/exports/export-cv-1.0').returns(0)
66
-
67
- result = run_cmd(@cmd + params)
68
- assert_equal(HammerCLI::EX_OK, result.exit_code)
69
- end
70
-
71
- it "performs composite export" do
72
- HammerCLIKatello::ContentViewVersion::ExportCommand
73
- .any_instance
74
- .expects(:validate_pulp3_not_enabled)
75
- .returns(true)
76
- params = [
77
- '--id=999',
78
- '--export-dir=/tmp/exports'
79
- ]
80
-
81
- ex = api_expects(:content_view_versions, :show)
82
- ex.returns(
83
- 'id' => '999',
84
- 'repositories' => [{'id' => '2'}],
85
- 'major' => 1,
86
- 'minor' => 0,
87
- 'content_view' => {'name' => 'cv'},
88
- 'content_view_id' => 4321
89
- )
90
-
91
- ex = api_expects(:content_views, :show)
92
- ex.returns(
93
- 'id' => '4321',
94
- 'composite' => true,
95
- 'components' => [{ 'name' => "injera 95.5" }, {'name' => 'carrot wot 87.0'}],
96
- 'label' => 'cv'
97
- )
98
-
99
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
100
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
101
-
102
- Dir.expects(:chdir).with("/var/lib/pulp/published/yum/https/repos/").never
103
- Dir.expects(:mkdir).with('/tmp/exports/export-cv-1.0').returns(0)
104
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
105
- Dir.expects(:chdir).with('/tmp/exports/export-cv-1.0').returns(0)
106
-
107
- result = run_cmd(@cmd + params)
108
- assert_equal(HammerCLI::EX_OK, result.exit_code)
109
- end
110
-
111
- it "fails export if content view version has no repository" do
112
- HammerCLIKatello::ContentViewVersion::ExportCommand
113
- .any_instance
114
- .expects(:validate_pulp3_not_enabled)
115
- .returns(true)
116
- params = [
117
- '--id=5',
118
- '--export-dir=/tmp/exports'
119
- ]
120
-
121
- ex = api_expects(:content_view_versions, :show)
122
- ex.returns(
123
- 'id' => '5',
124
- 'name' => 'Test_version',
125
- 'repositories' => [],
126
- 'major' => 1,
127
- 'minor' => 0,
128
- 'content_view' => {'name' => 'cv'},
129
- 'content_view_id' => 4321,
130
- 'puppet_modules' => []
131
- )
132
-
133
- ex = api_expects(:content_views, :show)
134
- ex.returns(
135
- 'id' => '4321',
136
- 'composite' => false
137
- )
138
-
139
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
140
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
141
-
142
- result = run_cmd(@cmd + params)
143
- assert_equal(result.err, "Could not export the content view:\n"\
144
- " Error: Ensure the content view version 'Test_version'"\
145
- " has at least one repository.\n")
146
- assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
147
- end
148
- end
@@ -1,346 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../../test_helper')
2
-
3
- describe 'content-view version import' do
4
- include ForemanTaskHelpers
5
-
6
- before do
7
- @cmd = %w(content-view version import)
8
- end
9
-
10
- it "performs import" do
11
- HammerCLIKatello::ContentViewVersion::ImportCommand
12
- .any_instance
13
- .expects(:validate_pulp3_not_enabled)
14
- .returns(true)
15
- params = [
16
- '--export-tar=/tmp/exports/export-2.tar',
17
- '--organization-id=1'
18
- ]
19
-
20
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
21
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
22
-
23
- File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
24
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
25
- Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
26
- File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
27
- JSON.dump(
28
- 'name' => 'Foo View',
29
- 'major' => '5',
30
- 'minor' => '0',
31
- 'repositories' => [{
32
- 'label' => 'foo',
33
- 'rpm_filenames' => ['foo-1.0-1.el7']
34
- }]
35
- )
36
- )
37
-
38
- ex = api_expects(:content_views, :index)
39
- ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
40
- ex.returns(
41
- 'results' => [{
42
- 'id' => '5',
43
- 'repositories' => [{'id' => '2', 'label' => 'foo'}],
44
- 'content_view' => {'name' => 'cv'}
45
- }]
46
- )
47
-
48
- ex = api_expects(:repositories, :index)
49
- ex = ex.with_params('organization_id' => '1', 'library' => true)
50
- ex.returns(
51
- 'results' => [{
52
- 'id' => '2',
53
- 'label' => 'foo'
54
- }]
55
- )
56
-
57
- ex = api_expects(:repositories, :sync)
58
- ex = ex.with_params('id' => '2', 'source_url' => "file:///tmp/exports/export-2/")
59
- ex.returns('id' => '2', 'state' => 'planned')
60
-
61
- expect_foreman_task('3')
62
-
63
- ex = api_expects(:content_views, :publish)
64
- ex = ex.with_params(
65
- 'id' => '5',
66
- 'major' => '5',
67
- 'minor' => '0',
68
- 'repos_units' => [{
69
- 'label' => 'foo',
70
- 'rpm_filenames' => ['foo-1.0-1.el7']
71
- }]
72
- )
73
- ex.returns('id' => '2', 'state' => 'planned')
74
-
75
- expect_foreman_task('3')
76
-
77
- result = run_cmd(@cmd + params)
78
- assert_equal(HammerCLI::EX_OK, result.exit_code)
79
- end
80
-
81
- it "performs composite import" do
82
- HammerCLIKatello::ContentViewVersion::ImportCommand
83
- .any_instance
84
- .expects(:validate_pulp3_not_enabled)
85
- .returns(true)
86
- params = [
87
- '--export-tar=/tmp/exports/export-999.tar',
88
- '--organization-id=1'
89
- ]
90
-
91
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
92
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
93
-
94
- File.expects(:exist?).with("/tmp/exports/export-999.tar").returns(true)
95
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
96
- Dir.expects(:chdir).with('/tmp/exports/export-999').returns(0)
97
- File.expects(:read).with("/tmp/exports/export-999/export-999.json").returns(
98
- JSON.dump(
99
- 'name' => 'Foo Composite View',
100
- 'major' => '10',
101
- 'minor' => '0',
102
- 'composite_components' => ["berbere 55.32"]
103
- )
104
- )
105
-
106
- ex = api_expects(:content_views, :index)
107
- ex = ex.with_params('name' => 'berbere', 'organization_id' => '1')
108
- ex.returns(
109
- 'results' => [{'versions' => [{'version' => '10.0', 'id' => '654'},
110
- {'version' => '55.32', 'id' => '876'}]
111
- }]
112
- )
113
-
114
- ex = api_expects(:content_views, :index)
115
- ex = ex.with_params('name' => 'Foo Composite View', 'organization_id' => '1')
116
- ex.returns(
117
- 'results' => [{
118
- 'id' => '5',
119
- 'repositories' => [{'id' => '2', 'label' => 'foo'}],
120
- 'content_view' => {'name' => 'cv'}
121
- }]
122
- )
123
-
124
- ex = api_expects(:content_views, :update)
125
- ex = ex.with_params(
126
- 'id' => '5',
127
- 'component_ids' => ['876']
128
- )
129
- ex.returns('id' => '5', 'state' => 'planned')
130
-
131
- ex = api_expects(:content_views, :publish)
132
- ex = ex.with_params(
133
- 'id' => '5',
134
- 'major' => '10',
135
- 'minor' => '0'
136
- )
137
- ex.returns('id' => '2', 'state' => 'planned')
138
-
139
- expect_foreman_task('3')
140
-
141
- result = run_cmd(@cmd + params)
142
- assert_equal(HammerCLI::EX_OK, result.exit_code)
143
- end
144
-
145
- it "performs composite import, component not found" do
146
- HammerCLIKatello::ContentViewVersion::ImportCommand
147
- .any_instance
148
- .expects(:validate_pulp3_not_enabled)
149
- .returns(true)
150
- params = [
151
- '--export-tar=/tmp/exports/export-999.tar',
152
- '--organization-id=1'
153
- ]
154
-
155
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
156
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
157
-
158
- File.expects(:exist?).with("/tmp/exports/export-999.tar").returns(true)
159
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
160
- Dir.expects(:chdir).with('/tmp/exports/export-999').returns(0)
161
- File.expects(:read).with("/tmp/exports/export-999/export-999.json").returns(
162
- JSON.dump(
163
- 'name' => 'Foo Composite View',
164
- 'major' => '10',
165
- 'minor' => '0',
166
- 'composite_components' => ["berbere 55.32", "unicorn 99.99"]
167
- )
168
- )
169
-
170
- ex = api_expects(:content_views, :index)
171
- ex = ex.with_params('name' => 'berbere', 'organization_id' => '1')
172
- ex.returns(
173
- 'results' => [{'versions' => [{'version' => '10.0', 'id' => '654'},
174
- {'version' => '55.32', 'id' => '876'}]
175
- }]
176
- )
177
-
178
- ex = api_expects(:content_views, :index)
179
- ex = ex.with_params('name' => 'unicorn', 'organization_id' => '1')
180
- ex.returns(
181
- 'results' => []
182
- )
183
-
184
- ex = api_expects(:content_views, :index)
185
- ex = ex.with_params('name' => 'Foo Composite View', 'organization_id' => '1')
186
- ex.returns(
187
- 'results' => [{
188
- 'id' => '5',
189
- 'repositories' => [{'id' => '2', 'label' => 'foo'}],
190
- 'content_view' => {'name' => 'cv'}
191
- }]
192
- )
193
-
194
- result = run_cmd(@cmd + params)
195
- assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
196
- end
197
-
198
- it "fails import if cv has not been created" do
199
- HammerCLIKatello::ContentViewVersion::ImportCommand
200
- .any_instance
201
- .expects(:validate_pulp3_not_enabled)
202
- .returns(true)
203
- params = [
204
- '--export-tar=/tmp/exports/export-2.tar',
205
- '--organization-id=1'
206
- ]
207
-
208
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
209
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
210
-
211
- File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
212
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
213
- Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
214
- File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
215
- JSON.dump(
216
- 'name' => 'Foo View'
217
- )
218
- )
219
-
220
- ex = api_expects(:content_views, :index)
221
- ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
222
- ex.returns([])
223
-
224
- result = run_cmd(@cmd + params)
225
- assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
226
- end
227
-
228
- it "fails import if repo is set to mirror-on-sync" do
229
- HammerCLIKatello::ContentViewVersion::ImportCommand
230
- .any_instance
231
- .expects(:validate_pulp3_not_enabled)
232
- .returns(true)
233
- params = [
234
- '--export-tar=/tmp/exports/export-2.tar',
235
- '--organization-id=1'
236
- ]
237
-
238
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
239
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
240
-
241
- File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
242
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
243
- Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
244
- File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
245
- JSON.dump(
246
- 'name' => 'Foo View',
247
- 'major' => '2',
248
- 'minor' => '1'
249
- )
250
- )
251
-
252
- ex = api_expects(:content_views, :index)
253
- ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
254
- ex.returns(
255
- 'results' => [{
256
- 'id' => '5',
257
- 'repositories' => [{'id' => '2', 'label' => 'foo', 'mirror_on_sync' => 'true'}],
258
- 'content_view' => {'name' => 'cv'}
259
- }]
260
- )
261
-
262
- result = run_cmd(@cmd + params)
263
- assert_equal(result.exit_code, 70)
264
- end
265
-
266
- it "fails import if cv version already exists" do
267
- HammerCLIKatello::ContentViewVersion::ImportCommand
268
- .any_instance
269
- .expects(:validate_pulp3_not_enabled)
270
- .returns(true)
271
- params = [
272
- '--export-tar=/tmp/exports/export-2.tar',
273
- '--organization-id=1'
274
- ]
275
-
276
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
277
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
278
-
279
- File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
280
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
281
- Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
282
- File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
283
- JSON.dump(
284
- 'name' => 'Foo View',
285
- 'major' => '2',
286
- 'minor' => '1'
287
- )
288
- )
289
-
290
- ex = api_expects(:content_views, :index)
291
- ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
292
- ex.returns(
293
- 'results' => [{
294
- 'id' => '5',
295
- 'content_view' => {'name' => 'cv'},
296
- 'versions' => [{'version' => '2.1', 'id' => '654'}]
297
- }]
298
- )
299
-
300
- result = run_cmd(@cmd + params)
301
- assert_equal(result.exit_code, 70)
302
- end
303
-
304
- it "fails import if any repository does not exist" do
305
- HammerCLIKatello::ContentViewVersion::ImportCommand
306
- .any_instance
307
- .expects(:validate_pulp3_not_enabled)
308
- .returns(true)
309
- params = [
310
- '--export-tar=/tmp/exports/export-2.tar',
311
- '--organization-id=1'
312
- ]
313
-
314
- File.expects(:exist?).with('/usr/share/foreman').returns(true)
315
- File.stubs(:exist?).with('/var/log/hammer/hammer.log._copy_').returns(false)
316
-
317
- File.expects(:exist?).with("/tmp/exports/export-2.tar").returns(true)
318
- Dir.expects(:chdir).with('/tmp/exports').returns(0)
319
- Dir.expects(:chdir).with('/tmp/exports/export-2').returns(0)
320
- File.expects(:read).with("/tmp/exports/export-2/export-2.json").returns(
321
- JSON.dump(
322
- 'name' => 'Foo View',
323
- 'repositories' => ['label' => 'foo'],
324
- 'major' => '2',
325
- 'minor' => '1'
326
- )
327
- )
328
-
329
- ex = api_expects(:content_views, :index)
330
- ex = ex.with_params('name' => 'Foo View', 'organization_id' => '1')
331
- ex.returns(
332
- 'results' => [{
333
- 'id' => '5',
334
- 'repositories' => [{'id' => '2', 'label' => 'foo'}],
335
- 'content_view' => {'name' => 'cv'}
336
- }]
337
- )
338
-
339
- ex = api_expects(:repositories, :index)
340
- ex = ex.with_params('organization_id' => '1', 'library' => true)
341
- ex.returns([])
342
-
343
- result = run_cmd(@cmd + params)
344
- assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
345
- end
346
- end