hammer_cli_katello 0.0.24 → 0.0.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello.rb +1 -0
  3. data/lib/hammer_cli_katello/activation_key.rb +8 -6
  4. data/lib/hammer_cli_katello/capsule.rb +2 -21
  5. data/lib/hammer_cli_katello/commands.rb +2 -2
  6. data/lib/hammer_cli_katello/content_host.rb +3 -49
  7. data/lib/hammer_cli_katello/content_view.rb +19 -4
  8. data/lib/hammer_cli_katello/content_view_puppet_module.rb +8 -0
  9. data/lib/hammer_cli_katello/content_view_version.rb +69 -20
  10. data/lib/hammer_cli_katello/host.rb +4 -0
  11. data/lib/hammer_cli_katello/host_collection.rb +3 -22
  12. data/lib/hammer_cli_katello/host_errata.rb +1 -1
  13. data/lib/hammer_cli_katello/host_subscription.rb +31 -0
  14. data/lib/hammer_cli_katello/id_resolver.rb +45 -65
  15. data/lib/hammer_cli_katello/katello_environment_name_resolvable.rb +33 -0
  16. data/lib/hammer_cli_katello/lifecycle_environment_name_resolvable.rb +1 -13
  17. data/lib/hammer_cli_katello/ping.rb +4 -0
  18. data/lib/hammer_cli_katello/repository.rb +10 -8
  19. data/lib/hammer_cli_katello/search_options_creators.rb +70 -0
  20. data/lib/hammer_cli_katello/version.rb +1 -1
  21. data/test/data/3.0/foreman_api.json +1 -0
  22. data/test/functional/activaton_key/list_test.rb +69 -0
  23. data/test/functional/content_view/content_view_helpers.rb +10 -0
  24. data/test/functional/content_view/create_test.rb +119 -0
  25. data/test/functional/content_view/list_test.rb +67 -0
  26. data/test/functional/content_view/version/incremental_update_test.rb +91 -0
  27. data/test/functional/host/errata/apply_test.rb +46 -0
  28. data/test/functional/host/host_helpers.rb +10 -0
  29. data/test/functional/host/subscription/register_test.rb +53 -0
  30. data/test/functional/host/subscription/unregister_test.rb +37 -0
  31. data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +17 -0
  32. data/test/functional/organization/organization_helpers.rb +10 -0
  33. data/test/functional/ping_test.rb +19 -0
  34. data/test/functional/product/product_helpers.rb +8 -0
  35. data/test/functional/repository/info_test.rb +46 -0
  36. data/test/functional/repository/list_test.rb +69 -0
  37. data/test/functional/repository/repository_helpers.rb +9 -0
  38. data/test/functional/repository/synchronize_test.rb +57 -0
  39. data/test/functional/repository/upload_test.rb +86 -0
  40. data/test/task_helper.rb +7 -0
  41. data/test/test_helper.rb +16 -3
  42. data/test/unit/id_resolver_test.rb +32 -0
  43. data/test/unit/search_options_creators_test.rb +107 -0
  44. metadata +53 -3
@@ -0,0 +1,10 @@
1
+ module ContentViewHelpers
2
+
3
+ def expect_content_view_search(org_id, name, id)
4
+ ex = api_expects(:content_views, :index, 'Find the content view') do |par|
5
+ par['name'] == name && par['organization_id'] == org_id
6
+ end
7
+ ex.returns(index_response([{'id' => id}]))
8
+ end
9
+
10
+ end
@@ -0,0 +1,119 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ # Workaround for issue #14289
4
+ require 'hammer_cli_katello/content_view_puppet_module'
5
+
6
+ describe 'content-view create' do
7
+ before do
8
+ @cmd = %w(content-view create)
9
+ @base_params = ["--organization-id=#{org_id}", "--name=#{name}"]
10
+ end
11
+ let(:error_heading) { "Could not create the content view" }
12
+ let(:name) { 'test-cv' }
13
+ let(:org_id) { 1 }
14
+ let(:product) do
15
+ { 'name' => 'product-1', 'id' => 1 }
16
+ end
17
+ let(:repositories) do
18
+ [
19
+ {'name' => 'repo-1', 'id' => '1'},
20
+ {'name' => 'repo-2', 'id' => '2'},
21
+ {'name' => 'repo-3', 'id' => '3'}
22
+ ]
23
+ end
24
+
25
+ it 'creates the content view with repositories specified by ids' do
26
+ wanted = repositories.take(2)
27
+ ids = wanted.map { |repo| repo['id'] }
28
+ params = %W(--repository-ids=#{ids.join(',')})
29
+
30
+ api_expects(:content_views, :create, 'Create content view') do |par|
31
+ par['name'] == name &&
32
+ par['repository_ids'] == ids &&
33
+ par['organization_id'] == org_id
34
+ end
35
+
36
+ expected_result = success_result("Content view created\n")
37
+ result = run_cmd(@cmd + @base_params + params)
38
+ assert_cmd(expected_result, result)
39
+ end
40
+
41
+ it 'create the content view with repositories specified by product id and names' do
42
+ wanted = repositories.take(2)
43
+ ids = wanted.map { |repo| repo['id'] }
44
+ names = wanted.map { |repo| repo['name'] }
45
+ params = %W(--product-id=#{product['id']} --repositories=#{names.join(',')})
46
+
47
+ api_repositories = api_expects(:repositories, :index,
48
+ 'Find repositories belonging to product') do |par|
49
+ par['product_id'] == product['id'] && par['organization_id'] == org_id
50
+ end
51
+ api_repositories.returns(repositories)
52
+
53
+ api_expects(:content_views, :create, 'Create content view') do |par|
54
+ par['organization_id'] == org_id &&
55
+ par['name'] == name &&
56
+ par['repository_ids'] == ids
57
+ end
58
+
59
+ expected_result = success_result("Content view created\n")
60
+ result = run_cmd(@cmd + @base_params + params)
61
+ assert_cmd(expected_result, result)
62
+ end
63
+
64
+ it 'create the content view with repositories specified by product name and names' do
65
+ wanted = repositories.take(2)
66
+ ids = wanted.map { |repo| repo['id'] }
67
+ names = wanted.map { |repo| repo['name'] }
68
+ params = %W(--product=#{product['name']} --repositories=#{names.join(',')})
69
+
70
+ api_products = api_expects(:products, :index, 'Find ID of product') do |par|
71
+ par['organization_id'] == org_id && par['name'] == product['name']
72
+ end
73
+ api_products.returns(product)
74
+
75
+ api_repositories = api_expects(:repositories, :index,
76
+ 'Find repositories belonging to product') do |par|
77
+ par['product_id'] == product['id'] && par['organization_id'] == org_id
78
+ end
79
+ api_repositories.returns(repositories)
80
+
81
+ api_expects(:content_views, :create, 'Create content view') do |par|
82
+ par['organization_id'] == org_id &&
83
+ par['name'] == name &&
84
+ par['repository_ids'] == ids
85
+ end
86
+
87
+ expected_result = success_result("Content view created\n")
88
+ result = run_cmd(@cmd + @base_params + params)
89
+ assert_cmd(expected_result, result)
90
+ end
91
+
92
+ it 'fails on providing repository names without product' do
93
+ params = %w(--repositories=repo-1,repo-2)
94
+
95
+ expected_result = usage_error_result(
96
+ @cmd,
97
+ 'At least one of options --product-id, --product is required',
98
+ error_heading
99
+ )
100
+
101
+ api_expects_no_call
102
+ result = run_cmd(@cmd + @base_params + params)
103
+ assert_cmd(expected_result, result)
104
+ end
105
+
106
+ it 'fails on providing product and repository ids' do
107
+ params = %w(--product=testproduct --repository-ids=1,2,3,4,5)
108
+
109
+ expected_result = usage_error_result(
110
+ @cmd,
111
+ "You can't set any of options --product-id, --product",
112
+ error_heading
113
+ )
114
+
115
+ api_expects_no_call
116
+ result = run_cmd(@cmd + params)
117
+ assert_cmd(expected_result, result)
118
+ end
119
+ end
@@ -0,0 +1,67 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../lifecycle_environment/lifecycle_environment_helpers')
3
+
4
+ require 'hammer_cli_katello/content_view_puppet_module'
5
+
6
+ describe 'listing content-views' do
7
+ include LifecycleEnvironmentHelpers
8
+
9
+ before do
10
+ @cmd = %w(content-view list)
11
+ end
12
+
13
+ let(:org_id) { 1 }
14
+ let(:lifecycle_env_id) { 1 }
15
+ let(:empty_response) do {
16
+ "total" => 0,
17
+ "subtotal" => 0,
18
+ "page" => "1",
19
+ "per_page" => "1000",
20
+ "error" => nil,
21
+ "search" => nil,
22
+ "sort" => {
23
+ "by" => nil,
24
+ "order" => nil
25
+ },
26
+ "results" => []
27
+ }
28
+ end
29
+
30
+ it "lists an organizations content-views" do
31
+ params = ["--organization-id=#{org_id}"]
32
+
33
+ ex = api_expects(:content_views, :index, 'Organizations content-views list') do |par|
34
+ par['organization_id'] == org_id && par['page'] == 1 &&
35
+ par['per_page'] == 1000
36
+ end
37
+
38
+ ex.returns(empty_response)
39
+ expected_result = success_result("----------------|------|-------|-----------|---------------
40
+ CONTENT VIEW ID | NAME | LABEL | COMPOSITE | REPOSITORY IDS
41
+ ----------------|------|-------|-----------|---------------
42
+ ")
43
+
44
+ result = run_cmd(@cmd + params)
45
+ assert_cmd(expected_result, result)
46
+ end
47
+
48
+ it "lists the content-views belonging to a lifecycle-environment by name" do
49
+ params = ["--organization-id=#{org_id}", '--lifecycle-environment=test']
50
+
51
+ expect_lifecycle_environment_search(org_id, 'test', lifecycle_env_id).at_least_once
52
+
53
+ ex = api_expects(:content_views, :index, 'lifecycles content-views list') do |par|
54
+ par['organization_id'] == org_id && par['page'] == 1 &&
55
+ par['per_page'] == 1000
56
+ end
57
+
58
+ ex.returns(empty_response)
59
+ expected_result = success_result("----------------|------|-------|-----------|---------------
60
+ CONTENT VIEW ID | NAME | LABEL | COMPOSITE | REPOSITORY IDS
61
+ ----------------|------|-------|-----------|---------------
62
+ ")
63
+
64
+ result = run_cmd(@cmd + params)
65
+ assert_cmd(expected_result, result)
66
+ end
67
+ end
@@ -0,0 +1,91 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
3
+ require File.join(File.dirname(__FILE__),
4
+ '../../lifecycle_environment/lifecycle_environment_helpers')
5
+
6
+ describe 'content-view version incremental-update' do
7
+ include OrganizationHelpers
8
+ include LifecycleEnvironmentHelpers
9
+ include ForemanTaskHelpers
10
+
11
+ before do
12
+ @cmd = %w(content-view version incremental-update)
13
+ end
14
+
15
+ it "performs incremental update with no updates" do
16
+ params = ['--errata-ids=FOO2012', '--lifecycle-environment-ids=1,2,3',
17
+ '--content-view-version-id=5']
18
+
19
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
20
+ par['update_hosts'].nil? &&
21
+ par[:content_view_version_environments][0][:environment_ids] == %w(1 2 3) &&
22
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
23
+ par['add_content']['errata_ids'] == ['FOO2012']
24
+ end
25
+ ex.returns('id' => '3', 'state' => 'stopped')
26
+
27
+ expect_foreman_task('3')
28
+
29
+ result = run_cmd(@cmd + params)
30
+ assert(result.exit_code, 0)
31
+ end
32
+
33
+ it "performs incremental update with update all hosts" do
34
+ params = ['--update-all-hosts=true', '--errata-ids=FOO2012',
35
+ '--lifecycle-environment-ids=1,2,3', '--content-view-version-id=5']
36
+
37
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
38
+ par['update_hosts']['included'][:search] == '' &&
39
+ par[:content_view_version_environments][0][:environment_ids] == %w(1 2 3) &&
40
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
41
+ par['add_content']['errata_ids'] == ['FOO2012']
42
+ end
43
+ ex.returns('id' => '3', 'state' => 'stopped')
44
+
45
+ expect_foreman_task('3')
46
+
47
+ result = run_cmd(@cmd + params)
48
+ assert(result.exit_code, 0)
49
+ end
50
+
51
+ it "performs incremental update with no environment" do
52
+ params = ['--update-all-hosts=true', '--errata-ids=FOO2012', '--content-view-version-id=5']
53
+
54
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
55
+ par['update_hosts']['included'][:search] == '' &&
56
+ par[:content_view_version_environments][0][:environment_ids].nil? &&
57
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
58
+ par['add_content']['errata_ids'] == ['FOO2012']
59
+ end
60
+ ex.returns('id' => '3', 'state' => 'stopped')
61
+
62
+ expect_foreman_task('3')
63
+
64
+ result = run_cmd(@cmd + params)
65
+ assert(result.exit_code, 0)
66
+ end
67
+
68
+ it "performs incremental update with names" do
69
+ params = ['--update-all-hosts=true', '--errata-ids=FOO2012',
70
+ '--lifecycle-environments=trump,cruz,bernie',
71
+ '--content-view-version-id=5', '--organization=USA']
72
+
73
+ expect_organization_search('USA', 5)
74
+ expect_lifecycle_environments_request(5, [{'name' => 'trump', 'id' => 1},
75
+ {'name' => 'cruz', 'id' => 2},
76
+ {'name' => 'bernie', 'id' => 3}])
77
+
78
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
79
+ par['update_hosts']['included'][:search] == '' &&
80
+ par[:content_view_version_environments][0][:environment_ids] == [1, 2, 3] &&
81
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
82
+ par['add_content']['errata_ids'] == ['FOO2012']
83
+ end
84
+ ex.returns('id' => '3', 'state' => 'stopped')
85
+
86
+ expect_foreman_task('3')
87
+
88
+ result = run_cmd(@cmd + params)
89
+ assert(result.exit_code, 0)
90
+ end
91
+ end
@@ -0,0 +1,46 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+
3
+ require 'hammer_cli_katello/content_view_puppet_module'
4
+
5
+ describe 'apply an errata' do
6
+ include ForemanTaskHelpers
7
+
8
+ before do
9
+ @cmd = %w(host errata apply)
10
+ end
11
+
12
+ let(:errata_id) { "RHEA-1111:1111" }
13
+ let(:host_id) { 1 }
14
+ let(:task_id) { 5 }
15
+ let(:response) do {
16
+ 'id' => task_id,
17
+ 'state' => 'stopped'
18
+ }
19
+ end
20
+
21
+ it "applies an errata to a host" do
22
+ params = ["--errata-ids=#{errata_id}", "--host-id=#{host_id}"]
23
+
24
+ ex = api_expects(:host_errata, :apply, 'Host errata apply') do |par|
25
+ par['errata_ids'] == [errata_id] && par['host_id'] == host_id
26
+ end
27
+
28
+ ex.returns(response)
29
+
30
+ expect_foreman_task(task_id)
31
+
32
+ run_cmd(@cmd + params)
33
+ end
34
+
35
+ it "applies an errata to a host with async flag" do
36
+ params = ["--errata-ids=#{errata_id}", "--host-id=#{host_id}", "--async"]
37
+
38
+ ex = api_expects(:host_errata, :apply, 'Host errata apply') do |par|
39
+ par['errata_ids'] == [errata_id] && par['host_id'] == host_id
40
+ end
41
+
42
+ ex.returns(response)
43
+
44
+ run_cmd(@cmd + params)
45
+ end
46
+ end
@@ -0,0 +1,10 @@
1
+ module HostHelpers
2
+
3
+ def expect_host_search(name, id)
4
+ ex = api_expects(:hosts, :index, 'Find the host') do |par|
5
+ par[:search] == "name = \"#{name}\""
6
+ end
7
+ ex.returns(index_response([{'id' => id}]))
8
+ end
9
+
10
+ end
@@ -0,0 +1,53 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../../content_view/content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+ require File.join(File.dirname(__FILE__),
5
+ '../../lifecycle_environment/lifecycle_environment_helpers')
6
+
7
+ describe 'host subscription register' do
8
+ include OrganizationHelpers
9
+ include ContentViewHelpers
10
+ include LifecycleEnvironmentHelpers
11
+
12
+ before do
13
+ @cmd = %w(host subscription register)
14
+ end
15
+
16
+ it "subscribe a host" do
17
+ params = ['--name=trump.wall.com', '--content-view-id=1', '--lifecycle-environment-id=2']
18
+ ex = api_expects(:host_subscriptions, :create, 'Host subscription register') do |par|
19
+ par['name'] == 'trump.wall.com' && par['content_view_id'] == 1 &&
20
+ par['lifecycle_environment_id'] == 2
21
+ end
22
+ ex.returns({})
23
+
24
+ expected_result = success_result(
25
+ 'Host successfully registered
26
+ '
27
+ )
28
+
29
+ result = run_cmd(@cmd + params)
30
+ assert_cmd(expected_result, result)
31
+ end
32
+
33
+ it "resolves ids from names" do
34
+ params = ['--name=trump.wall.com', '--content-view=someview', '--lifecycle-environment=someenv',
35
+ '--organization=trumporg']
36
+
37
+ api_expects(:host_subscriptions, :create, 'Host subscription register') do |par|
38
+ par['name'] == 'trump.wall.com' && par['content_view_id'] == 1 &&
39
+ par['lifecycle_environment_id'] == 2
40
+ end
41
+
42
+ expect_organization_search('trumporg', 3)
43
+ expect_content_view_search(3, 'someview', 1)
44
+ expect_lifecycle_environment_search(3, 'someenv', 2)
45
+
46
+ expected_result = success_result(
47
+ 'Host successfully registered
48
+ '
49
+ )
50
+ result = run_cmd(@cmd + params)
51
+ assert_cmd(expected_result, result)
52
+ end
53
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../host_helpers')
3
+
4
+ describe 'host subscription unregister' do
5
+ include HostHelpers
6
+
7
+ before do
8
+ @cmd = %w(host subscription unregister)
9
+ end
10
+
11
+ it "unregisters the host" do
12
+ params = ['--host-id=3']
13
+ ex = api_expects(:host_subscriptions, :destroy, 'Host unregister') do |par|
14
+ par['host_id'] == 3
15
+ end
16
+ ex.returns({})
17
+
18
+ expected_result = success_result(
19
+ 'Host unregistered
20
+ '
21
+ )
22
+
23
+ result = run_cmd(@cmd + params)
24
+ assert_cmd(expected_result, result)
25
+ end
26
+
27
+ it "resolves id from name" do
28
+ params = ['--host=host1']
29
+
30
+ api_expects(:host_subscriptions, :destroy, 'Host unregister') do |par|
31
+ par['host_id'].to_i == 3
32
+ end
33
+ expect_host_search('host1', '3')
34
+
35
+ run_cmd(@cmd + params)
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ module LifecycleEnvironmentHelpers
2
+
3
+ def expect_lifecycle_environment_search(org_id, name, id)
4
+ ex = api_expects(:lifecycle_environments, :index, 'Find the lifecycle environment') do |par|
5
+ par['name'] == name && par['organization_id'] == org_id
6
+ end
7
+ ex.returns(index_response([{'id' => id}]))
8
+ end
9
+
10
+ def expect_lifecycle_environments_request(org_id, results)
11
+ ex = api_expects(:lifecycle_environments, :index, 'List the lifecycle environments') do |par|
12
+ par['organization_id'] == org_id
13
+ end
14
+ ex.returns(index_response(results))
15
+ end
16
+
17
+ end