def test_payload_upload(op, post, c, _legacy_upload_archive): ''' Ensure a payload upload occurs with the right URL and params ''' conf = InsightsConfig(legacy_upload=False) c = InsightsConnection(conf) c.upload_archive('testp', 'testct', None) post.assert_called_with( c.base_url + '/ingress/v1/upload', files={ 'file': ( 'testp', ANY, 'testct' ), # ANY = return call from mocked open(), acts as filepointer here 'metadata': json.dumps({ 'test': 'facts', 'branch_info': { 'remote_branch': -1, 'remote_leaf': -1 }, 'satellite_id': -1, }) }, headers={}) _legacy_upload_archive.assert_not_called()
def test_registration_check_ok_reg(get_proxies, _init_session, _): ''' Request completed OK, registered Returns True ''' config = Mock(legacy_upload=False, base_url='example.com') conn = InsightsConnection(config) res = requests.Response() res._content = json.dumps({ "count": 1, "page": 1, "per_page": 50, "results": [{ 'insights_id': 'xxxxxx', 'id': 'yyyyyy' }], "total": 1 }) res.status_code = 200 conn.get = MagicMock(return_value=res) assert conn.api_registration_check()
def test_legacy_upload_func(_legacy_upload_archive): ''' Ensure the _legacy_upload_archive path is used ''' conf = InsightsConfig() c = InsightsConnection(conf) c.upload_archive('testp', 'testct', None) _legacy_upload_archive.assert_called_with('testp', None)
def test_registration_check_conn_error(get_proxies, _init_session, _): ''' Connection error Returns None ''' config = Mock(legacy_upload=False, base_url='example.com') conn = InsightsConnection(config) conn.session.get.side_effect = requests.ConnectionError() assert conn.api_registration_check() is None
def test_response_success(get_proxies, post, get_canonical_facts): """ If a CREATED status code is received, the check-in was successful. """ config = Mock(base_url="www.example.com") connection = InsightsConnection(config) result = connection.checkin() assert result is True
def test_set_display_name(): conf = InsightsConfig() c = InsightsConnection(conf) c.session.status_code = 200 assert c.set_display_name('GO STICK YOUR HEAD IN A PIG') c.session.status_code = 404 assert not c.set_display_name('GO STICK YOUR HEAD IN A PIG') c.session.status_code = 500 c.session.text = 'oops' assert not c.set_display_name('GO STICK YOUR HEAD IN A PIG')
def test_get_diagnosis(): conf = InsightsConfig() c = InsightsConnection(conf) c.session.status_code = 200 assert c.get_diagnosis() == {'big_dumb_error': 'you_done_goofed'} c.session.status_code = 404 assert c.get_diagnosis() is None c.session.status_code = 500 c.session.text = 'oops' assert c.get_diagnosis() is None
def test_support_diag_dump_offline(test_connection, registration_check, InsightsConnection): ''' Check registration when doing --support ''' support = InsightsSupport(InsightsConfig(offline=True)) support.collect_support_info() InsightsConnection.assert_not_called() registration_check.assert_not_called() test_connection.assert_not_called()
def test_registration_check_legacy_registered(_, __): ''' Ensure that connection function is called and data processed. ''' config = Mock(base_url=None, legacy_upload=True) conn = InsightsConnection(config) conn.api_registration_check = Mock(return_value=True) check = registration_check(conn) assert isinstance(check, dict) assert check['status'] is True
def test_get_diagnosis_with_id(): conf = InsightsConfig() c = InsightsConnection(conf) c.session.status_code = 200 assert c.get_diagnosis(TEST_REMEDIATION_ID) == {'specific_dumb_error': 'stop_goofin'} c.session.status_code = 404 assert c.get_diagnosis() is None c.session.status_code = 500 c.session.text = 'oops' assert c.get_diagnosis() is None
def test_request_unknown_exception(get_proxies, post, get_canonical_facts): """ If an unknown exception occurs, the call crashes. """ config = Mock(base_url="www.example.com") connection = InsightsConnection(config) expected_exception = type(post.side_effect) with raises(expected_exception): connection.checkin()
def test_get_diagnosis_success(get): ''' Verify that fetching a diagnosis without an ID succeeds and returns a dict when HTTP response is valid ''' conf = InsightsConfig() c = InsightsConnection(conf) get.return_value = MockResponse(status_code=200, text="OK", content="{\"test\": \"test\"}") assert c.get_diagnosis() == {"test": "test"}
def test_payload_upload(op, session): ''' Ensure a payload upload occurs with the right URL and params ''' conf = InsightsConfig(legacy_upload=False) c = InsightsConnection(conf) c.upload_archive('testp', 'testct', None) c.session.post.assert_called_with( 'https://' + c.config.base_url + '/platform/upload/api/v1/upload', files={'upload': ('testp', ANY, 'testct')}, # ANY = return call from mocked open(), acts as filepointer here headers={})
def test_response_failure(get_proxies, post, get_canonical_facts, status_code): """ If an unexpected status code is received, the check-in failed and an exception is raised. """ post.return_value.status_code = status_code config = Mock(base_url="www.example.com") connection = InsightsConnection(config) with raises(Exception): connection.checkin()
def test_legacy_upload(op, session): ''' Ensure an Insights collected tar upload to legacy occurs with the right URL and params ''' conf = InsightsConfig() c = InsightsConnection(conf) c.upload_archive('testp', 'testct', None) c.session.post.assert_called_with( 'https://' + c.config.base_url + '/uploads/XXXXXXXX', files={'file': ('testp', ANY, 'application/gzip')}, # ANY = return call from mocked open(), acts as filepointer here headers={'x-rh-collection-time': 'None'})
def test_request(get_proxies, init_session): """ The request to get branch info is issued. """ config = Mock(base_url="www.example.com", branch_info_url="https://www.example.com/branch_info") connection = InsightsConnection(config) connection.get = MagicMock() connection.get_branch_info() connection.get.assert_called_once_with(config.branch_info_url)
def test_request(get_proxies, init_session): """ The request to get branch info is issued with correct timeout set. """ config = Mock(base_url="www.example.com", branch_info_url="https://www.example.com/branch_info") connection = InsightsConnection(config) connection.branch_info() init_session.return_value.get.assert_called_once_with( config.branch_info_url, timeout=config.http_timeout)
def test_registration_check_registered(write_unregistered_file, write_registered_file, _, __): ''' Ensure that connection function is called and files are written. ''' config = Mock(base_url=None, legacy_upload=False) conn = InsightsConnection(config) conn.api_registration_check = Mock(return_value=True) assert registration_check(conn) is True conn.api_registration_check.assert_called_once() write_registered_file.assert_called_once() write_unregistered_file.assert_not_called()
def test_request_http_failure(get_proxies, post, get_canonical_facts, exception): """ If the checkin-request fails, None is returned. """ post.side_effect = exception config = Mock(base_url="www.example.com") connection = InsightsConnection(config) result = connection.checkin() assert result is None
def test_archive_too_big(largest_archive_file): config = Mock(base_url="www.example.com", proxy=None) connection = InsightsConnection(config) with patch("insights.client.connection.os.stat", **{"return_value.st_size": 104857600}): with patch('insights.client.connection.logger.info') as mock_logger: connection._archive_too_big("archive_file") largest_archive_file.assert_called_once_with("archive_file") assert mock_logger.call_count == 3 assert [ "insights.spec-big" in args[0][0] for args in mock_logger.call_args_list ]
def test_registration_check_conn_error(test_connection, get_proxies, _init_session, _): ''' Can't connect, run connection test Returns False ''' config = Mock(legacy_upload=True, base_url='example.com') conn = InsightsConnection(config) conn.get = MagicMock() conn.get.side_effect = requests.ConnectionError() assert conn.api_registration_check() is False test_connection.assert_called_once()
def test_registration_check_ok_reg(get_proxies, _init_session, _): ''' Request completed OK, registered Returns True ''' config = Mock(legacy_upload=True, base_url='example.com') conn = InsightsConnection(config) res = requests.Response() res._content = json.dumps({'unregistered_at': None}) res.status_code = 200 conn.get = MagicMock(return_value=res) assert conn.api_registration_check()
def test_registration_check_parse_error(get_proxies, _init_session, _): ''' Can't parse response Returns None ''' config = Mock(legacy_upload=False, base_url='example.com') conn = InsightsConnection(config) res = requests.Response() res._content = 'zSDFasfghsRGH' res.status_code = 200 conn.get = MagicMock(return_value=res) assert conn.api_registration_check() is None
def test_registration_check_ok_reg_then_unreg(get_proxies, _init_session, _): ''' Request completed OK, was once registered but has been unregistered Returns the date it was unregistered ''' config = Mock(legacy_upload=True, base_url='example.com') conn = InsightsConnection(config) res = requests.Response() res._content = json.dumps({'unregistered_at': '2019-04-10'}) res.status_code = 200 conn.get = MagicMock(return_value=res) assert conn.api_registration_check() == '2019-04-10'
def test_registration_check_bad_res(get_proxies, _init_session, _): ''' Failure HTTP response Returns None ''' config = Mock(legacy_upload=False, base_url='example.com') conn = InsightsConnection(config) res = requests.Response() res._content = 'wakannai' res.status_code = 500 conn.get = MagicMock(return_value=res) assert conn.api_registration_check() is None
def test_insights_id_request(get_proxies, init_session, get_canonical_facts, generate_machine_id): """ A POST requests to the check-in endpoint is issued with correct headers and body containing only an Insights ID if Canonical Facts collection fails. """ config = Mock(base_url="www.example.com") connection = InsightsConnection(config) connection.checkin() expected_url = connection.inventory_url + "/hosts/checkin" expected_headers = {"Content-Type": "application/json"} expected_data = {"insights_id": generate_machine_id.return_value} init_session.return_value.post.assert_called_once_with( expected_url, headers=expected_headers, data=dumps(expected_data))
def aws_main(config): ''' Process AWS entitlements with Hydra ''' if config.authmethod != 'BASIC': logger.error('AWS entitlement is only available when BASIC auth is used.\n' 'Set auto_config=False and authmethod=BASIC in %s.', config.conf) return False # workaround for a workaround # the hydra API doesn't accept the legacy cert # and legacy_upload=False currently just # redirects to the classic API with /platform added # so if doing AWS entitlement, use cert_verify=True config.cert_verify = True conn = InsightsConnection(config) bundle = get_aws_identity(conn) if not bundle: return False succ = post_to_hydra(conn, bundle) if not succ: return False # register with insights if this option # wasn't specified if not config.portal_access_no_insights: enable_delayed_registration(config) return True
def test_inventory_url_from_base_url(get_proxies, init_session): """ Inventory URL is composed correctly from the given base URL. """ config = Mock(base_url="www.example.com", insecure_connection=False) connection = InsightsConnection(config) assert connection.inventory_url == "https://www.example.com/inventory/v1"
def test_canonical_facts_request(get_proxies, post, get_canonical_facts): """ A POST requests to the check-in endpoint is issued with correct headers and body containing Canonical Facts. """ config = Mock(base_url="www.example.com") connection = InsightsConnection(config) connection.checkin() expected_url = connection.inventory_url + "/hosts/checkin" expected_headers = {"Content-Type": "application/json"} expected_data = get_canonical_facts.return_value post.assert_called_once_with(expected_url, headers=expected_headers, data=dumps(expected_data))
def test_branch_info_url_guess_platform(get_proxies, init_session): """ Satellite branch info URL should be the same on platform as on legacy """ config = Mock(base_url='sat.test.com:443/redhat_access/r/insights', upload_url=None, legacy_upload=False, branch_info_url=None) connection = InsightsConnection(config) assert connection.branch_info_url == 'https://sat.test.com:443/redhat_access/r/insights/v1/branch_info'