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.
- checksums.yaml +4 -4
- data/app/controllers/foreman_inventory_upload/cloud_status_controller.rb +26 -0
- data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +10 -4
- data/app/controllers/insights_cloud/hits_controller.rb +0 -1
- data/app/services/foreman_rh_cloud/cloud_ping_service.rb +83 -0
- data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +1 -1
- data/config/Gemfile.lock.gh_test +0 -8
- data/config/rh_cert-api_chain.pem +74 -0
- data/config/routes.rb +2 -0
- data/lib/foreman_inventory_upload/generators/queries.rb +0 -16
- data/lib/foreman_rh_cloud.rb +4 -0
- data/lib/foreman_rh_cloud/engine.rb +0 -1
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/lib/insights_cloud.rb +4 -0
- data/lib/tasks/rh_cloud_inventory.rake +2 -9
- data/package.json +2 -2
- data/test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb +4 -0
- data/test/controllers/inventory_upload/cloud_status_controller_test.rb +44 -0
- data/test/test_plugin_helper.rb +53 -0
- data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +3 -34
- data/test/unit/services/foreman_rh_cloud/cloud_status_service_test.rb +66 -0
- data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.scss +0 -4
- data/webpack/ForemanInventoryUpload/Components/PageHeader/PageTitle.js +12 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageTitle.test.js.snap +10 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/CloudPingModal/index.js +144 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/CloudPingModal/index.scss +5 -0
- data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +2 -0
- data/webpack/InsightsCloudSync/Components/InsightsHeader/InsightsHeader.scss +5 -1
- data/webpack/InsightsCloudSync/Components/InsightsHeader/index.js +6 -4
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +9 -5
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +6 -6
- data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +0 -14
- data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTable.js +5 -24
- data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableConstants.js +11 -4
- data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableSelectors.js +0 -3
- data/webpack/InsightsCloudSync/Components/InsightsTable/Pagination.js +51 -0
- data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +3 -68
- data/webpack/InsightsCloudSync/Components/InsightsTable/table.scss +10 -0
- data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.js +11 -10
- data/webpack/InsightsCloudSync/Components/RemediationModal/index.js +0 -2
- data/webpack/InsightsCloudSync/Components/ToolbarDropdown.js +32 -0
- data/webpack/InsightsCloudSync/Components/__tests__/__snapshots__/InsightsHeader.test.js.snap +5 -4
- data/webpack/InsightsCloudSync/InsightsCloudSync.js +17 -13
- data/webpack/InsightsCloudSync/InsightsCloudSync.scss +82 -2
- data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +15 -6
- data/webpack/common/Switcher/SwitcherPF4.js +1 -1
- data/webpack/common/Switcher/SwitcherPF4.scss +6 -7
- data/webpack/common/Switcher/__tests__/__snapshots__/SwitcherPF4.test.js.snap +1 -1
- metadata +13 -23
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +0 -1
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +0 -45
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +0 -17
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +0 -38
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +0 -1
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +0 -3
- data/webpack/InsightsCloudSync/Components/RemediationModal/RemediateButton.js +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf14938ab96483d5b90b699ad095664ccda999db645f3d0e4b868b8e6066f268
|
4
|
+
data.tar.gz: 90062d9c4bf632a9d856d17e16639d6920e6a9b9d0bbad1334202041122fd19f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
57
|
-
|
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:
|
70
|
+
ssl_ca_file: ForemanRhCloud.legacy_insights_ca,
|
71
71
|
}
|
72
72
|
end
|
73
73
|
end
|
data/config/Gemfile.lock.gh_test
CHANGED
@@ -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
@@ -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
|
data/lib/foreman_rh_cloud.rb
CHANGED
@@ -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
|
data/lib/insights_cloud.rb
CHANGED
@@ -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
|
33
|
-
puts "Must specify
|
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
@@ -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
|
data/test/test_plugin_helper.rb
CHANGED
@@ -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
|