foreman_rh_cloud 1.0.9 → 1.0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -0
  3. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +3 -0
  4. data/app/controllers/foreman_inventory_upload/tasks_controller.rb +25 -0
  5. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +18 -0
  6. data/app/controllers/insights_cloud/hits_controller.rb +17 -0
  7. data/app/controllers/insights_cloud/settings_controller.rb +24 -0
  8. data/app/controllers/insights_cloud/tasks_controller.rb +1 -2
  9. data/app/helpers/foreman_inventory_upload_host_helper.rb +10 -2
  10. data/app/models/concerns/rh_cloud_host.rb +15 -0
  11. data/app/models/insights_facet.rb +5 -1
  12. data/app/models/insights_hit.rb +1 -1
  13. data/app/models/inventory_sync/inventory_status.rb +30 -0
  14. data/app/models/setting/rh_cloud.rb +3 -0
  15. data/app/overrides/hosts_list.rb +1 -1
  16. data/app/services/foreman_rh_cloud/cloud_auth.rb +28 -0
  17. data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -1
  18. data/app/views/hosts/_insights_tab.html.erb +15 -0
  19. data/config/routes.rb +6 -0
  20. data/db/migrate/20200727111529_add_uuid_column_to_insights_facets.foreman_rh_cloud.rb +5 -0
  21. data/db/migrate/20201007115752_add_hits_count_to_insights_facets_table.foreman_rh_cloud.rb +5 -0
  22. data/db/migrate/20201007121540_setup_hits_count_cache.foreman_rh_cloud.rb +10 -0
  23. data/lib/foreman_inventory_upload.rb +4 -0
  24. data/lib/foreman_inventory_upload/async/generate_report_job.rb +1 -1
  25. data/lib/foreman_inventory_upload/async/shell_process.rb +15 -9
  26. data/lib/foreman_inventory_upload/async/upload_report_job.rb +21 -9
  27. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +36 -1
  28. data/lib/foreman_inventory_upload/generators/json_stream.rb +7 -2
  29. data/lib/foreman_inventory_upload/generators/metadata.rb +3 -0
  30. data/lib/foreman_inventory_upload/generators/queries.rb +4 -4
  31. data/lib/foreman_inventory_upload/generators/slice.rb +51 -27
  32. data/lib/foreman_rh_cloud.rb +68 -0
  33. data/lib/foreman_rh_cloud/engine.rb +19 -3
  34. data/lib/foreman_rh_cloud/version.rb +1 -1
  35. data/lib/insights_cloud.rb +8 -8
  36. data/lib/insights_cloud/async/insights_full_sync.rb +19 -31
  37. data/lib/insights_cloud/async/insights_scheduled_sync.rb +23 -0
  38. data/lib/inventory_sync/async/host_result.rb +50 -0
  39. data/lib/inventory_sync/async/inventory_full_sync.rb +80 -0
  40. data/lib/tasks/insights.rake +15 -0
  41. data/lib/tasks/rh_cloud_inventory.rake +37 -0
  42. data/package.json +3 -1
  43. data/test/controllers/insights_sync/settings_controller_test.rb +30 -0
  44. data/test/factories/insights_factories.rb +31 -0
  45. data/test/jobs/insights_full_sync_test.rb +4 -2
  46. data/test/jobs/inventory_full_sync_test.rb +91 -0
  47. data/test/jobs/upload_report_job_test.rb +34 -0
  48. data/test/unit/fact_helpers_test.rb +22 -0
  49. data/test/unit/insights_facet_test.rb +23 -0
  50. data/test/unit/metadata_generator_test.rb +2 -0
  51. data/test/unit/rh_cloud_http_proxy_test.rb +65 -0
  52. data/test/unit/slice_generator_test.rb +144 -8
  53. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +16 -1
  54. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +22 -17
  55. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +18 -0
  56. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +8 -0
  57. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +7 -0
  58. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -6
  59. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +9 -0
  60. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -0
  61. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +12 -0
  62. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -0
  63. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +2 -0
  64. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +10 -11
  65. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
  66. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +12 -2
  67. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +17 -0
  68. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +1 -0
  69. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +30 -0
  70. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +29 -0
  71. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +1 -0
  72. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +13 -0
  73. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +21 -0
  74. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +38 -0
  75. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +31 -0
  76. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +41 -0
  77. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +38 -0
  78. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/excludePackagesSwitcher.scss +3 -0
  79. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +20 -0
  80. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +5 -1
  81. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/__snapshots__/FullScreenModal.test.js.snap +1 -0
  82. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +15 -13
  83. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +2 -1
  84. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +1 -0
  85. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.scss +3 -0
  86. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +10 -11
  87. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -2
  88. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +12 -2
  89. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +18 -1
  90. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +9 -0
  91. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +4 -0
  92. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +2 -0
  93. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +1 -0
  94. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +29 -0
  95. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +29 -0
  96. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +1 -0
  97. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +13 -0
  98. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +21 -0
  99. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +38 -0
  100. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +31 -0
  101. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +20 -0
  102. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +1 -1
  103. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +3 -3
  104. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +1 -0
  105. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +1 -0
  106. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +1 -0
  107. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +1 -0
  108. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +58 -0
  109. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +57 -0
  110. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -0
  111. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +36 -0
  112. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +13 -0
  113. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js +13 -0
  114. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +31 -0
  115. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +9 -0
  116. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +26 -0
  117. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +36 -0
  118. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButton.test.js.snap +26 -0
  119. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +98 -0
  120. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +18 -0
  121. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +18 -0
  122. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +63 -0
  123. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js +41 -0
  124. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss +20 -0
  125. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +22 -0
  126. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +2 -0
  127. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +1 -0
  128. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +6 -1
  129. data/webpack/ForemanInventoryUpload/Components/StatusChart/StatusChart.js +1 -1
  130. data/webpack/ForemanInventoryUpload/Components/StatusChart/__tests__/__snapshots__/StatusChart.test.js.snap +1 -1
  131. data/webpack/ForemanInventoryUpload/Components/TabContainer/tabContainer.scss +1 -1
  132. data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +6 -1
  133. data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +2 -4
  134. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +3 -1
  135. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +8 -0
  136. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +2 -0
  137. data/webpack/ForemanRhCloudPages.js +9 -0
  138. data/webpack/ForemanRhCloudReducers.js +2 -0
  139. data/webpack/ForemanRhCloudSelectors.js +5 -0
  140. data/webpack/ForemanRhCloudTestHelpers.js +17 -3
  141. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +33 -0
  142. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +57 -0
  143. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsConstants.js +4 -0
  144. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsReducer.js +24 -0
  145. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsSelectors.js +6 -0
  146. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettings.test.js +18 -0
  147. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsActions.test.js +62 -0
  148. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsReducer.test.js +33 -0
  149. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsSelectors.test.js +21 -0
  150. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +15 -0
  151. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsActions.test.js.snap +65 -0
  152. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsReducer.test.js.snap +19 -0
  153. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsSelectors.test.js.snap +9 -0
  154. data/webpack/InsightsCloudSync/Components/InsightsSettings/index.js +21 -0
  155. data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +16 -0
  156. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +1 -0
  157. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +45 -0
  158. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +17 -0
  159. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +38 -0
  160. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +1 -0
  161. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +3 -0
  162. data/webpack/InsightsCloudSync/InsightsCloudSync.js +32 -28
  163. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +10 -11
  164. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +0 -2
  165. data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +7 -2
  166. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +51 -46
  167. data/webpack/InsightsCloudSync/index.js +2 -1
  168. data/webpack/InsightsHostDetailsTab/InsightsTab.js +64 -0
  169. data/webpack/InsightsHostDetailsTab/InsightsTab.scss +86 -0
  170. data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +31 -0
  171. data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +2 -0
  172. data/webpack/InsightsHostDetailsTab/InsightsTabReducer.js +19 -0
  173. data/webpack/InsightsHostDetailsTab/InsightsTabSelectors.js +3 -0
  174. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.fixtures.js +25 -0
  175. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.test.js +13 -0
  176. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabActions.test.js +19 -0
  177. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabIntegration.test.js +17 -0
  178. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabReducer.test.js +26 -0
  179. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabSelectors.test.js +13 -0
  180. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTab.test.js.snap +30 -0
  181. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabActions.test.js.snap +58 -0
  182. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabReducer.test.js.snap +34 -0
  183. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabSelectors.test.js.snap +20 -0
  184. data/webpack/InsightsHostDetailsTab/components/ListItem/ListItem.js +69 -0
  185. data/webpack/InsightsHostDetailsTab/components/ListItem/index.js +1 -0
  186. data/webpack/InsightsHostDetailsTab/index.js +20 -0
  187. data/webpack/__mocks__/foremanReact/constants.js +5 -0
  188. data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
  189. data/webpack/__tests__/ForemanRhCloudSelectors.test.js +4 -1
  190. data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +12 -2
  191. data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +10 -9
  192. data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +27 -2
  193. data/webpack/index.js +2 -12
  194. data/webpack/stories/decorators/withCardsDecorator.js +1 -1
  195. metadata +120 -12
  196. data/lib/tasks/generator.rake +0 -29
  197. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
@@ -0,0 +1,23 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class InsightsFacetTest < ActiveSupport::TestCase
4
+ setup do
5
+ @host = FactoryBot.create(:host, :with_insights_hits)
6
+ InsightsFacet.reset_counters(@host.insights.id, :hits_count)
7
+ end
8
+
9
+ test 'host with hits can be deleted' do
10
+ assert_equal 1, @host.insights.hits.count
11
+
12
+ host_id = @host.id
13
+ @host.destroy
14
+ actual_host = Host.find_by_id(host_id)
15
+ assert_nil actual_host
16
+ end
17
+
18
+ test 'search host by recommendations_count' do
19
+ FactoryBot.create(:host) # create another host with no recommendations
20
+
21
+ assert_equal 1, Host.search_for('insights_recommendations_count = 1').count
22
+ end
23
+ end
@@ -13,6 +13,8 @@ class MetadataGeneratorTest < ActiveSupport::TestCase
13
13
 
14
14
  assert_not_nil actual['report_id']
15
15
  assert_equal 'Satellite', actual['source']
16
+ assert_not_nil (actual_metadata = actual['source_metadata'])
17
+ assert_equal ForemanRhCloud::VERSION, actual_metadata['foreman_rh_cloud_version']
16
18
  assert_equal({}, actual['report_slices'])
17
19
  end
18
20
 
@@ -0,0 +1,65 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class RhCloudHttpProxyTest < ActiveSupport::TestCase
4
+ setup do
5
+ @global_content_proxy_mock = 'http://global:content@localhost:8888'
6
+ @global_foreman_proxy_mock = 'http://global:foreman@localhost:8888'
7
+ @katello_cdn_proxy_mock = {
8
+ host: 'localhost',
9
+ port: '8888',
10
+ user: 'katello',
11
+ password: 'cdn',
12
+ scheme: 'http',
13
+ }
14
+ @katello_cdn_proxy_string_mock = 'http://katello:cdn@localhost:8888'
15
+ end
16
+
17
+ test 'selects global content proxy' do
18
+ setup_global_content_proxy
19
+ setup_global_foreman_proxy
20
+ setup_cdn_proxy do
21
+ assert_equal @global_content_proxy_mock, ForemanRhCloud.proxy_setting
22
+ end
23
+ end
24
+
25
+ test 'selects cdn proxy' do
26
+ setup_global_foreman_proxy
27
+ setup_cdn_proxy do
28
+ assert_equal @katello_cdn_proxy_string_mock, ForemanRhCloud.proxy_setting
29
+ end
30
+ end
31
+
32
+ test 'selects global foreman proxy' do
33
+ setup_global_foreman_proxy
34
+
35
+ assert_equal @global_foreman_proxy_mock, ForemanRhCloud.proxy_setting
36
+ end
37
+
38
+ def setup_global_content_proxy
39
+ http_proxy = FactoryBot.create(:http_proxy, url: @global_content_proxy_mock)
40
+ HttpProxy.stubs(:default_global_content_proxy).returns(http_proxy)
41
+ end
42
+
43
+ def setup_global_foreman_proxy
44
+ FactoryBot.create(:setting, :name => 'http_proxy', :value => @global_foreman_proxy_mock)
45
+ end
46
+
47
+ def setup_cdn_proxy
48
+ old_cdn_setting = SETTINGS[:katello][:cdn_proxy]
49
+ SETTINGS[:katello][:cdn_proxy] = @katello_cdn_proxy_mock
50
+ yield
51
+ ensure
52
+ SETTINGS[:katello][:cdn_proxy] = old_cdn_setting
53
+ end
54
+
55
+ test 'transform proxy scheme test' do
56
+ mock_http_proxy = 'http://user:password@localhost:8888'
57
+ mock_https_proxy = 'https://user:password@localhost:8888'
58
+
59
+ transformed_http_uri = URI.parse(ForemanRhCloud.transform_scheme(mock_http_proxy))
60
+ transformed_https_uri = URI.parse(ForemanRhCloud.transform_scheme(mock_https_proxy))
61
+
62
+ assert_equal 'proxy', transformed_http_uri.scheme
63
+ assert_equal 'proxys', transformed_https_uri.scheme
64
+ end
65
+ end
@@ -1,6 +1,6 @@
1
1
  require 'test_plugin_helper'
2
2
 
3
- class ReportGeneratorTest < ActiveSupport::TestCase
3
+ class SliceGeneratorTest < ActiveSupport::TestCase
4
4
  setup do
5
5
  User.current = User.find_by(login: 'secret_admin')
6
6
 
@@ -9,6 +9,7 @@ class ReportGeneratorTest < ActiveSupport::TestCase
9
9
 
10
10
  @host = FactoryBot.create(
11
11
  :host,
12
+ :redhat,
12
13
  :with_subscription,
13
14
  :with_content,
14
15
  content_view: cv.first,
@@ -43,6 +44,8 @@ class ReportGeneratorTest < ActiveSupport::TestCase
43
44
  'dmi::chassis::asset_tag',
44
45
  'insights_client::obfuscate_hostname_enabled',
45
46
  'insights_client::hostname',
47
+ 'insights_client::obfuscate_ip_enabled',
48
+ 'insights_client::ips',
46
49
  ]
47
50
  end
48
51
 
@@ -68,6 +71,31 @@ class ReportGeneratorTest < ActiveSupport::TestCase
68
71
  assert_equal @host.fqdn, actual_host['fqdn']
69
72
  assert_equal '1234', actual_host['account']
70
73
  assert_equal 1, generator.hosts_count
74
+ assert_not_nil(actual_system_profile = actual_host['system_profile'])
75
+ assert_nil actual_system_profile['number_of_cpus']
76
+ assert_nil actual_system_profile['number_of_sockets']
77
+ assert_nil actual_system_profile['cores_per_socket']
78
+ assert_nil actual_system_profile['system_memory_bytes']
79
+ assert_nil actual_system_profile['os_release']
80
+ end
81
+
82
+ test 'hosts report fields should be present if fact exist' do
83
+ FactoryBot.create(:fact_value, fact_name: fact_names['cpu::cpu(s)'], value: '4', host: @host)
84
+ FactoryBot.create(:fact_value, fact_name: fact_names['cpu::cpu_socket(s)'], value: '2', host: @host)
85
+ FactoryBot.create(:fact_value, fact_name: fact_names['cpu::core(s)_per_socket'], value: '1', host: @host)
86
+
87
+ batch = Host.where(id: @host.id).in_batches.first
88
+ generator = create_generator(batch)
89
+
90
+ json_str = generator.render
91
+ actual = JSON.parse(json_str.join("\n"))
92
+
93
+ assert_equal 'slice_123', actual['report_slice_id']
94
+ assert_not_nil(actual_host = actual['hosts'].first)
95
+ assert_not_nil(actual_system_profile = actual_host['system_profile'])
96
+ assert_equal 4, actual_system_profile['number_of_cpus']
97
+ assert_equal 2, actual_system_profile['number_of_sockets']
98
+ assert_equal 1, actual_system_profile['cores_per_socket']
71
99
  end
72
100
 
73
101
  test 'generates ip_address and mac_address fields' do
@@ -87,6 +115,59 @@ class ReportGeneratorTest < ActiveSupport::TestCase
87
115
  assert_equal 1, generator.hosts_count
88
116
  end
89
117
 
118
+ test 'generates obfuscated ip_address fields without inisghts-client' do
119
+ FactoryBot.create(:setting, :name => 'obfuscate_inventory_ips', :value => true)
120
+
121
+ @host.interfaces << FactoryBot.build(:nic_managed)
122
+ batch = Host.where(id: @host.id).in_batches.first
123
+ generator = create_generator(batch)
124
+
125
+ json_str = generator.render
126
+ actual = JSON.parse(json_str.join("\n"))
127
+
128
+ assert_equal 'slice_123', actual['report_slice_id']
129
+ assert_not_nil(actual_host = actual['hosts'].first)
130
+ assert_equal '10.230.230.1', actual_host['ip_addresses'].first
131
+ assert_not_nil(actual_system_profile = actual_host['system_profile'])
132
+ assert_not_nil(actual_network_interfaces = actual_system_profile['network_interfaces'])
133
+ assert_not_nil(actual_nic = actual_network_interfaces.first)
134
+ assert_equal '10.230.230.1', actual_nic['ipv4_addresses'].first
135
+ assert_equal @host.fqdn, actual_host['fqdn']
136
+ assert_equal '1234', actual_host['account']
137
+ assert_equal 1, generator.hosts_count
138
+ end
139
+
140
+ test 'generates obfuscated ip_address fields with inisghts-client' do
141
+ nic = FactoryBot.build(:nic_primary_and_provision)
142
+ @host.interfaces = [nic]
143
+ @host.save!
144
+
145
+ FactoryBot.create(:fact_value, fact_name: fact_names['insights_client::obfuscate_ip_enabled'], value: 'true', host: @host)
146
+ FactoryBot.create(
147
+ :fact_value,
148
+ fact_name: fact_names['insights_client::ips'],
149
+ value: "[{\"obfuscated\": \"10.230.230.100\", \"original\": \"#{nic.ip}\"}]",
150
+ host: @host
151
+ )
152
+
153
+ batch = Host.where(id: @host.id).in_batches.first
154
+ generator = create_generator(batch)
155
+
156
+ json_str = generator.render
157
+ actual = JSON.parse(json_str.join("\n"))
158
+
159
+ assert_equal 'slice_123', actual['report_slice_id']
160
+ assert_not_nil(actual_host = actual['hosts'].first)
161
+ assert_equal '10.230.230.100', actual_host['ip_addresses'].first
162
+ assert_not_nil(actual_system_profile = actual_host['system_profile'])
163
+ assert_not_nil(actual_network_interfaces = actual_system_profile['network_interfaces'])
164
+ assert_not_nil(actual_nic = actual_network_interfaces.first)
165
+ assert_equal '10.230.230.100', actual_nic['ipv4_addresses'].first
166
+ assert_equal @host.fqdn, actual_host['fqdn']
167
+ assert_equal '1234', actual_host['account']
168
+ assert_equal 1, generator.hosts_count
169
+ end
170
+
90
171
  test 'obfuscates fqdn when instructed by insights-client' do
91
172
  FactoryBot.create(:fact_value, fact_name: fact_names['insights_client::obfuscate_hostname_enabled'], value: 'true', host: @host)
92
173
  FactoryBot.create(:fact_value, fact_name: fact_names['insights_client::hostname'], value: 'obfuscated_name', host: @host)
@@ -115,7 +196,7 @@ class ReportGeneratorTest < ActiveSupport::TestCase
115
196
  json_str = generator.render
116
197
  actual = JSON.parse(json_str.join("\n"))
117
198
 
118
- obfuscated_fqdn = Digest::SHA1.hexdigest(@host.fqdn)
199
+ obfuscated_fqdn = Digest::SHA1.hexdigest(@host.fqdn) + '.example.com'
119
200
 
120
201
  assert_equal 'slice_123', actual['report_slice_id']
121
202
  assert_not_nil(actual_host = actual['hosts'].first)
@@ -146,6 +227,10 @@ class ReportGeneratorTest < ActiveSupport::TestCase
146
227
  end
147
228
 
148
229
  test 'generates a report with satellite facts' do
230
+ hostgroup = FactoryBot.create(:hostgroup)
231
+ @host.hostgroup = hostgroup
232
+ @host.save!
233
+
149
234
  Foreman.expects(:instance_id).twice.returns('satellite-id')
150
235
  batch = Host.where(id: @host.id).in_batches.first
151
236
  generator = create_generator(batch)
@@ -159,13 +244,14 @@ class ReportGeneratorTest < ActiveSupport::TestCase
159
244
  assert_equal 'satellite-id', satellite_facts['satellite_instance_id']
160
245
  assert_equal @host.organization_id, satellite_facts['organization_id']
161
246
 
162
- instance_id_tag = actual['hosts'].first['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == 'satellite_instance_id'}
163
- assert_not_nil instance_id_tag
164
- assert_equal 'satellite-id', instance_id_tag['value']
247
+ actual_host = actual['hosts'].first
248
+ assert_tag('satellite-id', actual_host, 'satellite_instance_id')
249
+ assert_tag(@host.organization_id.to_s, actual_host, 'organization_id')
250
+ assert_tag(@host.content_view.name, actual_host, 'content_view')
251
+ assert_tag(@host.location.name, actual_host, 'location')
252
+ assert_tag(@host.organization.name, actual_host, 'organization')
253
+ assert_tag(@host.hostgroup.name, actual_host, 'hostgroup')
165
254
 
166
- org_id_tag = actual['hosts'].first['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == 'organization_id'}
167
- assert_not_nil org_id_tag
168
- assert_equal @host.organization_id.to_s, org_id_tag['value']
169
255
  assert_equal false, satellite_facts['is_hostname_obfuscated']
170
256
 
171
257
  version = satellite_facts['satellite_version']
@@ -208,6 +294,7 @@ class ReportGeneratorTest < ActiveSupport::TestCase
208
294
  test 'generates a report with system purpose' do
209
295
  @host.subscription_facet.purpose_usage = 'test_usage'
210
296
  @host.subscription_facet.purpose_role = 'test_role'
297
+ @host.subscription_facet.service_level = 'test_sla'
211
298
  @host.subscription_facet.save!
212
299
 
213
300
  batch = Host.where(id: @host.id).in_batches.first
@@ -224,6 +311,7 @@ class ReportGeneratorTest < ActiveSupport::TestCase
224
311
  assert_not_nil(fact_values = host_facts['facts'])
225
312
  assert_equal 'test_usage', fact_values['system_purpose_usage']
226
313
  assert_equal 'test_role', fact_values['system_purpose_role']
314
+ assert_equal 'test_sla', fact_values['system_purpose_sla']
227
315
  end
228
316
 
229
317
  test 'generates a report for a golden ticket' do
@@ -262,6 +350,22 @@ class ReportGeneratorTest < ActiveSupport::TestCase
262
350
  assert_equal 1, generator.hosts_count
263
351
  end
264
352
 
353
+ test 'include also hosts with non-redhat OS' do
354
+ os = @host.operatingsystem
355
+ os.name = 'Centos'
356
+ os.save!
357
+
358
+ # make a_host last
359
+ batch = ForemanInventoryUpload::Generators::Queries.for_org(@host.organization_id).first
360
+ generator = create_generator(batch)
361
+
362
+ json_str = generator.render
363
+ actual = JSON.parse(json_str.join("\n"))
364
+
365
+ assert_equal 'slice_123', actual['report_slice_id']
366
+ assert_equal 1, generator.hosts_count
367
+ end
368
+
265
369
  test 'shows system_memory_bytes in bytes' do
266
370
  FactoryBot.create(:fact_value, fact_name: fact_names['memory::memtotal'], value: '1', host: @host)
267
371
 
@@ -425,6 +529,32 @@ class ReportGeneratorTest < ActiveSupport::TestCase
425
529
  assert_equal 'alibaba', actual_profile['cloud_provider']
426
530
  end
427
531
 
532
+ test 'include packages installed in the report' do
533
+ FactoryBot.create(:setting, :name => 'exclude_installed_packages', :value => false)
534
+ installed_package = ::Katello::InstalledPackage.create(name: 'test-package', nvra: 'test-package-1.0.x86_64')
535
+
536
+ another_host = FactoryBot.create(
537
+ :host,
538
+ :with_subscription,
539
+ :with_content,
540
+ content_view: @host.content_view,
541
+ lifecycle_environment: @host.lifecycle_environment,
542
+ organization: @host.organization,
543
+ installed_packages: [installed_package]
544
+ )
545
+
546
+ batch = Host.where(id: another_host.id).in_batches.first
547
+ generator = create_generator(batch)
548
+
549
+ json_str = generator.render
550
+ actual = JSON.parse(json_str.join("\n"))
551
+
552
+ assert_equal 'slice_123', actual['report_slice_id']
553
+ assert_not_nil(actual_host = actual['hosts'].first)
554
+ assert_not_nil(actual_profile = actual_host['system_profile'])
555
+ assert_not_nil(actual_profile['installed_packages'])
556
+ end
557
+
428
558
  private
429
559
 
430
560
  def create_generator(batch, name = 'slice_123')
@@ -436,4 +566,10 @@ class ReportGeneratorTest < ActiveSupport::TestCase
436
566
  end
437
567
  generator
438
568
  end
569
+
570
+ def assert_tag(expected_value, host, tag_id)
571
+ actual_tag = host['tags'].find { |tag| tag['namespace'] == 'satellite' && tag['key'] == tag_id }
572
+ assert_not_nil actual_tag
573
+ assert_equal expected_value, actual_tag['value']
574
+ end
439
575
  end
@@ -34,8 +34,14 @@ export const autoUploadEnabled = true;
34
34
 
35
35
  export const hostObfuscationEnabled = true;
36
36
 
37
+ export const ipsObfuscationEnabled = true;
38
+
37
39
  export const filterTerm = 'some_filter';
38
40
 
41
+ export const cloudToken = 'some-cloud-token';
42
+
43
+ export const excludePackages = false;
44
+
39
45
  export const props = {
40
46
  accounts,
41
47
  fetchAccountsStatus: noop,
@@ -44,6 +50,15 @@ export const props = {
44
50
  pollingProcessID,
45
51
  };
46
52
 
53
+ export const pollingResponse = {
54
+ accounts,
55
+ autoUploadEnabled,
56
+ hostObfuscationEnabled,
57
+ ipsObfuscationEnabled,
58
+ cloudToken,
59
+ excludePackages,
60
+ };
61
+
47
62
  export const fetchAccountsStatusResponse = {
48
- data: { accounts, autoUploadEnabled, hostObfuscationEnabled },
63
+ data: pollingResponse,
49
64
  };
@@ -1,4 +1,5 @@
1
1
  import API from 'foremanReact/API';
2
+ import { addToast } from 'foremanReact/redux/actions/toasts';
2
3
  import { inventoryUrl } from '../../ForemanInventoryHelpers';
3
4
  import {
4
5
  INVENTORY_ACCOUNT_STATUS_POLLING,
@@ -10,16 +11,10 @@ import {
10
11
 
11
12
  export const fetchAccountsStatus = () => async dispatch => {
12
13
  try {
13
- const {
14
- data: { accounts, autoUploadEnabled, hostObfuscationEnabled },
15
- } = await API.get(inventoryUrl('accounts'));
14
+ const { data } = await API.get(inventoryUrl('accounts'));
16
15
  dispatch({
17
16
  type: INVENTORY_ACCOUNT_STATUS_POLLING,
18
- payload: {
19
- accounts,
20
- autoUploadEnabled,
21
- hostObfuscationEnabled,
22
- },
17
+ payload: data,
23
18
  });
24
19
  } catch (error) {
25
20
  dispatch({
@@ -45,7 +40,7 @@ export const stopAccountStatusPolling = pollingProcessID => dispatch => {
45
40
  });
46
41
  };
47
42
 
48
- export const restartProcess = (accountID, activeTab) => dispatch => {
43
+ export const restartProcess = (accountID, activeTab) => async dispatch => {
49
44
  let processController = null;
50
45
  let processStatusName = null;
51
46
 
@@ -57,12 +52,22 @@ export const restartProcess = (accountID, activeTab) => dispatch => {
57
52
  processStatusName = 'generate_report_status';
58
53
  }
59
54
 
60
- API.post(inventoryUrl(`${accountID}/${processController}`));
61
- dispatch({
62
- type: INVENTORY_PROCESS_RESTART,
63
- payload: {
64
- accountID,
65
- processStatusName,
66
- },
67
- });
55
+ try {
56
+ await API.post(inventoryUrl(`${accountID}/${processController}`));
57
+ dispatch({
58
+ type: INVENTORY_PROCESS_RESTART,
59
+ payload: {
60
+ accountID,
61
+ processStatusName,
62
+ },
63
+ });
64
+ } catch (error) {
65
+ dispatch(
66
+ addToast({
67
+ sticky: true,
68
+ type: 'error',
69
+ message: error.message,
70
+ })
71
+ );
72
+ }
68
73
  };
@@ -1,6 +1,8 @@
1
1
  import Immutable from 'seamless-immutable';
2
2
  import { AUTO_UPLOAD_TOGGLE } from '../AutoUploadSwitcher/AutoUploadSwitcherConstants';
3
3
  import { HOST_OBFUSCATION_TOGGLE } from '../HostObfuscationSwitcher/HostObfuscationSwitcherConstants';
4
+ import { IPS_OBFUSCATION_TOGGLE } from '../IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants';
5
+ import { EXCLUDE_PACKAGES_TOGGLE } from '../ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants';
4
6
  import {
5
7
  INVENTORY_ACCOUNT_STATUS_POLLING,
6
8
  INVENTORY_ACCOUNT_STATUS_POLLING_ERROR,
@@ -24,6 +26,9 @@ export default (state = initialState, action) => {
24
26
  processStatusName,
25
27
  autoUploadEnabled,
26
28
  hostObfuscationEnabled,
29
+ ipsObfuscationEnabled,
30
+ cloudToken,
31
+ excludePackages,
27
32
  } = {},
28
33
  } = action;
29
34
 
@@ -34,6 +39,9 @@ export default (state = initialState, action) => {
34
39
  accounts,
35
40
  autoUploadEnabled,
36
41
  hostObfuscationEnabled,
42
+ ipsObfuscationEnabled,
43
+ cloudToken,
44
+ excludePackages,
37
45
  error: null,
38
46
  });
39
47
  case INVENTORY_ACCOUNT_STATUS_POLLING_ERROR:
@@ -65,6 +73,16 @@ export default (state = initialState, action) => {
65
73
  ...state,
66
74
  hostObfuscationEnabled,
67
75
  });
76
+ case EXCLUDE_PACKAGES_TOGGLE:
77
+ return state.merge({
78
+ ...state,
79
+ excludePackages,
80
+ });
81
+ case IPS_OBFUSCATION_TOGGLE:
82
+ return state.merge({
83
+ ...state,
84
+ ipsObfuscationEnabled,
85
+ });
68
86
  default:
69
87
  return state;
70
88
  }