hammer_cli_katello 1.1.3 → 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 (198) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello/foreman_search_options_creators.rb +0 -12
  3. data/lib/hammer_cli_katello/host_collection.rb +6 -0
  4. data/lib/hammer_cli_katello/host_errata.rb +1 -1
  5. data/lib/hammer_cli_katello/repository.rb +0 -27
  6. data/lib/hammer_cli_katello/version.rb +1 -1
  7. data/test/data/2.5/foreman_api.json +1 -0
  8. data/test/data/3.0/foreman_api.json +1 -0
  9. data/test/data/3.10/foreman_api.json +1 -0
  10. data/test/data/3.11/foreman_api.json +1 -0
  11. data/test/data/3.12/foreman_api.json +1 -0
  12. data/test/data/3.13/foreman_api.json +1 -0
  13. data/test/data/3.14/foreman_api.json +1 -0
  14. data/test/data/3.15/foreman_api.json +1 -0
  15. data/test/data/3.16/foreman_api.json +1 -0
  16. data/test/data/3.17/foreman_api.json +1 -0
  17. data/test/data/3.18/foreman_api.json +1 -0
  18. data/test/data/3.19/foreman_api.json +1 -0
  19. data/test/data/3.2/foreman_api.json +1 -0
  20. data/test/data/3.4/foreman_api.json +1 -0
  21. data/test/data/3.5/foreman_api.json +1 -0
  22. data/test/data/3.6/foreman_api.json +1 -0
  23. data/test/data/3.7/foreman_api.json +1 -0
  24. data/test/data/3.8/foreman_api.json +1 -0
  25. data/test/data/3.9/foreman_api.json +1 -0
  26. data/test/data/4.0/foreman_api.json +1 -0
  27. data/test/data/4.1/foreman_api.json +1 -0
  28. data/test/data/Readme.md +5 -0
  29. data/test/functional/activation_key/add_host_collection_test.rb +62 -0
  30. data/test/functional/activation_key/content_override_test.rb +92 -0
  31. data/test/functional/activation_key/create_test.rb +33 -0
  32. data/test/functional/activation_key/data/activation_key.json +17 -0
  33. data/test/functional/activation_key/info_test.rb +29 -0
  34. data/test/functional/activation_key/list_test.rb +68 -0
  35. data/test/functional/activation_key/product_content_test.rb +23 -0
  36. data/test/functional/activation_key/remove_host_collection_test.rb +62 -0
  37. data/test/functional/activation_key/subscriptions_test.rb +74 -0
  38. data/test/functional/activation_key/update_test.rb +26 -0
  39. data/test/functional/apipie_helper_test.rb +31 -0
  40. data/test/functional/capsule/capsule_helpers.rb +13 -0
  41. data/test/functional/capsule/content/add_lifecycle_environment_test.rb +40 -0
  42. data/test/functional/capsule/content/cancel_synchronization_test.rb +42 -0
  43. data/test/functional/capsule/content/capsule_content_helpers.rb +24 -0
  44. data/test/functional/capsule/content/data/library_env.json +47 -0
  45. data/test/functional/capsule/content/data/sync_status.json +6 -0
  46. data/test/functional/capsule/content/data/sync_tasks.json +62 -0
  47. data/test/functional/capsule/content/info_test.rb +61 -0
  48. data/test/functional/capsule/content/lifecycle_environments_test.rb +19 -0
  49. data/test/functional/capsule/content/remove_lifecycle_environment_test.rb +40 -0
  50. data/test/functional/capsule/content/synchronization_status_test.rb +107 -0
  51. data/test/functional/capsule/info_test.rb +25 -0
  52. data/test/functional/capsule/list_test.rb +24 -0
  53. data/test/functional/content_credentials/create_test.rb +32 -0
  54. data/test/functional/content_credentials/data/test_cert.json +43 -0
  55. data/test/functional/content_credentials/info_test.rb +50 -0
  56. data/test/functional/content_credentials/list_test.rb +66 -0
  57. data/test/functional/content_export/complete/library_test.rb +155 -0
  58. data/test/functional/content_export/complete/version_test.rb +252 -0
  59. data/test/functional/content_export/content_export_helpers.rb +26 -0
  60. data/test/functional/content_export/generate_metadata_test.rb +64 -0
  61. data/test/functional/content_export/incremental/library_test.rb +172 -0
  62. data/test/functional/content_export/incremental/version_test.rb +268 -0
  63. data/test/functional/content_export/list_test.rb +64 -0
  64. data/test/functional/content_import/library_test.rb +85 -0
  65. data/test/functional/content_import/list_test.rb +65 -0
  66. data/test/functional/content_import/metadata.json +1 -0
  67. data/test/functional/content_import/version_test.rb +85 -0
  68. data/test/functional/content_view/add_content_view_version_test.rb +88 -0
  69. data/test/functional/content_view/add_repository_test.rb +21 -0
  70. data/test/functional/content_view/component/add_test.rb +177 -0
  71. data/test/functional/content_view/component/list_test.rb +55 -0
  72. data/test/functional/content_view/component/remove_test.rb +107 -0
  73. data/test/functional/content_view/component/update_test.rb +134 -0
  74. data/test/functional/content_view/content_view_helpers.rb +20 -0
  75. data/test/functional/content_view/copy_test.rb +53 -0
  76. data/test/functional/content_view/create_test.rb +34 -0
  77. data/test/functional/content_view/delete_test.rb +62 -0
  78. data/test/functional/content_view/filter/create_test.rb +57 -0
  79. data/test/functional/content_view/filter/delete_test.rb +90 -0
  80. data/test/functional/content_view/filter/info_test.rb +89 -0
  81. data/test/functional/content_view/filter/list_test.rb +98 -0
  82. data/test/functional/content_view/filter/update_test.rb +91 -0
  83. data/test/functional/content_view/list_test.rb +68 -0
  84. data/test/functional/content_view/publish_test.rb +24 -0
  85. data/test/functional/content_view/purge_test.rb +97 -0
  86. data/test/functional/content_view/remove_content_view_version_test.rb +88 -0
  87. data/test/functional/content_view/remove_test.rb +79 -0
  88. data/test/functional/content_view/update_test.rb +53 -0
  89. data/test/functional/content_view/version/incremental_update_test.rb +108 -0
  90. data/test/functional/content_view/version/list_test.rb +44 -0
  91. data/test/functional/content_view/version/promote_test.rb +34 -0
  92. data/test/functional/content_view/version/republish_repositories_test.rb +34 -0
  93. data/test/functional/content_view/version/update_test.rb +48 -0
  94. data/test/functional/erratum/erratum_helpers.rb +91 -0
  95. data/test/functional/erratum/info_test.rb +29 -0
  96. data/test/functional/erratum/list_test.rb +108 -0
  97. data/test/functional/file/file_helpers.rb +13 -0
  98. data/test/functional/file/info_test.rb +162 -0
  99. data/test/functional/file/list_test.rb +112 -0
  100. data/test/functional/filter_rule/create_test.rb +99 -0
  101. data/test/functional/filter_rule/delete_test.rb +104 -0
  102. data/test/functional/filter_rule/filter_rule_helpers.rb +12 -0
  103. data/test/functional/filter_rule/info_test.rb +104 -0
  104. data/test/functional/filter_rule/list_test.rb +91 -0
  105. data/test/functional/filter_rule/update_test.rb +104 -0
  106. data/test/functional/host/errata/apply_test.rb +45 -0
  107. data/test/functional/host/errata/info_test.rb +27 -0
  108. data/test/functional/host/errata/list_test.rb +49 -0
  109. data/test/functional/host/errata/recalculate_test.rb +40 -0
  110. data/test/functional/host/extensions/create_test.rb +95 -0
  111. data/test/functional/host/extensions/data/host.json +320 -0
  112. data/test/functional/host/extensions/data/host_list.json +117 -0
  113. data/test/functional/host/extensions/info_test.rb +35 -0
  114. data/test/functional/host/extensions/list_test.rb +21 -0
  115. data/test/functional/host/extensions/update_test.rb +70 -0
  116. data/test/functional/host/host_helpers.rb +8 -0
  117. data/test/functional/host/subscription/attach_test.rb +54 -0
  118. data/test/functional/host/subscription/auto_attach_test.rb +35 -0
  119. data/test/functional/host/subscription/content_override_test.rb +96 -0
  120. data/test/functional/host/subscription/product_content_test.rb +27 -0
  121. data/test/functional/host/subscription/register_test.rb +53 -0
  122. data/test/functional/host/subscription/remove_test.rb +52 -0
  123. data/test/functional/host/subscription/unregister_test.rb +37 -0
  124. data/test/functional/host/traces/list_test.rb +37 -0
  125. data/test/functional/host/traces/resolve_test.rb +31 -0
  126. data/test/functional/host_collection/add_host_test.rb +90 -0
  127. data/test/functional/host_collection/content_api_expectations.rb +35 -0
  128. data/test/functional/host_collection/content_install_test.rb +62 -0
  129. data/test/functional/host_collection/content_remove_test.rb +37 -0
  130. data/test/functional/host_collection/content_update_test.rb +37 -0
  131. data/test/functional/host_collection/copy_test.rb +64 -0
  132. data/test/functional/host_collection/create_test.rb +54 -0
  133. data/test/functional/host_collection/delete_test.rb +57 -0
  134. data/test/functional/host_collection/hosts_test.rb +39 -0
  135. data/test/functional/host_collection/info_test.rb +57 -0
  136. data/test/functional/host_collection/list_test.rb +63 -0
  137. data/test/functional/host_collection/remove_host_test.rb +90 -0
  138. data/test/functional/host_collection/update_test.rb +57 -0
  139. data/test/functional/hostgroup/create_test.rb +112 -0
  140. data/test/functional/hostgroup/data/hostgroup.json +50 -0
  141. data/test/functional/hostgroup/info_test.rb +33 -0
  142. data/test/functional/hostgroup/update_test.rb +120 -0
  143. data/test/functional/lifecycle_environment/create_test.rb +14 -0
  144. data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +18 -0
  145. data/test/functional/lifecycle_environment/list_test.rb +38 -0
  146. data/test/functional/lifecycle_environment/update_test.rb +14 -0
  147. data/test/functional/local_helper_test.rb +30 -0
  148. data/test/functional/module_stream/info_test.rb +58 -0
  149. data/test/functional/module_stream/list_test.rb +53 -0
  150. data/test/functional/organization/delete_test.rb +26 -0
  151. data/test/functional/organization/info_test.rb +22 -0
  152. data/test/functional/organization/organization_helpers.rb +10 -0
  153. data/test/functional/package/list_test.rb +158 -0
  154. data/test/functional/package_group/list_test.rb +38 -0
  155. data/test/functional/ping_test.rb +59 -0
  156. data/test/functional/product/create_test.rb +54 -0
  157. data/test/functional/product/delete_test.rb +41 -0
  158. data/test/functional/product/info_test.rb +33 -0
  159. data/test/functional/product/list_test.rb +58 -0
  160. data/test/functional/product/product_helpers.rb +24 -0
  161. data/test/functional/product/remove_sync_plan_test.rb +35 -0
  162. data/test/functional/product/set_sync_plan_test.rb +49 -0
  163. data/test/functional/product/update_proxy.rb +48 -0
  164. data/test/functional/product/update_test.rb +46 -0
  165. data/test/functional/repository/create_test.rb +21 -0
  166. data/test/functional/repository/delete_test.rb +95 -0
  167. data/test/functional/repository/info_test.rb +156 -0
  168. data/test/functional/repository/list_test.rb +68 -0
  169. data/test/functional/repository/remove_content_test.rb +108 -0
  170. data/test/functional/repository/repository_helpers.rb +18 -0
  171. data/test/functional/repository/synchronize_test.rb +57 -0
  172. data/test/functional/repository/update_test.rb +149 -0
  173. data/test/functional/repository/upload_test.rb +345 -0
  174. data/test/functional/repository_set/available_repositories_test.rb +18 -0
  175. data/test/functional/repository_set/disable_test.rb +42 -0
  176. data/test/functional/repository_set/enable_test.rb +42 -0
  177. data/test/functional/repository_set/info_test.rb +17 -0
  178. data/test/functional/repository_set/list_test.rb +18 -0
  179. data/test/functional/repository_set/repository_set_helpers.rb +20 -0
  180. data/test/functional/search_helpers.rb +17 -0
  181. data/test/functional/simple_content_access/disable_test.rb +48 -0
  182. data/test/functional/simple_content_access/enable_test.rb +46 -0
  183. data/test/functional/srpm/list_test.rb +92 -0
  184. data/test/functional/subscription/list_test.rb +86 -0
  185. data/test/functional/sync_plan/create_test.rb +60 -0
  186. data/test/functional/sync_plan/delete_test.rb +46 -0
  187. data/test/functional/sync_plan/info_test.rb +37 -0
  188. data/test/functional/sync_plan/list_test.rb +31 -0
  189. data/test/functional/sync_plan/sync_plan_helpers.rb +8 -0
  190. data/test/functional/sync_plan/update_test.rb +44 -0
  191. data/test/functional/test_helper.rb +24 -0
  192. data/test/task_helper.rb +7 -0
  193. data/test/test_helper.rb +38 -0
  194. data/test/unit/id_name_options_validator_test.rb +96 -0
  195. data/test/unit/id_resolver_test.rb +58 -0
  196. data/test/unit/messages_test.rb +7 -0
  197. data/test/unit/search_options_creators_test.rb +145 -0
  198. metadata +388 -6
@@ -0,0 +1,96 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../host_helpers')
3
+ require 'hammer_cli_katello/host_subscription'
4
+
5
+ describe 'host subscription content-override' do
6
+ include HostHelpers
7
+
8
+ before do
9
+ @cmd = %w(host subscription content-override)
10
+ end
11
+
12
+ it "attaches a content label" do
13
+ label = "foo"
14
+ value = 'default'
15
+ id = '20'
16
+ params = ["--host-id=#{id}", "--content-label=#{label}", "--value=#{value}"]
17
+ ex = api_expects(:host_subscriptions, :content_override, "content override") do |par|
18
+ par['host_id'].to_s == id && par["content_overrides"][0]['content_label'] == label &&
19
+ par['content_overrides'][0]['value'] == value &&
20
+ par['content_overrides'][0]['name'] == "enabled"
21
+ end
22
+ ex.returns({})
23
+
24
+ expected_result = success_result("Updated content override.\n")
25
+
26
+ result = run_cmd(@cmd + params)
27
+ assert_cmd(expected_result, result)
28
+ end
29
+
30
+ it "attaches a content label with name" do
31
+ label = "foo"
32
+ value = '1'
33
+ id = '20'
34
+ name = 'protected'
35
+ params = ["--host-id=#{id}", "--content-label=#{label}", "--value=#{value}",
36
+ "--override-name=#{name}"]
37
+ ex = api_expects(:host_subscriptions, :content_override, "content override") do |par|
38
+ par['host_id'].to_s == id && par["content_overrides"][0]['content_label'] == label &&
39
+ par['content_overrides'][0]['value'] == value &&
40
+ par['content_overrides'][0]['name'] == name
41
+ end
42
+ ex.returns({})
43
+
44
+ expected_result = success_result("Updated content override.\n")
45
+
46
+ result = run_cmd(@cmd + params)
47
+ assert_cmd(expected_result, result)
48
+ end
49
+
50
+ it "removes override" do
51
+ label = "foo"
52
+ id = '20'
53
+ params = ["--host-id=#{id}", "--content-label=#{label}", "--remove"]
54
+ ex = api_expects(:host_subscriptions, :content_override, "content override") do |par|
55
+ par['host_id'].to_s == id && par["content_overrides"][0]['content_label'] == label &&
56
+ par['content_overrides'][0]['remove'] == true &&
57
+ par['content_overrides'][0]['name'] == "enabled"
58
+ end
59
+ ex.returns({})
60
+
61
+ expected_result = success_result("Updated content override.\n")
62
+
63
+ result = run_cmd(@cmd + params)
64
+ assert_cmd(expected_result, result)
65
+ end
66
+
67
+ it "removes override with name" do
68
+ label = "foo"
69
+ id = '20'
70
+ name = 'protected'
71
+ params = ["--host-id=#{id}", "--content-label=#{label}", "--override-name=#{name}", "--remove"]
72
+ ex = api_expects(:host_subscriptions, :content_override, "content override") do |par|
73
+ par['host_id'].to_s == id && par["content_overrides"][0]['content_label'] == label &&
74
+ par['content_overrides'][0]['remove'] == true &&
75
+ par['content_overrides'][0]['name'] == name
76
+ end
77
+ ex.returns({})
78
+
79
+ expected_result = success_result("Updated content override.\n")
80
+
81
+ result = run_cmd(@cmd + params)
82
+ assert_cmd(expected_result, result)
83
+ end
84
+
85
+ it "validation fails on no override value or remove" do
86
+ api_expects_no_call
87
+ label = "foo"
88
+ id = '20'
89
+ name = 'protected'
90
+ params = ["--host-id=#{id}", "--content-label=#{label}", "--override-name=#{name}"]
91
+ result = run_cmd(@cmd + params)
92
+
93
+ assert(result.err[/At least one of options --remove, --value is required/],
94
+ "Remove or Value must be provided")
95
+ end
96
+ end
@@ -0,0 +1,27 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../host_helpers')
3
+ require 'hammer_cli_katello/host_subscription'
4
+
5
+ describe 'listing available product content' do
6
+ include HostHelpers
7
+
8
+ let(:host_id) { 1 }
9
+ let(:empty_response_table) do
10
+ <<eostring
11
+ ---|------|------|-----|---------|-------|------------------|---------
12
+ ID | NAME | TYPE | URL | GPG KEY | LABEL | DEFAULT ENABLED? | OVERRIDE
13
+ ---|------|------|-----|---------|-------|------------------|---------
14
+ eostring
15
+ end
16
+
17
+ it "lists content available for a host" do
18
+ ex = api_expects(:host_subscriptions, :product_content) do |p|
19
+ p['id'] = host_id
20
+ end
21
+ ex.returns(index_response([]))
22
+ assert_cmd(
23
+ success_result(empty_response_table),
24
+ run_cmd(%w(host subscription product-content --host-id 1))
25
+ )
26
+ end
27
+ 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,52 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../host_helpers')
3
+
4
+ describe 'host subscription remove' do
5
+ include HostHelpers
6
+
7
+ before do
8
+ @cmd = %w(host subscription remove)
9
+ end
10
+ it "remove a subscription to a host No Quantity" do
11
+ params = ['--host-id=3', '--subscription-id=100']
12
+ ex = api_expects(:host_subscriptions, :remove_subscriptions, "remove subs host") do |par|
13
+ par['host_id'] == 3 && par[:subscriptions][0][:id].to_s == '100'
14
+ end
15
+ ex.returns({})
16
+
17
+ expected_result = success_result(
18
+ 'Subscription removed from the host successfully.
19
+ '
20
+ )
21
+
22
+ result = run_cmd(@cmd + params)
23
+ assert_cmd(expected_result, result)
24
+ end
25
+
26
+ it "remove a subscription to a host with Quantity" do
27
+ params = ['--host-id=3', '--subscription-id=100', "--quantity=10"]
28
+ ex = api_expects(:host_subscriptions, :remove_subscriptions, "remove subs host") do |par|
29
+ par['host_id'] == 3 && par[:subscriptions][0][:id].to_s == '100' &&
30
+ par[:subscriptions][0][:quantity].to_s == '10'
31
+ end
32
+ ex.returns({})
33
+
34
+ expected_result = success_result(
35
+ 'Subscription removed from the host successfully.
36
+ '
37
+ )
38
+
39
+ result = run_cmd(@cmd + params)
40
+ assert_cmd(expected_result, result)
41
+ end
42
+
43
+ it "resolves id from name" do
44
+ params = ['--host=boo', '--subscription-id=100']
45
+ api_expects(:host_subscriptions, :remove_subscriptions, "remove subs host") do |par|
46
+ par['host_id'].to_s == "3" && par[:subscriptions][0][:id].to_s == '100'
47
+ end
48
+ expect_host_search('boo', '3')
49
+
50
+ run_cmd(@cmd + params)
51
+ end
52
+ 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,37 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+
3
+ describe 'host trace listing' do
4
+ before do
5
+ @cmd = %w(host traces list)
6
+ end
7
+
8
+ let(:host_id) { 2 }
9
+ let(:empty_response) do
10
+ {
11
+ "total" => 0,
12
+ "subtotal" => 0,
13
+ "page" => "1",
14
+ "per_page" => "1000",
15
+ "error" => nil,
16
+ "search" => nil,
17
+ "sort" => {
18
+ "by" => nil,
19
+ "order" => nil
20
+ },
21
+ "results" => []
22
+ }
23
+ end
24
+
25
+ it 'allows listing by host' do
26
+ params = ["--host-id=#{host_id}"]
27
+ ex = api_expects(:host_tracer, :index, 'host traces list')
28
+
29
+ ex.returns(empty_response)
30
+ expected_result = success_result("---------|-------------|--------|-----
31
+ TRACE ID | APPLICATION | HELPER | TYPE
32
+ ---------|-------------|--------|-----
33
+ ")
34
+ result = run_cmd(@cmd + params)
35
+ assert_cmd(expected_result, result)
36
+ end
37
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+
3
+ describe 'host trace resolve' do
4
+ include ForemanTaskHelpers
5
+
6
+ before do
7
+ @cmd = %w(host traces resolve)
8
+ end
9
+
10
+ let(:host_id) { '2' }
11
+ let(:task_id) { '5' }
12
+ let(:response) do
13
+ {
14
+ 'id' => task_id,
15
+ 'state' => 'stopped'
16
+ }
17
+ end
18
+
19
+ it "resolves traces on a host" do
20
+ trace_ids = [3]
21
+ params = ["--host-id=#{host_id}", "--trace-ids=#{trace_ids}"]
22
+
23
+ ex = api_expects(:host_tracer, :resolve)
24
+
25
+ ex.returns(response)
26
+
27
+ expect_foreman_task(task_id)
28
+
29
+ run_cmd(@cmd + params)
30
+ end
31
+ end
@@ -0,0 +1,90 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/host_collection'
3
+
4
+ module HammerCLIKatello
5
+ describe HostCollection::AddHostCommand do
6
+ describe 'handles individual host errors' do
7
+ it 'for successful results' do
8
+ api_expects(:host_collections, :add_hosts)
9
+ .with_params('id' => 1, 'host_ids' => %w(2 3))
10
+ .returns("displayMessages" => {"success" => ["Successfully added 2 Host(s)."],
11
+ "error" => []})
12
+ result = run_cmd(%w(host-collection add-host --id 1 --host-ids 2,3))
13
+ assert_match("The host(s) has been added", result.out)
14
+ end
15
+
16
+ it 'for mixed results' do
17
+ api_expects(:host_collections, :add_hosts)
18
+ .with_params('id' => 1, 'host_ids' => %w(2 3))
19
+ .returns("displayMessages" => {"success" => ["Successfully added 1 Host(s)."],
20
+ "error" => ["Host with ID 3 not found."]})
21
+ result = run_cmd(%w(host-collection add-host --id 1 --host-ids 2,3))
22
+ assert_match("Could not add host(s)", result.out)
23
+ assert_match("Host with ID 3 not found.", result.out)
24
+ end
25
+
26
+ it 'for errored results' do
27
+ api_expects(:host_collections, :add_hosts)
28
+ .with_params('id' => 1, 'host_ids' => %w(2 3))
29
+ .returns("displayMessages" => {"success" => [], "error" => [
30
+ "Host with ID 1 already exists in the host collection.",
31
+ "Host with ID 3 not found."]})
32
+ result = run_cmd(%w(host-collection add-host --id 1 --host-ids 2,3))
33
+ assert_match("Could not add host(s)", result.out)
34
+ assert_match("Host with ID 1 already exists in the host collection.", result.out)
35
+ assert_match("Host with ID 3 not found.", result.out)
36
+ end
37
+ end
38
+
39
+ it 'does not require organization options if id is specified' do
40
+ api_expects(:host_collections, :add_hosts)
41
+ run_cmd(%w(host-collection add-host --id 1))
42
+ end
43
+
44
+ it 'requires organization options if name is specified' do
45
+ result = run_cmd(%w(host-collection add-host --name hc1))
46
+ expected_error = "Missing options to search organization"
47
+ assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
48
+ assert_equal(expected_error, result.err[/#{expected_error}/])
49
+ end
50
+
51
+ it 'allows organization id' do
52
+ api_expects(:host_collections, :index) { |par| par['organization_id'].to_i == 1 }
53
+ .returns(index_response([{'id' => 2}]))
54
+
55
+ api_expects(:host_collections, :add_hosts) do |par|
56
+ par['id'].to_i == 2
57
+ end
58
+
59
+ run_cmd(%w(host-collection add-host --name hc1 --organization-id 1))
60
+ end
61
+
62
+ it 'allows organization name' do
63
+ api_expects(:organizations, :index) { |par| par[:search] == "name = \"org1\"" }
64
+ .returns(index_response([{'id' => 1}]))
65
+
66
+ api_expects(:host_collections, :index) { |par| par['organization_id'].to_i == 1 }
67
+ .returns(index_response([{'id' => 2}]))
68
+
69
+ api_expects(:host_collections, :add_hosts) do |par|
70
+ par['id'].to_i == 2
71
+ end
72
+
73
+ run_cmd(%w(host-collection add-host --name hc1 --organization org1))
74
+ end
75
+
76
+ it 'allows organization label' do
77
+ api_expects(:organizations, :index) { |par| par[:search] == "label = \"org1\"" }
78
+ .returns(index_response([{'id' => 1}]))
79
+
80
+ api_expects(:host_collections, :index) { |par| par['organization_id'].to_i == 1 }
81
+ .returns(index_response([{'id' => 2}]))
82
+
83
+ api_expects(:host_collections, :add_hosts) do |par|
84
+ par['id'].to_i == 2
85
+ end
86
+
87
+ run_cmd(%w(host-collection add-host --name hc1 --organization-label org1))
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,35 @@
1
+ module HammerCLIKatello
2
+ module ContentAPIExpectations
3
+ ORGANIZATION_ID = 1
4
+ HOST_COLLECTION_ID = 3
5
+ HOST_COLLECTION_NAME = 'Test'.freeze
6
+
7
+ def host_collection
8
+ {
9
+ 'id' => HOST_COLLECTION_ID,
10
+ 'name' => HOST_COLLECTION_NAME
11
+ }
12
+ end
13
+
14
+ def api_expects_content_action(action, content_type, expected_params)
15
+ expected_params[:organization_id] ||= ORGANIZATION_ID
16
+ expected_params[:host_collection_id] ||= HOST_COLLECTION_ID
17
+
18
+ api_expects(:hosts_bulk_actions, action) do |p|
19
+ search_query = "host_collection_id=\"#{expected_params[:host_collection_id]}\""
20
+ p['organization_id'] == expected_params[:organization_id] &&
21
+ p['included'] == { search: search_query } &&
22
+ p['content'] == expected_params[:content] &&
23
+ p['content_type'] == content_type
24
+ end
25
+ end
26
+
27
+ def api_expects_collection_search
28
+ expectation = api_expects(:host_collections, :index) do |p|
29
+ p["name"] == HOST_COLLECTION_NAME &&
30
+ p["organization_id"] == ORGANIZATION_ID
31
+ end
32
+ expectation.returns(index_response([host_collection]))
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,62 @@
1
+ require_relative '../test_helper'
2
+ require_relative './content_api_expectations'
3
+ require 'hammer_cli_katello/host_collection'
4
+
5
+ module HammerCLIKatello
6
+ describe HostCollection::InstallContentBaseCommand do
7
+ include HammerCLIKatello::ContentAPIExpectations
8
+
9
+ def api_expects_content_install(content_type, expected_params)
10
+ api_expects_content_action(:install_content, content_type, expected_params)
11
+ end
12
+
13
+ it 'installs packages to hosts in a host collection' do
14
+ api_expects_content_install('package', :content => ['wget'])
15
+ run_cmd(%w(host-collection package install --id 3 --packages wget --organization-id 1))
16
+ end
17
+
18
+ it 'installs packages to hosts in a host collection specified by name' do
19
+ api_expects_collection_search
20
+ api_expects_content_install('package', :content => ['wget'])
21
+ run_cmd(%w(host-collection package install --name Test --packages wget --organization-id 1))
22
+ end
23
+
24
+ it 'installs package groups to hosts in a host collection' do
25
+ api_expects_content_install('package_group', :content => ['birds'])
26
+ run_cmd(%w(host-collection package-group install --id 3
27
+ --package-groups birds --organization-id 1))
28
+ end
29
+
30
+ it 'installs package groups to hosts in a host collection specified by name' do
31
+ api_expects_collection_search
32
+ api_expects_content_install('package_group', :content => ['birds'])
33
+ run_cmd(%w(host-collection package-group install --name Test
34
+ --package-groups birds --organization-id 1))
35
+ end
36
+
37
+ it 'installs package groups to hosts in a host collection' do
38
+ api_expects_content_install('package_group', :content => ['birds'])
39
+ run_cmd(%w(host-collection package-group install --id 3
40
+ --package-groups birds --organization-id 1))
41
+ end
42
+
43
+ it 'installs package groups to hosts in a host collection specified by name' do
44
+ api_expects_collection_search
45
+ api_expects_content_install('package_group', :content => ['birds'])
46
+ run_cmd(%w(host-collection package-group install --name Test
47
+ --package-groups birds --organization-id 1))
48
+ end
49
+
50
+ it 'installs erratum to hosts in a host collection' do
51
+ api_expects_content_install('errata', :content => ['Bird_Erratum'])
52
+ run_cmd(%w(host-collection erratum install --id 3 --errata Bird_Erratum --organization-id 1))
53
+ end
54
+
55
+ it 'installs erratum to hosts in a host collection specified by name' do
56
+ api_expects_collection_search
57
+ api_expects_content_install('errata', :content => ['Bird_Erratum'])
58
+ run_cmd(%w(host-collection erratum install --name Test --errata Bird_Erratum
59
+ --organization-id 1))
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../test_helper'
2
+ require_relative './content_api_expectations'
3
+ require 'hammer_cli_katello/host_collection'
4
+
5
+ module HammerCLIKatello
6
+ describe HostCollection::RemoveContentBaseCommand do
7
+ include HammerCLIKatello::ContentAPIExpectations
8
+
9
+ def api_expects_content_remove(content_type, expected_params)
10
+ api_expects_content_action(:remove_content, content_type, expected_params)
11
+ end
12
+
13
+ it 'removes packages from hosts in a host collection' do
14
+ api_expects_content_remove('package', :content => ['wget'])
15
+ run_cmd(%w(host-collection package remove --id 3 --packages wget --organization-id 1))
16
+ end
17
+
18
+ it 'removes packages from hosts in a host collection specified by name' do
19
+ api_expects_collection_search
20
+ api_expects_content_remove('package', :content => ['wget'])
21
+ run_cmd(%w(host-collection package remove --name Test --packages wget --organization-id 1))
22
+ end
23
+
24
+ it 'removes package groups from hosts in a host collection' do
25
+ api_expects_content_remove('package_group', :content => ['birds'])
26
+ run_cmd(%w(host-collection package-group remove --id 3
27
+ --package-groups birds --organization-id 1))
28
+ end
29
+
30
+ it 'removes package groups from hosts in a host collection specified by name' do
31
+ api_expects_collection_search
32
+ api_expects_content_remove('package_group', :content => ['birds'])
33
+ run_cmd(%w(host-collection package-group remove --name Test
34
+ --package-groups birds --organization-id 1))
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../test_helper'
2
+ require_relative './content_api_expectations'
3
+ require 'hammer_cli_katello/host_collection'
4
+
5
+ module HammerCLIKatello
6
+ describe HostCollection::UpdateContentBaseCommand do
7
+ include HammerCLIKatello::ContentAPIExpectations
8
+
9
+ def api_expects_content_update(content_type, expected_params)
10
+ api_expects_content_action(:update_content, content_type, expected_params)
11
+ end
12
+
13
+ it 'updates packages on hosts in a host collection' do
14
+ api_expects_content_update('package', :content => ['wget'])
15
+ run_cmd(%w(host-collection package update --id 3 --packages wget --organization-id 1))
16
+ end
17
+
18
+ it 'updates packages on hosts in a host collection specified by name' do
19
+ api_expects_collection_search
20
+ api_expects_content_update('package', :content => ['wget'])
21
+ run_cmd(%w(host-collection package update --name Test --packages wget --organization-id 1))
22
+ end
23
+
24
+ it 'updates package groups on hosts in a host collection' do
25
+ api_expects_content_update('package_group', :content => ['birds'])
26
+ run_cmd(%w(host-collection package-group update --id 3
27
+ --package-groups birds --organization-id 1))
28
+ end
29
+
30
+ it 'updates package groups on hosts in a host collection specified by name' do
31
+ api_expects_collection_search
32
+ api_expects_content_update('package_group', :content => ['birds'])
33
+ run_cmd(%w(host-collection package-group update --name Test
34
+ --package-groups birds --organization-id 1))
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,64 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/host_collection'
3
+
4
+ module HammerCLIKatello
5
+ describe HostCollection::CopyCommand do
6
+ it 'requires a new name' do
7
+ result = run_cmd(%w(host-collection copy --id 1))
8
+ expected_error = "Option '--new-name' is required."
9
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
10
+ assert_equal(result.err[/#{expected_error}/], expected_error)
11
+ end
12
+
13
+ it 'does not require organization options if id is specified' do
14
+ api_expects(:host_collections, :copy)
15
+ run_cmd(%w(host-collection copy --id 1 --new-name foo))
16
+ end
17
+
18
+ it 'requires organization options if name is specified' do
19
+ result = run_cmd(%w(host-collection copy --name hc1 --new-name foo))
20
+ expected_error = "Missing options to search organization"
21
+ assert_equal(HammerCLI::EX_SOFTWARE, result.exit_code)
22
+ assert_equal(expected_error, result.err[/#{expected_error}/])
23
+ end
24
+
25
+ it 'allows organization id' do
26
+ api_expects(:host_collections, :index) { |par| par['organization_id'].to_i == 1 }
27
+ .returns(index_response([{'id' => 2}]))
28
+
29
+ api_expects(:host_collections, :copy) do |par|
30
+ par['id'].to_i == 2
31
+ end
32
+
33
+ run_cmd(%w(host-collection copy --name hc1 --organization-id 1 --new-name foo))
34
+ end
35
+
36
+ it 'allows organization name' do
37
+ api_expects(:organizations, :index) { |par| par[:search] == "name = \"org1\"" }
38
+ .returns(index_response([{'id' => 1}]))
39
+
40
+ api_expects(:host_collections, :index) { |par| par['organization_id'].to_i == 1 }
41
+ .returns(index_response([{'id' => 2}]))
42
+
43
+ api_expects(:host_collections, :copy) do |par|
44
+ par['id'].to_i == 2
45
+ end
46
+
47
+ run_cmd(%w(host-collection copy --name hc1 --organization org1 --new-name foo))
48
+ end
49
+
50
+ it 'allows organization label' do
51
+ api_expects(:organizations, :index) { |par| par[:search] == "label = \"org1\"" }
52
+ .returns(index_response([{'id' => 1}]))
53
+
54
+ api_expects(:host_collections, :index) { |par| par['organization_id'].to_i == 1 }
55
+ .returns(index_response([{'id' => 2}]))
56
+
57
+ api_expects(:host_collections, :copy) do |par|
58
+ par['id'].to_i == 2
59
+ end
60
+
61
+ run_cmd(%w(host-collection copy --name hc1 --organization-label org1 --new-name foo))
62
+ end
63
+ end
64
+ end