Example #1
0
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()
Example #3
0
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
Example #5
0
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
Example #6
0
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
Example #11
0
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"}
Example #13
0
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={})
Example #14
0
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()
Example #15
0
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()
Example #19
0
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
Example #20
0
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
            ]
Example #21
0
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()
Example #22
0
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
Example #24
0
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
Example #26
0
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))
Example #27
0
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
Example #28
0
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"
Example #29
0
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))
Example #30
0
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'