foreman_rh_cloud 3.0.18.1 → 3.0.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_inventory_upload/tasks_controller.rb +14 -3
  3. data/app/controllers/foreman_inventory_upload/uploads_settings_controller.rb +8 -0
  4. data/app/models/insights_resolution.rb +1 -1
  5. data/config/routes.rb +1 -1
  6. data/lib/foreman_inventory_upload.rb +5 -0
  7. data/lib/foreman_inventory_upload/generators/queries.rb +1 -1
  8. data/lib/foreman_inventory_upload/scripts/uploader.sh.erb +5 -1
  9. data/lib/foreman_rh_cloud/version.rb +1 -1
  10. data/lib/insights_cloud/async/insights_full_sync.rb +17 -21
  11. data/lib/inventory_sync/async/host_result.rb +11 -6
  12. data/lib/inventory_sync/async/inventory_full_sync.rb +24 -41
  13. data/lib/inventory_sync/async/inventory_hosts_sync.rb +34 -0
  14. data/lib/inventory_sync/async/query_inventory_job.rb +54 -0
  15. data/lib/tasks/insights.rake +1 -1
  16. data/package.json +1 -1
  17. data/test/jobs/insights_full_sync_test.rb +14 -10
  18. data/test/jobs/inventory_full_sync_test.rb +181 -11
  19. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +1 -1
  20. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +0 -1
  21. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +81 -46
  22. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -3
  23. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +6 -12
  24. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +1 -9
  25. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +18 -27
  26. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +1 -16
  27. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/integrations.test.js.snap +58 -0
  28. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/integrations.test.js +51 -0
  29. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +2 -5
  30. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +0 -2
  31. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +2 -0
  32. data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +4 -0
  33. metadata +25 -25
  34. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +0 -36
  35. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +0 -31
  36. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +0 -26
  37. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +0 -98
  38. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 72303b7bc3f1bc2deb3972acde6131cdbe4d1760381d1eb8cdaa5704e3189481
4
- data.tar.gz: 725efab879cee6224007359547068820882319d078089760cac43a8c763df754
3
+ metadata.gz: 43110585639a77e33c9c4fb1fce44855b6fb4c9793db3fc624a01b567c09e400
4
+ data.tar.gz: '00285b699105835e629127cc96801082ece7ff41c9a93d82fcb7e7a6b2662c65'
5
5
  SHA512:
6
- metadata.gz: 28d7e810476e8202a62aa7381e8d3ef86cec5f2f6a7bc9580d5a116a543275183201ad573e848f30a65253bee2f20e7b0385f0cc6f0ab90637cfb03398557188
7
- data.tar.gz: 52560a0917aecaed1c9897c593769c19b7dde9348c1b0450cd32fb4998d5c63e4232d671a1b767e33e6dcec960b3f4647bc23d56a80f15c1f18930db8b772409
6
+ metadata.gz: aa89cca9fb72a26453a44cba2120c51ab3f47f67ec40ca8e539a1dfaeddae73687bd909e3f3880cd3eed94c7c5d4b509bb55e2450f5bf4e55a8db2f73ceaabe9
7
+ data.tar.gz: 33d4200395db6f2f9a0e2dbd8b27d8c55ff66d7da87efa9c9c39663468f0dd9c43c8949b0ce09b2158875d053375e39d03e4550b821732df4d49fb52f5872cb3
@@ -13,12 +13,23 @@ module ForemanInventoryUpload
13
13
  message: N_('Nothing to sync, there are no hosts with subscription for this organization.'),
14
14
  }, status: :method_not_allowed
15
15
  else
16
- host_statuses = InventorySync::Async::InventoryFullSync.perform_now(selected_org)
16
+ task = ForemanTasks.async_task(InventorySync::Async::InventoryFullSync, selected_org)
17
17
  end
18
+ return render json: { message: N_('there was an issue triggering the task') }, status: :internal_server_error unless task
18
19
 
19
20
  render json: {
20
- syncHosts: host_statuses[:sync],
21
- disconnectHosts: host_statuses[:disconnect],
21
+ task: task,
22
+ }, status: :ok
23
+ end
24
+
25
+ def show
26
+ task = ForemanTasks::Task.find_by(id: params[:id])
27
+ return render json: { message: N_('No task was found') }, status: :internal_server_error unless task
28
+
29
+ render json: {
30
+ endedAt: task.ended_at,
31
+ output: task.output,
32
+ result: task.result,
22
33
  }, status: :ok
23
34
  end
24
35
  end
@@ -8,6 +8,7 @@ module ForemanInventoryUpload
8
8
  excludePackagesEnabled: Setting[:exclude_installed_packages],
9
9
  CloudConnectorStatus: ForemanInventoryUpload::UploadsSettingsController.cloud_connector_status,
10
10
  cloudToken: !Setting[:rh_cloud_token].empty?,
11
+ lastSyncTask: last_successful_inventory_sync_task,
11
12
  }, status: :ok
12
13
  end
13
14
 
@@ -22,5 +23,12 @@ module ForemanInventoryUpload
22
23
  return nil unless job
23
24
  { id: job.id, task: ForemanTasks::Task.where(:id => job.task_id).first }
24
25
  end
26
+
27
+ def last_successful_inventory_sync_task
28
+ task = ForemanTasks::Task.where(label: 'InventorySync::Async::InventoryFullSync', result: 'success')
29
+ .reorder('ended_at desc').first
30
+ return nil unless task
31
+ { output: task.output, endedAt: task.ended_at }
32
+ end
25
33
  end
26
34
  end
@@ -1,3 +1,3 @@
1
1
  class InsightsResolution < ApplicationRecord
2
- belongs_to :rule, class_name: 'InsightsRule', foreign_key: 'rule_id', primary_key: 'rule_id', inverse_of: :resolutions
2
+ belongs_to :rule, class_name: 'InsightsRule', primary_key: 'rule_id', inverse_of: :resolutions
3
3
  end
data/config/routes.rb CHANGED
@@ -10,7 +10,7 @@ Rails.application.routes.draw do
10
10
 
11
11
  post 'cloud_connector', to: 'uploads#enable_cloud_connector'
12
12
 
13
- resources :tasks, only: [:create]
13
+ resources :tasks, only: [:create, :show]
14
14
  end
15
15
 
16
16
  namespace :insights_cloud do
@@ -56,6 +56,11 @@ module ForemanInventoryUpload
56
56
  @upload_url ||= ENV['SATELLITE_INVENTORY_UPLOAD_URL'] || 'https://cert.cloud.redhat.com/api/ingress/v1/upload'
57
57
  end
58
58
 
59
+ def self.slice_size
60
+ # for testing set ENV to 'https://ci.cloud.redhat.com/api/ingress/v1/upload'
61
+ @slice_size ||= (ENV['SATELLITE_INVENTORY_SLICE_SIZE'] || '1000').to_i
62
+ end
63
+
59
64
  def self.ensure_folder(folder)
60
65
  FileUtils.mkdir_p(folder)
61
66
  folder
@@ -50,7 +50,7 @@ module ForemanInventoryUpload
50
50
  end
51
51
 
52
52
  def self.for_org(organization_id)
53
- for_slice(Host.unscoped.where(organization_id: organization_id)).in_batches(of: 1_000)
53
+ for_slice(Host.unscoped.where(organization_id: organization_id)).in_batches(of: ForemanInventoryUpload.slice_size)
54
54
  end
55
55
 
56
56
  def self.organizations_for_user(portal_user)
@@ -37,9 +37,13 @@ mkdir -p $DONE_DIR
37
37
  for f in $FILES
38
38
  do
39
39
  curl -k -vvv -# --fail -F "file=@$f;type=application/vnd.redhat.qpc.tar+tgz" $DEST "$AUTH_KEY" "$AUTH_VAL"
40
- if [ $? -eq 0 ]; then
40
+ status=$?
41
+ if [ $status -eq 0 ]; then
41
42
  mv $f $DONE_DIR
42
43
  echo "Done: $f"
43
44
  fi
44
45
  done
45
46
  echo "Uploaded files moved to done/ folder"
47
+
48
+ # return the error code from the curl command
49
+ exit $status
@@ -1,3 +1,3 @@
1
1
  module ForemanRhCloud
2
- VERSION = '3.0.18.1'.freeze
2
+ VERSION = '3.0.19'.freeze
3
3
  end
@@ -6,14 +6,22 @@ module InsightsCloud
6
6
  include ::ForemanRhCloud::CloudAuth
7
7
 
8
8
  def perform
9
+ # This can be turned off when we enable automatic status syncs
10
+ # This step will query cloud inventory to retrieve inventory uuids for each host
11
+ ForemanTasks.sync_task(InventorySync::Async::InventoryHostsSync)
12
+
13
+ perform_hits_sync
14
+
15
+ InsightsRulesSync.perform_later
16
+ end
17
+
18
+ def perform_hits_sync
9
19
  hits = query_insights_hits
10
20
 
11
- @hits_host_names = Hash[hits.map { |hit| [hit['hostname'], hit['uuid']] }]
12
- setup_host_names(@hits_host_names.keys)
21
+ uuids = hits.map { |hit| hit['uuid'] }
22
+ setup_host_ids(uuids)
13
23
 
14
24
  replace_hits_data(hits)
15
-
16
- InsightsRulesSync.perform_later
17
25
  end
18
26
 
19
27
  def logger
@@ -50,39 +58,27 @@ module InsightsCloud
50
58
  JSON.parse(rules_response)
51
59
  end
52
60
 
53
- def setup_host_names(host_names)
61
+ def setup_host_ids(uuids)
54
62
  @host_ids = Hash[
55
- Host.unscoped.where(name: host_names).pluck(:name, :id)
63
+ InsightsFacet.where(uuid: uuids).pluck(:uuid, :host_id)
56
64
  ]
57
65
  end
58
66
 
59
- def host_id(host_name)
60
- @host_ids[host_name]
67
+ def host_id(uuid)
68
+ @host_ids[uuid]
61
69
  end
62
70
 
63
71
  def replace_hits_data(hits)
64
72
  InsightsHit.transaction do
65
73
  # Reset hit counters to 0, they will be recreated later
66
74
  InsightsFacet.unscoped.update_all(hits_count: 0)
67
- # create new facets for hosts that are missing one
68
- hosts_with_existing_facets = InsightsFacet.where(host_id: @host_ids.values).pluck(:host_id)
69
- InsightsFacet.create(
70
- @host_ids.map do |host_name, host_id|
71
- unless hosts_with_existing_facets.include?(host_id)
72
- {
73
- host_id: host_id,
74
- uuid: @hits_host_names[host_name],
75
- }
76
- end
77
- end.compact
78
- )
79
75
  InsightsHit.delete_all
80
76
  InsightsHit.create(hits.map { |hits_hash| to_model_hash(hits_hash) }.compact)
81
77
  end
82
78
  end
83
79
 
84
80
  def to_model_hash(hit_hash)
85
- hit_host_id = host_id(hit_hash['hostname'])
81
+ hit_host_id = host_id(hit_hash['uuid'])
86
82
 
87
83
  return unless hit_host_id
88
84
 
@@ -6,12 +6,13 @@ module InventorySync
6
6
  @count = result['count']
7
7
  @page = result['page']
8
8
  @per_page = result['per_page']
9
- @fqdns = result["results"].map { |host| host['fqdn'] }
9
+ @sub_ids = result["results"].map { |host| host['subscription_manager_id'] }
10
+ @uuid_by_sub_id = Hash[result["results"].map { |host| [host['subscription_manager_id'], host['id']] }]
10
11
  end
11
12
 
12
13
  def status_hashes
13
- @fqdns.map do |fqdn|
14
- host_id = host_id(fqdn)
14
+ @sub_ids.map do |sub_id|
15
+ host_id = host_id(sub_id)
15
16
  if host_id
16
17
  touched << host_id
17
18
  {
@@ -27,16 +28,20 @@ module InventorySync
27
28
  @touched ||= []
28
29
  end
29
30
 
30
- def host_id(fqdn)
31
- hosts[fqdn]
31
+ def host_id(sub_id)
32
+ hosts[sub_id]
32
33
  end
33
34
 
34
35
  def hosts
35
36
  @hosts ||= Hash[
36
- Host.where(name: @fqdns).pluck(:name, :id)
37
+ Katello::Host::SubscriptionFacet.where(uuid: @sub_ids).pluck(:uuid, :host_id)
37
38
  ]
38
39
  end
39
40
 
41
+ def host_uuids
42
+ @host_uuids ||= Hash[@sub_ids.map { |sub_id| [host_id(sub_id), @uuid_by_sub_id[sub_id]] }].except(nil)
43
+ end
44
+
40
45
  def percentage
41
46
  ratio = @per_page * @page * 1.0 / @total * 100
42
47
  ratio > 100 ? 100 : ratio.truncate(2)
@@ -1,42 +1,36 @@
1
- require 'rest-client'
2
-
3
1
  module InventorySync
4
2
  module Async
5
- class InventoryFullSync < ::ApplicationJob
6
- include ::ForemanRhCloud::CloudAuth
3
+ class InventoryFullSync < InventoryHostsSync
4
+ set_callback :iteration, :around, :setup_statuses
5
+ set_callback :step, :around, :update_statuses_batch
6
+
7
+ def plan(organization)
8
+ plan_self(organization_id: organization.id)
9
+ end
7
10
 
8
- def perform(organization)
9
- @organization = organization
11
+ def setup_statuses
10
12
  @subscribed_hosts_ids = Set.new(
11
13
  ForemanInventoryUpload::Generators::Queries.for_slice(
12
- Host.unscoped.where(organization: organization)
14
+ Host.unscoped.where(organization: input[:organization_id])
13
15
  ).pluck(:id)
14
16
  )
15
- @host_statuses = {
16
- sync: 0,
17
- disconnect: 0,
18
- }
19
17
 
20
18
  InventorySync::InventoryStatus.transaction do
21
19
  InventorySync::InventoryStatus.where(host_id: @subscribed_hosts_ids).delete_all
22
- page = 1
23
- loop do
24
- api_response = query_inventory(page)
25
- results = HostResult.new(api_response)
26
- logger.debug("Downloading cloud inventory data: #{results.percentage}%")
27
- update_hosts_status(results.status_hashes, results.touched)
28
- @host_statuses[:sync] += results.touched.size
29
- page += 1
30
- break if results.last?
31
- end
20
+ yield
32
21
  add_missing_hosts_statuses(@subscribed_hosts_ids)
33
- @host_statuses[:disconnect] += @subscribed_hosts_ids.size
22
+ host_statuses[:disconnect] += @subscribed_hosts_ids.size
34
23
  end
35
24
 
36
- logger.debug("Synced hosts amount: #{@host_statuses[:sync]}")
37
- logger.debug("Disconnected hosts amount: #{@host_statuses[:disconnect]}")
25
+ logger.debug("Synced hosts amount: #{host_statuses[:sync]}")
26
+ logger.debug("Disconnected hosts amount: #{host_statuses[:disconnect]}")
27
+ end
28
+
29
+ def update_statuses_batch
30
+ results = yield
38
31
 
39
- @host_statuses
32
+ update_hosts_status(results.status_hashes, results.touched)
33
+ host_statuses[:sync] += results.touched.size
40
34
  end
41
35
 
42
36
  private
@@ -58,22 +52,11 @@ module InventorySync
58
52
  )
59
53
  end
60
54
 
61
- def query_inventory(page = 1)
62
- hosts_inventory_response = RestClient::Request.execute(
63
- method: :get,
64
- url: ForemanInventoryUpload.inventory_export_url,
65
- verify_ssl: ForemanRhCloud.verify_ssl_method,
66
- proxy: ForemanRhCloud.transformed_http_proxy_string(logger: logger),
67
- headers: {
68
- Authorization: "Bearer #{rh_credentials}",
69
- params: {
70
- per_page: 100,
71
- page: page,
72
- },
73
- }
74
- )
75
-
76
- JSON.parse(hosts_inventory_response)
55
+ def host_statuses
56
+ output[:host_statuses] ||= {
57
+ sync: 0,
58
+ disconnect: 0,
59
+ }
77
60
  end
78
61
  end
79
62
  end
@@ -0,0 +1,34 @@
1
+ module InventorySync
2
+ module Async
3
+ class InventoryHostsSync < QueryInventoryJob
4
+ set_callback :iteration, :around, :setup_facet_transaction
5
+ set_callback :step, :around, :create_facets
6
+
7
+ def setup_facet_transaction
8
+ InsightsFacet.transaction do
9
+ yield
10
+ end
11
+ end
12
+
13
+ def create_facets
14
+ # get the results from the event
15
+ results = yield
16
+ add_missing_insights_facets(results.host_uuids)
17
+ results
18
+ end
19
+
20
+ private
21
+
22
+ def add_missing_insights_facets(uuids_hash)
23
+ existing_facets = InsightsFacet.where(host_id: uuids_hash.keys).pluck(:host_id)
24
+ missing_facets = uuids_hash.except(*existing_facets).map do |host_id, uuid|
25
+ {
26
+ host_id: host_id,
27
+ uuid: uuid,
28
+ }
29
+ end
30
+ InsightsFacet.create(missing_facets)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,54 @@
1
+ require 'rest-client'
2
+
3
+ module InventorySync
4
+ module Async
5
+ class QueryInventoryJob < ::Actions::EntryAction
6
+ include ActiveSupport::Callbacks
7
+ include ::ForemanRhCloud::CloudAuth
8
+
9
+ define_callbacks :iteration, :step
10
+
11
+ def run
12
+ run_callbacks :iteration do
13
+ page = 1
14
+ loop do
15
+ api_response = query_inventory(page)
16
+ results = HostResult.new(api_response)
17
+ logger.debug("Downloaded cloud inventory data: #{results.percentage}%")
18
+
19
+ run_callbacks :step do
20
+ results
21
+ end
22
+
23
+ page += 1
24
+ break if results.last?
25
+ end
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def query_inventory(page = 1)
32
+ hosts_inventory_response = RestClient::Request.execute(
33
+ method: :get,
34
+ url: ForemanInventoryUpload.inventory_export_url,
35
+ verify_ssl: ForemanRhCloud.verify_ssl_method,
36
+ proxy: ForemanRhCloud.transformed_http_proxy_string(logger: logger),
37
+ headers: {
38
+ Authorization: "Bearer #{rh_credentials}",
39
+ params: {
40
+ per_page: 100,
41
+ page: page,
42
+ },
43
+ }
44
+ )
45
+
46
+ JSON.parse(hosts_inventory_response)
47
+ end
48
+
49
+ def logger
50
+ action_logger
51
+ end
52
+ end
53
+ end
54
+ end
@@ -8,7 +8,7 @@ namespace :rh_cloud_insights do
8
8
  end
9
9
 
10
10
  organizations.each do |organization|
11
- InventorySync::Async::InventoryFullSync.perform_now(organization)
11
+ ForemanTasks.async_task(InventorySync::Async::InventoryFullSync, organization)
12
12
  puts "Synchronized inventory for organization '#{organization.name}'"
13
13
  end
14
14
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foreman_rh_cloud",
3
- "version": "3.0.18.1",
3
+ "version": "3.0.19",
4
4
  "description": "Inventory Upload =============",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -2,15 +2,20 @@ require 'test_helper'
2
2
 
3
3
  class InsightsFullSyncTest < ActiveJob::TestCase
4
4
  setup do
5
+ uuid1 = 'accdf444-5628-451d-bf3e-cf909ad72756'
5
6
  @host1 = FactoryBot.create(:host, :managed, name: 'host1')
7
+ FactoryBot.create(:insights_facet, host_id: @host1.id, uuid: uuid1)
8
+
9
+ uuid2 = 'accdf444-5628-451d-bf3e-cf909ad72757'
6
10
  @host2 = FactoryBot.create(:host, :managed, name: 'host2')
11
+ FactoryBot.create(:insights_facet, host_id: @host2.id, uuid: uuid2)
7
12
 
8
13
  hits_json = <<-HITS_JSON
9
14
  [
10
15
  {
11
16
  "hostname": "#{@host1.name}",
12
17
  "rhel_version": "7.5",
13
- "uuid": "accdf444-5628-451d-bf3e-cf909ad72756",
18
+ "uuid": "#{uuid1}",
14
19
  "last_seen": "2019-11-22T08:41:42.447244Z",
15
20
  "title": "New Ansible Engine packages are inaccessible when dedicated Ansible repo is not enabled",
16
21
  "solution_url": "",
@@ -22,7 +27,7 @@ class InsightsFullSyncTest < ActiveJob::TestCase
22
27
  {
23
28
  "hostname": "#{@host1.name}",
24
29
  "rhel_version": "7.5",
25
- "uuid": "accdf444-5628-451d-bf3e-cf909ad72756",
30
+ "uuid": "#{uuid1}",
26
31
  "last_seen": "2019-11-22T08:41:42.447244Z",
27
32
  "title": "CPU vulnerable to side-channel attacks using Microarchitectural Data Sampling (CVE-2018-12130, CVE-2018-12126, CVE-2018-12127, CVE-2019-11091)",
28
33
  "solution_url": "https://access.redhat.com/node/4134081",
@@ -34,7 +39,7 @@ class InsightsFullSyncTest < ActiveJob::TestCase
34
39
  {
35
40
  "hostname": "#{@host2.name}",
36
41
  "rhel_version": "7.5",
37
- "uuid": "accdf444-5628-451d-bf3e-cf909ad72757",
42
+ "uuid": "#{uuid2}",
38
43
  "last_seen": "2019-11-22T08:41:42.447244Z",
39
44
  "title": "CPU vulnerable to side-channel attacks using L1 Terminal Fault (CVE-2018-3620)",
40
45
  "solution_url": "https://access.redhat.com/node/3560291",
@@ -51,6 +56,7 @@ class InsightsFullSyncTest < ActiveJob::TestCase
51
56
  test 'Hits data is replaced with data from cloud' do
52
57
  InsightsCloud::Async::InsightsFullSync.any_instance.expects(:query_insights_hits).returns(@hits)
53
58
 
59
+ ForemanTasks.expects(:sync_task).with(InventorySync::Async::InventoryHostsSync)
54
60
  InsightsCloud::Async::InsightsFullSync.perform_now()
55
61
 
56
62
  @host1.reload
@@ -58,12 +64,11 @@ class InsightsFullSyncTest < ActiveJob::TestCase
58
64
 
59
65
  assert_equal 2, @host1.insights.hits.count
60
66
  assert_equal 1, @host2.insights.hits.count
61
- assert_equal 'accdf444-5628-451d-bf3e-cf909ad72756', @host1.insights.uuid
62
- assert_equal 'accdf444-5628-451d-bf3e-cf909ad72757', @host2.insights.uuid
63
67
  end
64
68
 
65
69
  test 'Hits counters are reset correctly' do
66
70
  InsightsCloud::Async::InsightsFullSync.any_instance.expects(:query_insights_hits).returns(@hits).twice
71
+ ForemanTasks.stubs(:sync_task)
67
72
 
68
73
  InsightsCloud::Async::InsightsFullSync.perform_now()
69
74
  # Invoke again
@@ -75,8 +80,6 @@ class InsightsFullSyncTest < ActiveJob::TestCase
75
80
  # Check that the counters are correct
76
81
  assert_equal 2, @host1.insights.hits.count
77
82
  assert_equal 1, @host2.insights.hits.count
78
- assert_equal 'accdf444-5628-451d-bf3e-cf909ad72756', @host1.insights.uuid
79
- assert_equal 'accdf444-5628-451d-bf3e-cf909ad72757', @host2.insights.uuid
80
83
  end
81
84
 
82
85
  test 'Hits ignoring non-existent hosts' do
@@ -85,7 +88,7 @@ class InsightsFullSyncTest < ActiveJob::TestCase
85
88
  {
86
89
  "hostname": "#{@host1.name}_non_existent",
87
90
  "rhel_version": "7.5",
88
- "uuid": "accdf444-5628-451d-bf3e-cf909ad72756",
91
+ "uuid": "accdf444-5628-451d-bf3e-cf909ad00000",
89
92
  "last_seen": "2019-11-22T08:41:42.447244Z",
90
93
  "title": "New Ansible Engine packages are inaccessible when dedicated Ansible repo is not enabled",
91
94
  "solution_url": "",
@@ -98,6 +101,7 @@ class InsightsFullSyncTest < ActiveJob::TestCase
98
101
  HITS_JSON
99
102
  hits = JSON.parse(hits_json)
100
103
 
104
+ ForemanTasks.stubs(:sync_task)
101
105
  InsightsCloud::Async::InsightsFullSync.any_instance.expects(:query_insights_hits).returns(hits)
102
106
 
103
107
  InsightsCloud::Async::InsightsFullSync.perform_now()
@@ -105,7 +109,7 @@ class InsightsFullSyncTest < ActiveJob::TestCase
105
109
  @host1.reload
106
110
  @host2.reload
107
111
 
108
- assert_nil @host1.insights
109
- assert_nil @host2.insights
112
+ assert_equal 0, @host1.insights.hits_count
113
+ assert_equal 0, @host2.insights.hits_count
110
114
  end
111
115
  end