foreman/test/controllers/api/v2/config_reports_controller_test.rb @ 9d43fc71
e8d6d2d6 | Shlomi Zadok | require 'test_helper'
|
|
ea98080f | Dominic Cleal | require 'controllers/shared/report_host_permissions_test'
|
|
e8d6d2d6 | Shlomi Zadok | ||
class Api::V2::ConfigReportsControllerTest < ActionController::TestCase
|
|||
include ::ReportHostPermissionsTest
|
|||
describe "Non Admin User" do
|
|||
def setup
|
|||
68388bc2 | Michael Moll | User.current = users(:one) # use an unprivileged user, not apiadmin
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
def create_a_puppet_transaction_report
|
|||
ea98080f | Dominic Cleal | @log ||= read_json_fixture('reports/empty.json')
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
def test_create_valid
|
|||
9d43fc71 | Michael Moll | User.current = nil
|
|
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }, session: set_session_user
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
end
|
|||
def test_create_invalid
|
|||
9d43fc71 | Michael Moll | User.current = nil
|
|
d041d4bb | Dominic Cleal | post :create, params: { :config_report => ["not a hash", "throw an error"] }, session: set_session_user
|
|
35c14172 | Ivan Necas | assert_response :unprocessable_entity
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
def test_create_duplicate
|
|||
9d43fc71 | Michael Moll | User.current = nil
|
|
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }, session: set_session_user
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }, session: set_session_user
|
|
35c14172 | Ivan Necas | assert_response :unprocessable_entity
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'when ":restrict_registered_smart_proxies" is false, HTTP requests should be able to create a report' do
|
|||
Setting[:restrict_registered_smart_proxies] = false
|
|||
SETTINGS[:require_ssl] = false
|
|||
Resolv.any_instance.stubs(:getnames).returns(['else.where'])
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
e8d6d2d6 | Shlomi Zadok | assert_nil @controller.detected_proxy
|
|
35c14172 | Ivan Necas | assert_response :created
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'hosts with a registered smart proxy on should create a report successfully' do
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = false
|
|||
b1ac29e9 | Lukas Zapletal | ProxyAPI::Features.any_instance.stubs(:features => Feature.name_map.keys)
|
|
e8d6d2d6 | Shlomi Zadok | proxy = smart_proxies(:puppetmaster)
|
|
8dcc90be | Marek Hulán | as_admin { proxy.update_attribute(:url, 'http://configreports.foreman') }
|
|
f4459c11 | David Davis | host = URI.parse(proxy.url).host
|
|
e8d6d2d6 | Shlomi Zadok | Resolv.any_instance.stubs(:getnames).returns([host])
|
|
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
e8d6d2d6 | Shlomi Zadok | assert_equal proxy, @controller.detected_proxy
|
|
35c14172 | Ivan Necas | assert_response :created
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'hosts without a registered smart proxy on should not be able to create a report' do
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = false
|
|||
Resolv.any_instance.stubs(:getnames).returns(['another.host'])
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
5f606e11 | Daniel Lobato Garcia | assert_response :forbidden
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'hosts with a registered smart proxy and SSL cert should create a report successfully' do
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = true
|
|||
@request.env['HTTPS'] = 'on'
|
|||
@request.env['SSL_CLIENT_S_DN'] = 'CN=else.where'
|
|||
@request.env['SSL_CLIENT_VERIFY'] = 'SUCCESS'
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
35c14172 | Ivan Necas | assert_response :created
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'hosts without a registered smart proxy but with an SSL cert should not be able to create a report' do
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = true
|
|||
@request.env['HTTPS'] = 'on'
|
|||
@request.env['SSL_CLIENT_S_DN'] = 'CN=another.host'
|
|||
@request.env['SSL_CLIENT_VERIFY'] = 'SUCCESS'
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
5f606e11 | Daniel Lobato Garcia | assert_response :forbidden
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'hosts with an unverified SSL cert should not be able to create a report' do
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = true
|
|||
@request.env['HTTPS'] = 'on'
|
|||
@request.env['SSL_CLIENT_S_DN'] = 'CN=else.where'
|
|||
@request.env['SSL_CLIENT_VERIFY'] = 'FAILED'
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
5f606e11 | Daniel Lobato Garcia | assert_response :forbidden
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'when "require_ssl_smart_proxies" and "require_ssl" are true, HTTP requests should not be able to create a report' do
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = true
|
|||
SETTINGS[:require_ssl] = true
|
|||
Resolv.any_instance.stubs(:getnames).returns(['else.where'])
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
5f606e11 | Daniel Lobato Garcia | assert_response :forbidden
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test 'when "require_ssl_smart_proxies" is true and "require_ssl" is false, HTTP requests should be able to create reports' do
|
|||
# since require_ssl_smart_proxies is only applicable to HTTPS connections, both should be set
|
|||
Setting[:restrict_registered_smart_proxies] = true
|
|||
Setting[:require_ssl_smart_proxies] = true
|
|||
SETTINGS[:require_ssl] = false
|
|||
Resolv.any_instance.stubs(:getnames).returns(['else.where'])
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :config_report => create_a_puppet_transaction_report }
|
|
35c14172 | Ivan Necas | assert_response :created
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
end
|
|||
test "should get index" do
|
|||
8c6bc83e | Marek Hulan | FactoryBot.create(:config_report)
|
|
d041d4bb | Dominic Cleal | get :index
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
assert_not_nil assigns(:config_reports)
|
|||
reports = ActiveSupport::JSON.decode(@response.body)
|
|||
assert !reports['results'].empty?
|
|||
end
|
|||
test "should show individual record" do
|
|||
8c6bc83e | Marek Hulan | report = FactoryBot.create(:config_report)
|
|
d041d4bb | Dominic Cleal | get :show, params: { :id => report.to_param }
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
show_response = ActiveSupport::JSON.decode(@response.body)
|
|||
assert !show_response.empty?
|
|||
end
|
|||
test "should destroy report" do
|
|||
8c6bc83e | Marek Hulan | report = FactoryBot.create(:config_report)
|
|
e8d6d2d6 | Shlomi Zadok | assert_difference('ConfigReport.count', -1) do
|
|
d041d4bb | Dominic Cleal | delete :destroy, params: { :id => report.to_param }
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
assert_response :success
|
|||
5f606e11 | Daniel Lobato Garcia | refute Report.unscoped.find_by_id(report.id)
|
|
e8d6d2d6 | Shlomi Zadok | end
|
|
test "should get reports for given host only" do
|
|||
8c6bc83e | Marek Hulan | report = FactoryBot.create(:config_report)
|
|
d041d4bb | Dominic Cleal | get :index, params: { :host_id => report.host.to_param }
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
assert_not_nil assigns(:config_reports)
|
|||
reports = ActiveSupport::JSON.decode(@response.body)
|
|||
assert !reports['results'].empty?
|
|||
assert_equal 1, reports['results'].count
|
|||
end
|
|||
test "should return empty result for host with no reports" do
|
|||
8c6bc83e | Marek Hulan | host = FactoryBot.create(:host)
|
|
d041d4bb | Dominic Cleal | get :index, params: { :host_id => host.to_param }
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
assert_not_nil assigns(:config_reports)
|
|||
reports = ActiveSupport::JSON.decode(@response.body)
|
|||
assert reports['results'].empty?
|
|||
assert_equal 0, reports['results'].count
|
|||
end
|
|||
test "should get last report" do
|
|||
8c6bc83e | Marek Hulan | reports = FactoryBot.create_list(:config_report, 5)
|
|
d041d4bb | Dominic Cleal | get :last, params: set_session_user
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
assert_not_nil assigns(:config_report)
|
|||
report = ActiveSupport::JSON.decode(@response.body)
|
|||
assert !report.empty?
|
|||
assert_equal reports.last, ConfigReport.find(report['id'])
|
|||
end
|
|||
test "should get last report for given host only" do
|
|||
8c6bc83e | Marek Hulan | main_report = FactoryBot.create(:config_report)
|
|
FactoryBot.create_list(:config_report, 5)
|
|||
d041d4bb | Dominic Cleal | get :last, params: { :host_id => main_report.host.to_param }, session: set_session_user
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :success
|
|
assert_not_nil assigns(:config_report)
|
|||
report = ActiveSupport::JSON.decode(@response.body)
|
|||
assert !report.empty?
|
|||
assert_equal main_report, Report.find(report['id'])
|
|||
end
|
|||
test "should give error if no last report for given host" do
|
|||
8c6bc83e | Marek Hulan | host = FactoryBot.create(:host)
|
|
d041d4bb | Dominic Cleal | get :last, params: { :host_id => host.to_param }
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :not_found
|
|
end
|
|||
test 'cannot view the last report without hosts view permission' do
|
|||
8c6bc83e | Marek Hulan | report = FactoryBot.create(:report)
|
|
8dcc90be | Marek Hulán | setup_user('view', 'config_reports')
|
|
d041d4bb | Dominic Cleal | get :last, params: { :host_id => report.host.id }, session: set_session_user.merge(:user => User.current.id)
|
|
e8d6d2d6 | Shlomi Zadok | assert_response :not_found
|
|
end
|
|||
end
|