foreman_rh_cloud 4.0.25 → 4.0.25.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_inventory_upload/cloud_status_controller.rb +26 -0
  3. data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +10 -4
  4. data/app/controllers/insights_cloud/hits_controller.rb +0 -1
  5. data/app/services/foreman_rh_cloud/cloud_ping_service.rb +83 -0
  6. data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +1 -1
  7. data/config/Gemfile.lock.gh_test +0 -8
  8. data/config/rh_cert-api_chain.pem +74 -0
  9. data/config/routes.rb +2 -0
  10. data/lib/foreman_inventory_upload/generators/queries.rb +0 -16
  11. data/lib/foreman_rh_cloud.rb +4 -0
  12. data/lib/foreman_rh_cloud/engine.rb +0 -1
  13. data/lib/foreman_rh_cloud/version.rb +1 -1
  14. data/lib/insights_cloud.rb +4 -0
  15. data/lib/tasks/rh_cloud_inventory.rake +2 -9
  16. data/package.json +2 -2
  17. data/test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb +4 -0
  18. data/test/controllers/inventory_upload/cloud_status_controller_test.rb +44 -0
  19. data/test/test_plugin_helper.rb +53 -0
  20. data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +3 -34
  21. data/test/unit/services/foreman_rh_cloud/cloud_status_service_test.rb +66 -0
  22. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.scss +0 -4
  23. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageTitle.js +12 -0
  24. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageTitle.test.js.snap +10 -0
  25. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/CloudPingModal/index.js +144 -0
  26. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/CloudPingModal/index.scss +5 -0
  27. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +2 -0
  28. data/webpack/InsightsCloudSync/Components/InsightsHeader/InsightsHeader.scss +5 -1
  29. data/webpack/InsightsCloudSync/Components/InsightsHeader/index.js +6 -4
  30. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +9 -5
  31. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +6 -6
  32. data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +0 -14
  33. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTable.js +5 -24
  34. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableConstants.js +11 -4
  35. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableSelectors.js +0 -3
  36. data/webpack/InsightsCloudSync/Components/InsightsTable/Pagination.js +51 -0
  37. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +3 -68
  38. data/webpack/InsightsCloudSync/Components/InsightsTable/table.scss +10 -0
  39. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.js +11 -10
  40. data/webpack/InsightsCloudSync/Components/RemediationModal/index.js +0 -2
  41. data/webpack/InsightsCloudSync/Components/ToolbarDropdown.js +32 -0
  42. data/webpack/InsightsCloudSync/Components/__tests__/__snapshots__/InsightsHeader.test.js.snap +5 -4
  43. data/webpack/InsightsCloudSync/InsightsCloudSync.js +17 -13
  44. data/webpack/InsightsCloudSync/InsightsCloudSync.scss +82 -2
  45. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +15 -6
  46. data/webpack/common/Switcher/SwitcherPF4.js +1 -1
  47. data/webpack/common/Switcher/SwitcherPF4.scss +6 -7
  48. data/webpack/common/Switcher/__tests__/__snapshots__/SwitcherPF4.test.js.snap +1 -1
  49. metadata +13 -23
  50. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +0 -1
  51. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +0 -45
  52. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +0 -17
  53. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +0 -38
  54. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +0 -1
  55. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +0 -3
  56. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediateButton.js +0 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ac06b57bc84d2c31a7a2e5ad8ec8874053bf4419f018c94b95192ba7281ccf4
4
- data.tar.gz: 1e8dd2dce4252a247123e0662f6b33621fadf34e3d03a008335d1902dc7d69db
3
+ metadata.gz: cf14938ab96483d5b90b699ad095664ccda999db645f3d0e4b868b8e6066f268
4
+ data.tar.gz: 90062d9c4bf632a9d856d17e16639d6920e6a9b9d0bbad1334202041122fd19f
5
5
  SHA512:
6
- metadata.gz: e7f0324f7854d483ce3c8836fcc5a70af02ed5f3f1bb64e3e1fcb68603eb4daa078b7cb7090ba4b9bcda6c4003639d5cd7265432f5d0b60b89cd5bccaf521fe3
7
- data.tar.gz: f8e8b5317c59dc110e7315ba8bf665d7bdeda836e899dc81c1c7bcecdcd81a4568b0c8ad9849e69b9f74dd4cf7127ca097f234001b1492992d677d4cd5b44939
6
+ metadata.gz: 46eb0bfffd3853da3d4d0254756469e07f6f690166e96732bcb77a027d9cf3370cbe3d3f72e59a801cf85338fd2b2a042e45dd4a74907df3b66969a1006cb8c8
7
+ data.tar.gz: 1464b0f05e778e6b0a002114175b0c0a3f95b51c78af5fecd00395c42d6cd4196dffb0362724bcc62989403500e9994afe9012552e6e0ad00f0c0fe8f2e2fc5e
@@ -0,0 +1,26 @@
1
+ module ForemanInventoryUpload
2
+ class CloudStatusController < ::ApplicationController
3
+ def index
4
+ organizations = User.current.my_organizations
5
+
6
+ ping_service = ForemanRhCloud::CloudPingService.new(organizations, logger)
7
+ ping_result = ping_service.ping
8
+ ping_result[:cert_auth] = ping_result[:cert_auth].map do |org, status_hash|
9
+ status_hash.merge(
10
+ {
11
+ org_id: org.id,
12
+ org_name: org.name,
13
+ }
14
+ )
15
+ end
16
+
17
+ render json: {
18
+ ping: ping_result,
19
+ }, status: :ok
20
+ end
21
+
22
+ def logger
23
+ Foreman::Logging.logger('app')
24
+ end
25
+ end
26
+ end
@@ -49,13 +49,19 @@ module InsightsCloud::Api
49
49
  private
50
50
 
51
51
  def ensure_telemetry_enabled_for_consumer
52
- render_message 'Telemetry is not enabled for your organization', :status => 403 unless telemetry_config
52
+ unless (config = telemetry_config(@host))
53
+ logger.debug("Rejected telemetry forwarding for host #{@host.name}, insights param is set to: #{config}")
54
+ render_message 'Telemetry is not enabled for this host', :status => 403
55
+ end
56
+ config
53
57
  end
54
58
 
55
- def telemetry_config
56
- ::RedhatAccess::TelemetryConfiguration.find_or_create_by(:organization_id => @organization.id) do |conf|
57
- conf.enable_telemetry = true
59
+ def telemetry_config(host)
60
+ param_value = nil
61
+ User.as_anonymous_admin do
62
+ param_value = host.host_param(InsightsCloud.enable_client_param)
58
63
  end
64
+ param_value
59
65
  end
60
66
 
61
67
  def cert_uuid
@@ -9,7 +9,6 @@ module InsightsCloud
9
9
  hasToken: !Setting[:rh_cloud_token].empty?,
10
10
  hits: hits.map { |hit| hit.attributes.merge(hostname: hit.host&.name, has_playbook: hit.has_playbook?) },
11
11
  itemCount: hits.count,
12
- isExperimentalMode: Setting[:lab_features],
13
12
  }, status: :ok
14
13
  end
15
14
 
@@ -0,0 +1,83 @@
1
+ require 'rest-client'
2
+
3
+ module ForemanRhCloud
4
+ class CloudPingService
5
+ class TokenPing
6
+ include ForemanRhCloud::CloudAuth
7
+
8
+ attr_accessor :logger
9
+
10
+ def initialize(logger)
11
+ @logger = logger
12
+ end
13
+
14
+ def ping
15
+ execute_cloud_request(
16
+ method: :get,
17
+ url: ForemanRhCloud.base_url + "/api/inventory/v1/hosts?per_page=1",
18
+ headers: {
19
+ content_type: :json,
20
+ }
21
+ )
22
+ rescue StandardError => ex
23
+ ex
24
+ end
25
+ end
26
+
27
+ class CertPing
28
+ include ForemanRhCloud::CloudRequest
29
+ include InsightsCloud::CandlepinCache
30
+
31
+ attr_accessor :logger
32
+
33
+ def initialize(org, logger)
34
+ @org = org
35
+ @logger = logger
36
+ end
37
+
38
+ def ping
39
+ certs = candlepin_id_cert(@org)
40
+ return StandardError.new('certificate missing') unless certs
41
+
42
+ execute_cloud_request(
43
+ method: :get,
44
+ url: ForemanRhCloud.cert_base_url + "/api/apicast-tests/ping",
45
+ headers: {
46
+ content_type: :json,
47
+ },
48
+ ssl_client_cert: OpenSSL::X509::Certificate.new(certs[:cert]),
49
+ ssl_client_key: OpenSSL::PKey::RSA.new(certs[:key])
50
+ )
51
+ rescue StandardError => ex
52
+ ex
53
+ end
54
+ end
55
+
56
+ def initialize(organizations, logger)
57
+ @organizations = organizations
58
+ @logger = logger
59
+ end
60
+
61
+ def ping
62
+ token_response = TokenPing.new(@logger).ping
63
+ {
64
+ token_auth: {
65
+ success: token_response.is_a?(RestClient::Response),
66
+ error: (token_response.is_a?(Exception) ? token_response.inspect : nil),
67
+ },
68
+ cert_auth: Hash[
69
+ @organizations.map do |org|
70
+ cert_response = CertPing.new(org, @logger).ping
71
+ [
72
+ org,
73
+ {
74
+ success: cert_response.is_a?(RestClient::Response),
75
+ error: (cert_response.is_a?(Exception) ? cert_response.inspect : nil),
76
+ },
77
+ ]
78
+ end
79
+ ],
80
+ }
81
+ end
82
+ end
83
+ end
@@ -67,7 +67,7 @@ module ForemanRhCloud
67
67
  url: ForemanRhCloud.legacy_insights_url + request_path.sub('/redhat_access/r/insights', '/r/insights'),
68
68
  ssl_client_cert: OpenSSL::X509::Certificate.new(certs[:cert]),
69
69
  ssl_client_key: OpenSSL::PKey::RSA.new(certs[:key]),
70
- ssl_ca_file: Class.new.include(RedhatAccess::Telemetry::LookUps).new.get_default_ssl_ca_file,
70
+ ssl_ca_file: ForemanRhCloud.legacy_insights_ca,
71
71
  }
72
72
  end
73
73
  end
@@ -4,7 +4,6 @@ PATH
4
4
  foreman_rh_cloud (3.0.15)
5
5
  foreman_ansible
6
6
  katello
7
- redhat_access
8
7
 
9
8
  PATH
10
9
  remote: ../katello
@@ -541,13 +540,6 @@ GEM
541
540
  rdoc (6.3.0)
542
541
  record_tag_helper (1.0.1)
543
542
  actionview (>= 5)
544
- redhat_access (2.2.18)
545
- angular-rails-templates (>= 0.0.4)
546
- foreman-tasks
547
- katello
548
- redhat_access_lib (>= 1.1.5)
549
- redhat_access_lib (1.1.5)
550
- rest-client (>= 1.6.3)
551
543
  redis (4.1.4)
552
544
  regexp_parser (1.8.2)
553
545
  representable (3.0.4)
@@ -0,0 +1,74 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
41
+ Kg6Ay0rrsi4nw1JHue2GvdjdfVOaWSWC
42
+ -----END CERTIFICATE-----
43
+ -----BEGIN CERTIFICATE-----
44
+ MIIFfTCCA2WgAwIBAgIJAJGKz8qFAAADMA0GCSqGSIb3DQEBBQUAMIGwMQswCQYD
45
+ VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExEDAOBgNVBAcMB1JhbGVp
46
+ Z2gxFjAUBgNVBAoMDVJlZCBIYXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0
47
+ d29yazEeMBwGA1UEAwwVRW50aXRsZW1lbnQgTWFzdGVyIENBMSQwIgYJKoZIhvcN
48
+ AQkBFhVjYS1zdXBwb3J0QHJlZGhhdC5jb20wHhcNMTUwNTA1MTMwMzQ4WhcNMjUw
49
+ NTAyMTMwMzQ4WjCBiTELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5PUlRIIENBUk9M
50
+ SU5BMRAwDgYDVQQHEwdSYWxlaWdoMRAwDgYDVQQKEwdSZWQgSGF0MRgwFgYDVQQL
51
+ Ew9SZWQgSGF0IE5ldHdvcmsxIzAhBgNVBAMTGmNlcnQtYXBpLmFjY2Vzcy5yZWRo
52
+ YXQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9hTNMtZMa7Kg
53
+ Jlux6pnuUinP0Rv0aiiPFr7qNHFore4loGrPlpzUvQbUByy3xm7lhf4R4qbINCls
54
+ veWg6HDidvQr174RXb5YLMXuBrYAiPWQTrRRLNuvXFHKzREghRWTv48IXTIDEo0G
55
+ fZJUO+myY2RfwqugZKic5dR6ZakHSSpQO70O6H5R0eHlKa13k4eEpG2fVY/xqFto
56
+ WkfZyEmSacZpqxp7gIjZqreLc4MFwpiVjGFrK3Jk+Px1Z6J94LTLx2SxrYzWIeUs
57
+ 5j+lceQOvpV4/pkClnRCW1pkCKTccjFKQkpNPGwdIusRXUGl9IYc20Fa/7g9iUQc
58
+ 5fXu9EAzfwIDAQABo4G+MIG7MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZA
59
+ MAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDATA5BglghkgBhvhCAQ0E
60
+ LBYqTWFuYWdlZCBieSBSZWQgSGF0IChjYS1zdXBwb3J0QHJlZGhhdC5jb20pMB0G
61
+ A1UdDgQWBBRfgCjd8aXf0U4VX8DKTVIn+paGBzAfBgNVHSMEGDAWgBSIS6ZFxEbs
62
+ j9bPpvYazyY8kMx/FzANBgkqhkiG9w0BAQUFAAOCAgEAlC+r6UEEp5BUkI0Rj2T+
63
+ 1PH7oUCaGQeQoyVbGddz/WUcBk/lMMtyCEoxU+3tTwNWmCWWjYXtjoL9MlSAC/q+
64
+ NZfBi1iq0uuSus9JI/Uu8aRhoxTK56qGRed/JNixOHEmFn891cahIPpF0exWwtYD
65
+ ThwXo7Z6PI7t8EMKdSrGTOowp58yho8xYFL/Z7JmjL55Pf85GIrdiniNZd4i178J
66
+ 07R9zsiLvdXq9mT33iJwkm+uhO+FA9d8OE3ji21pBbGUAQSWOdkemvUCsy8zANW9
67
+ fT+dBrMr5Buk7eaBBJ2PxECNiWLCRQJWmyff1O5zMT0daS2lBdEGUNhBZ0hnX13Q
68
+ kabUp0bxRrNRq+WkomP7onZhfZS6SjKm0UmwoV6o3V1ED6y7muQNRmgDpA5PcbvO
69
+ gl7OexNL4zcpyfMdAmTYf5yTRSvB42Yg5hVfuzPEnOIqupwES3mWkEHRlqbMUkHw
70
+ qIQAxIwQqZd5PdPpElQ/6j/ZT9DwW/I6zgndX2rsS0oGYcwFTkSj0/rKKkC13hk7
71
+ LchXMZu5ckdustM79U6OZIBairrJaL2OpR08un2nwIjgEGqhVFYc44UK1VpkE8mr
72
+ qvqJS6OHVlTlKcEDnhVkPS3i5qjuS/PtSq0CwH8bzYKFJayLDY/z36Zv6PdttzmU
73
+ Yb1NSDcJejHJ80pMINutyYQ=
74
+ -----END CERTIFICATE-----
data/config/routes.rb CHANGED
@@ -11,6 +11,8 @@ Rails.application.routes.draw do
11
11
  post 'cloud_connector', to: 'uploads#enable_cloud_connector'
12
12
 
13
13
  resources :tasks, only: [:create, :show]
14
+
15
+ get 'status', to: 'cloud_status#index'
14
16
  end
15
17
 
16
18
  namespace :insights_cloud do
@@ -45,26 +45,10 @@ module ForemanInventoryUpload
45
45
  )
46
46
  end
47
47
 
48
- def self.for_report(portal_user)
49
- org_ids = organizations_for_user(portal_user).pluck(:id)
50
- for_org(org_ids)
51
- end
52
-
53
48
  def self.for_org(organization_id, use_batches: true)
54
49
  base_query = for_slice(Host.unscoped.where(organization_id: organization_id))
55
50
  use_batches ? base_query.in_batches(of: ForemanInventoryUpload.slice_size) : base_query
56
51
  end
57
-
58
- def self.organizations_for_user(portal_user)
59
- Organization
60
- .joins(:telemetry_configuration)
61
- .where(
62
- redhat_access_telemetry_configurations: {
63
- portal_user: portal_user,
64
- enable_telemetry: true,
65
- }
66
- )
67
- end
68
52
  end
69
53
  end
70
54
  end
@@ -100,4 +100,8 @@ module ForemanRhCloud
100
100
  def self.foreman_host
101
101
  @foreman_host ||= ::Host.unscoped.friendly.find(ENV['SATELLITE_RH_CLOUD_FOREMAN_HOST'] || ::SmartProxy.default_capsule.name)
102
102
  end
103
+
104
+ def self.legacy_insights_ca
105
+ "#{ForemanRhCloud::Engine.root}/config/rh_cert-api_chain.pem"
106
+ end
103
107
  end
@@ -1,5 +1,4 @@
1
1
  require 'katello'
2
- require 'redhat_access'
3
2
  require 'foreman_ansible'
4
3
 
5
4
  module ForemanRhCloud
@@ -1,3 +1,3 @@
1
1
  module ForemanRhCloud
2
- VERSION = '4.0.25'.freeze
2
+ VERSION = '4.0.25.1'.freeze
3
3
  end
@@ -28,4 +28,8 @@ module InsightsCloud
28
28
  def self.remediation_rule_id(rule_id)
29
29
  "advisor:#{rule_id}"
30
30
  end
31
+
32
+ def self.enable_client_param
33
+ 'host_registration_insights'
34
+ end
31
35
  end
@@ -19,7 +19,6 @@ namespace :rh_cloud_inventory do
19
19
  end
20
20
  desc 'Generate inventory report to be sent to Red Hat cloud'
21
21
  task generate: :environment do
22
- portal_user = ENV['portal_user']
23
22
  organizations = [ENV['organization_id']]
24
23
  base_folder = ENV['target'] || Dir.pwd
25
24
 
@@ -29,18 +28,12 @@ namespace :rh_cloud_inventory do
29
28
  puts "Using #{base_folder} for the output"
30
29
  end
31
30
 
32
- if portal_user.empty? && organizations.empty?
33
- puts "Must specify either portal_user or organization_id"
31
+ if organizations.empty?
32
+ puts "Must specify organization_id"
34
33
  return
35
34
  end
36
35
 
37
36
  User.as_anonymous_admin do
38
- if portal_user
39
- puts "Generating report for all organizations associated with #{portal_user}"
40
- base_folder = File.join(base_folder, portal_user)
41
- organizations = ForemanInventoryUpload::Generators::Queries.organizations_for_user(portal_user).pluck(:id)
42
- end
43
-
44
37
  organizations.each do |organization|
45
38
  target = File.join(base_folder, ForemanInventoryUpload.facts_archive_name(organization))
46
39
  archived_report_generator = ForemanInventoryUpload::Generators::ArchivedReport.new(target, Logger.new(STDOUT))
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foreman_rh_cloud",
3
- "version": "4.0.25",
3
+ "version": "4.0.25.1",
4
4
  "description": "Inventory Upload =============",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -45,4 +45,4 @@
45
45
  "jed": "~1.1.1",
46
46
  "react-intl": "~2.8.0"
47
47
  }
48
- }
48
+ }
@@ -2,6 +2,10 @@ require 'test_plugin_helper'
2
2
 
3
3
  module InsightsCloud::Api
4
4
  class MachineTelemetriesControllerTest < ActionController::TestCase
5
+ setup do
6
+ FactoryBot.create(:common_parameter, name: InsightsCloud.enable_client_param, key_type: 'boolean', value: true)
7
+ end
8
+
5
9
  context '#forward_request' do
6
10
  setup do
7
11
  @body = 'Cloud response body'
@@ -0,0 +1,44 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class CloudStatusControllerTest < ActionController::TestCase
4
+ include MockCerts
5
+ tests ForemanInventoryUpload::CloudStatusController
6
+
7
+ test 'return ping status hash for each organization' do
8
+ organizations = FactoryBot.create_list(:organization, 2)
9
+ user = users(:admin)
10
+ User.stubs(:current).returns(user)
11
+ user.stubs(:my_organizations).returns(organizations)
12
+
13
+ ForemanRhCloud::CloudPingService::TokenPing.any_instance.expects(:execute_cloud_request).returns(
14
+ RestClient::Response.new('TEST RESPONSE')
15
+ )
16
+
17
+ setup_certs_expectation do
18
+ ForemanRhCloud::CloudPingService::CertPing.any_instance.expects(:candlepin_id_cert).with { |actual| actual.id == organizations[0].id }
19
+ end
20
+ ForemanRhCloud::CloudPingService::CertPing.any_instance.expects(:execute_cloud_request).returns(
21
+ RestClient::Response.new('TEST RESPONSE ORG 0')
22
+ )
23
+
24
+ setup_certs_expectation do
25
+ ForemanRhCloud::CloudPingService::CertPing.any_instance.expects(:candlepin_id_cert).with { |actual| actual.id == organizations[1].id }
26
+ end
27
+
28
+ ForemanRhCloud::CloudPingService::CertPing.any_instance.expects(:execute_cloud_request).returns(
29
+ RestClient::Response.new('TEST RESPONSE ORG 1')
30
+ )
31
+
32
+ get :index, session: set_session_user
33
+
34
+ assert_response :success
35
+ actual = JSON.parse(response.body)
36
+ assert_not_nil (actual_ping = actual['ping'])
37
+ assert actual_ping['token_auth']['success']
38
+ assert_nil actual_ping['token_auth']['error']
39
+ assert actual_ping['cert_auth'][0]['success']
40
+ assert_nil actual_ping['cert_auth'][0]['error']
41
+ assert actual_ping['cert_auth'][1]['success']
42
+ assert_nil actual_ping['cert_auth'][1]['error']
43
+ end
44
+ end
@@ -38,3 +38,56 @@ module KatelloLocationFix
38
38
  end
39
39
  end
40
40
  end
41
+
42
+ module MockCerts
43
+ extend ActiveSupport::Concern
44
+
45
+ def test_certificate
46
+ @test_certificate ||= "-----BEGIN CERTIFICATE-----\r\n" +
47
+ "MIIFdDCCA1ygAwIBAgIJAM5Uqykb3EAtMA0GCSqGSIb3DQEBCwUAME8xCzAJBgNV\r\n" +
48
+ "BAYTAklMMREwDwYDVQQIDAhUZWwgQXZpdjEUMBIGA1UECgwLVGhlIEZvcmVtYW4x\r\n" +
49
+ "FzAVBgNVBAMMDnRoZWZvcmVtYW4ub3JnMB4XDTE4MDMyNDEyMzYyOFoXDTI4MDMy\r\n" +
50
+ "MTEyMzYyOFowTzELMAkGA1UEBhMCSUwxETAPBgNVBAgMCFRlbCBBdml2MRQwEgYD\r\n" +
51
+ "VQQKDAtUaGUgRm9yZW1hbjEXMBUGA1UEAwwOdGhlZm9yZW1hbi5vcmcwggIiMA0G\r\n" +
52
+ "CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF04/s4h+BgHPG1HDZ/sDlYq925pkc\r\n" +
53
+ "RTVAfnE2EXDAmZ6W4Q9ueDY65MHe3ZWO5Dg72kNSP2sK9kRI7Dk5CAFOgyw1rH8t\r\n" +
54
+ "Hd1+0xp/lv6e4SvSYghxIL68vFe0ftKkm1usqejBM5ZTgKr7JCI+XSIN36F65Kde\r\n" +
55
+ "c+vxwBnayuhP04r9/aaE/709SXML4eRVYW8I3qFy9FPtUOm+bY8U2PIv5fHayqbG\r\n" +
56
+ "cL/4t3+MCtMhHJsLzdBXya+1P5t+HcKjUNlmwoUF961YAktVuEFloGd0RMRlqF3/\r\n" +
57
+ "itU3QNlXgA5QBIciE5VPr/PiqgMC3zgd5avjF4OribZ+N9AATLiQMW78il5wSfcc\r\n" +
58
+ "kQjU9ChOLrzku455vQ8KE4bc0qvpCWGfUah6MvL9JB+TQkRl/8kxl0b9ZinIvJDH\r\n" +
59
+ "ynVMb4cB/TDEjrjOfzn9mWLH0ZJqjmc2bER/G12WQxOaYLxdVwRStD3Yh6PtiFWu\r\n" +
60
+ "sXOk19UOTVkeuvGFVtvzLfEwQ1lDEo7+VBQz8FG/HBu2Hpq3IwCFrHuicikwjQJk\r\n" +
61
+ "nfturgD0rBOKEc1qWNZRCvovYOLL6ihvv5Orujsx5ZCHOAtnVNxkvIlFt2RS45LF\r\n" +
62
+ "MtPJyhAc6SjitllfUEirxprsbmeSZqrIfzcGaEhgOSnyik1WMv6bYiqPfBg8Fzjh\r\n" +
63
+ "vOCbtiDNPmvgOwIDAQABo1MwUTAdBgNVHQ4EFgQUtkAgQopsTtG9zSG3MgW2IxHD\r\n" +
64
+ "MDwwHwYDVR0jBBgwFoAUtkAgQopsTtG9zSG3MgW2IxHDMDwwDwYDVR0TAQH/BAUw\r\n" +
65
+ "AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAJq7iN+ZroRBweNhvUobxs75bLIV6tNn1\r\n" +
66
+ "MdNHDRA+hezwf+gxHZhFyaAHfTpst2/9leK5Qe5Zd6gZLr3E5/8ppQuRod72H39B\r\n" +
67
+ "vxMlG5zxDss0WMo3vZeKZbTY6QhXi/lY2IZ6OGV4feSvCsYxn27GTjjrRUSLFeHH\r\n" +
68
+ "JVemCwCDMavaE3+OIY4v2P4FcG+MjUvfOB9ahI24TWL7YgrsNVmJjCILq+EeUj0t\r\n" +
69
+ "Gde1SXVyLkqt7PoxHRJAE0BCEMJSnjxaVB329acJgeehBUxjj4CCPqtDxtbz9HEH\r\n" +
70
+ "mOKfNdaKpFor+DUeEKUWVGnr9U9xOaC+Ws+oX7MIEUCDM7p2ob4JwcjnFs1jZgHh\r\n" +
71
+ "Hwig+i7doTlc701PvKWO96fuNHK3B3/jTb1fVvSZ49O/RvY1VWODdUdxWmXGHNh3\r\n" +
72
+ "LoR8tSPEb46lC2DXGaIQumqQt8PnBG+vL1qkQa1SGTV7dJ8TTbxbv0S+sS+igkk9\r\n" +
73
+ "zsIEK8Ea3Ep935cXximz0faAAKHSA+It+xHLAyDtqy2KaAEBgGsBuuWlUfK6TaP3\r\n" +
74
+ "Gwdjct3y4yYUO45lUsUfHqX8vk/4ttW5zYeDiW+HArJz+9VUXNbEdury4kGuHgBj\r\n" +
75
+ "xHD4Bsul65+hHZ9QywKU26F1A6TLkYpQ2rk/Dx9LGICM4m4IlHjWJPFsQdtkyOor\r\n" +
76
+ "osxMtcaZZ1E=\r\n" +
77
+ "-----END CERTIFICATE-----"
78
+ end
79
+
80
+ def generate_certs_hash
81
+ {
82
+ cert: test_certificate,
83
+ key: OpenSSL::PKey::RSA.new(1024).to_pem,
84
+ }
85
+ end
86
+
87
+ def setup_certs_expectation
88
+ expectation = yield
89
+ expectation.returns(
90
+ generate_certs_hash
91
+ )
92
+ end
93
+ end