Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: check status created a machine-id file #3965

Merged
merged 3 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions insights/client/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from urllib.parse import quote
from .utilities import (determine_hostname,
generate_machine_id,
machine_id_exists,
write_unregistered_file,
write_registered_file,
os_release_info,
Expand Down Expand Up @@ -622,6 +623,8 @@ def _legacy_api_registration_check(self):
string system is unregistered
'''
logger.debug('Checking registration status...')
if not machine_id_exists():
return None
machine_id = generate_machine_id()
try:
url = self.api_url + '/v1/systems/' + machine_id
Expand Down Expand Up @@ -671,6 +674,9 @@ def _fetch_system_by_machine_id(self):
False system does not exist in inventory
None error connection or parsing response
'''

if not machine_id_exists():
return False
machine_id = generate_machine_id()
try:
# [circus music]
Expand Down
8 changes: 7 additions & 1 deletion insights/client/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ def generate_machine_id(new=False,
machine_id = str(uuid.uuid4())
logger.debug("Creating %s", destination_file)
write_to_disk(destination_file, content=machine_id)

try:
return str(uuid.UUID(str(machine_id).strip(), version=4))
except ValueError as e:
Expand All @@ -129,6 +128,13 @@ def generate_machine_id(new=False,
sys.exit(constants.sig_kill_bad)


def machine_id_exists(destination_file=constants.machine_id_file):
"""
Get the machine-id or None if /etc/insights-client/machine-id it does not exists
"""
return os.path.isfile(destination_file)


def _expand_paths(path):
"""
Expand wildcarded paths
Expand Down
16 changes: 10 additions & 6 deletions insights/tests/client/connection/test_LEGACY_reg_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_ok_reg(get_proxies, _init_session, _):
def test_registration_check_ok_reg(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Request completed OK, registered
Returns True
Expand All @@ -24,9 +25,10 @@ def test_registration_check_ok_reg(get_proxies, _init_session, _):


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_ok_reg_then_unreg(get_proxies, _init_session, _):
def test_registration_check_ok_reg_then_unreg(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Request completed OK, was once registered but has been unregistered
Returns the date it was unregistered
Expand All @@ -42,10 +44,10 @@ def test_registration_check_ok_reg_then_unreg(get_proxies, _init_session, _):
assert conn.api_registration_check() == '2019-04-10'


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_ok_unreg(get_proxies, _init_session, _):
def test_registration_check_ok_unreg(get_proxies, _init_session, _machine_id_exists):
'''
Request completed OK, has never been registered
Returns None
Expand All @@ -62,9 +64,10 @@ def test_registration_check_ok_unreg(get_proxies, _init_session, _):


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_bad_res(get_proxies, _init_session, _):
def test_registration_check_bad_res(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Can't parse response
Returns False
Expand All @@ -81,10 +84,11 @@ def test_registration_check_bad_res(get_proxies, _init_session, _):


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.test_connection")
def test_registration_check_conn_error(test_connection, get_proxies, _init_session, _):
def test_registration_check_conn_error(test_connection, get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Can't connect, run connection test
Returns False
Expand Down
16 changes: 10 additions & 6 deletions insights/tests/client/connection/test_reg_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_ok_reg(get_proxies, _init_session, _):
def test_registration_check_ok_reg(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Request completed OK, registered
Returns True
Expand Down Expand Up @@ -35,10 +36,10 @@ def test_registration_check_ok_reg(get_proxies, _init_session, _):
assert conn.api_registration_check()


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=False)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_ok_unreg(get_proxies, _init_session, _):
def test_registration_check_ok_unreg(get_proxies, _init_session, _machine_id_exists):
'''
Request completed OK, has not been registered
Returns False
Expand All @@ -62,9 +63,10 @@ def test_registration_check_ok_unreg(get_proxies, _init_session, _):


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_parse_error(get_proxies, _init_session, _):
def test_registration_check_parse_error(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Can't parse response
Returns None
Expand All @@ -81,9 +83,10 @@ def test_registration_check_parse_error(get_proxies, _init_session, _):


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_bad_res(get_proxies, _init_session, _):
def test_registration_check_bad_res(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Failure HTTP response
Returns None
Expand All @@ -100,9 +103,10 @@ def test_registration_check_bad_res(get_proxies, _init_session, _):


@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
def test_registration_check_conn_error(get_proxies, _init_session, _):
def test_registration_check_conn_error(get_proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Connection error
Returns None
Expand Down
34 changes: 22 additions & 12 deletions insights/tests/client/support/test_collect_support_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,18 @@ def test_registration_check_registered_unreach(_, __):
conn.api_registration_check.assert_called_once()


@patch('insights.client.connection.generate_machine_id', return_value="xxxx-xxx-xxxx-xxx")
@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.get", return_value=Mock(status_code=404, content='{"detail": "System with insights_id ID not found"}'))
@patch('insights.client.support.write_registered_file')
@patch('insights.client.support.write_unregistered_file')
@patch('insights.client.support.write_to_disk')
def test_registration_check_legacy_unregistered_good_json(write_to_disk, write_unregistered_file, write_registered_file, _geturl, __, ___, _generate_machine_id):
def test_registration_check_legacy_unregistered_good_json(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
In this test insights-client has a machine-id file but is not registered in server,
it checks if insights-client write the unregistered files when it notices is not registered.
Ensure that connection function is called and data processed.
When the system is not registered the server sends a 404 error with a json content.
Check that when the client get this response the registered file and the machine-id files
Expand All @@ -136,14 +139,15 @@ def test_registration_check_legacy_unregistered_good_json(write_to_disk, write_u
write_to_disk.assert_called_once()


@patch('insights.client.connection.generate_machine_id', return_value="xxxx-xxx-xxxx-xxx")
@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.get", return_value=Mock(status_code=404, content='{Page Not Found}'))
@patch('insights.client.support.write_registered_file')
@patch('insights.client.support.write_unregistered_file')
@patch('insights.client.support.write_to_disk')
def test_registration_check_legacy_unregistered_bad_json(write_to_disk, write_unregistered_file, write_registered_file, _geturl, __, ___, _generate_machine_id):
def test_registration_check_legacy_unregistered_bad_json(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
Ensure that connection function is called and data processed.
Check a 404 from a forward that doesn't contain a json a content.
Expand All @@ -159,15 +163,18 @@ def test_registration_check_legacy_unregistered_bad_json(write_to_disk, write_un
write_to_disk.assert_not_called()


@patch('insights.client.connection.generate_machine_id', return_value="xxxx-xxx-xxxx-xxx")
@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.get", return_value=Mock(status_code=200, content='{"unregistered_at": "2019-04-10"}'))
@patch('insights.client.support.write_registered_file')
@patch('insights.client.support.write_unregistered_file')
@patch('insights.client.support.write_to_disk')
def test_registration_check_legacy_registered_then_unregistered(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _, __, _generate_machine_id):
def test_registration_check_legacy_registered_then_unregistered(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _proxies, _init_session, _machine_id_exists, _generate_machine_id):
'''
This test checks if insights-client removes the registration file when it notices it is not
registered through the API but has a machine-id file.
Ensure that connection function is called and data processed.
Legacy version responded with the unregistered_at as a json parameter.
Check that when the client get this response the registered file and the machine-id files
Expand All @@ -182,13 +189,14 @@ def test_registration_check_legacy_registered_then_unregistered(write_to_disk, w
write_unregistered_file.assert_called_once()


@patch('insights.client.connection.generate_machine_id', return_value="xxxx-xxx-xxxx-xxx")
@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.get", return_value=Mock(status_code=200, content='{"unregistered_at": null}'))
@patch('insights.client.support.write_registered_file')
@patch('insights.client.support.write_unregistered_file')
def test_registration_check_legacy_registered(write_unregistered_file, write_registered_file, _geturl, _proxy, _session, _generate_machine_id):
def test_registration_check_legacy_registered(write_unregistered_file, write_registered_file, _geturl, _proxy, _session, _machine_id_exists, _generate_machine_id):
'''
Ensure that connection function is called and data processed.
When the systems is registered it get a 200 message with a json with the unregistered_at=null
Expand All @@ -204,14 +212,15 @@ def test_registration_check_legacy_registered(write_unregistered_file, write_reg
write_unregistered_file.assert_not_called()


@patch('insights.client.connection.generate_machine_id', return_value="xxxx-xxx-xxxx-xxx")
@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.get", return_value=Mock(status_code=502, content='zSDFasfghsRGH'))
@patch('insights.client.support.write_registered_file')
@patch('insights.client.support.write_unregistered_file')
@patch('insights.client.support.write_to_disk')
def test_registration_check_legacy_bad_json(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _, __, _generate_machine_id):
def test_registration_check_legacy_bad_json(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _proxy, _session, _machine_id_exists, _generate_machine_id):
'''
Ensure the function does not remove any file if a network error is encountered
'''
Expand All @@ -226,14 +235,15 @@ def test_registration_check_legacy_bad_json(write_to_disk, write_unregistered_fi
write_to_disk.assert_not_called()


@patch('insights.client.connection.generate_machine_id', return_value="xxxx-xxx-xxxx-xxx")
@patch("insights.client.connection.generate_machine_id", return_value='xxxxxx')
@patch("insights.client.connection.machine_id_exists", return_value=True)
@patch("insights.client.connection.InsightsConnection._init_session")
@patch("insights.client.connection.InsightsConnection.get_proxies")
@patch("insights.client.connection.InsightsConnection.get", return_value=Mock(status_code=502, content='{"details": "Bad gateway"}'))
@patch('insights.client.support.write_registered_file')
@patch('insights.client.support.write_unregistered_file')
@patch('insights.client.support.write_to_disk')
def test_registration_check_legacy_bad_connection(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _, __, _generate_machine_id):
def test_registration_check_legacy_bad_connection(write_to_disk, write_unregistered_file, write_registered_file, _geturl, _proxy, _session, _machine_id_exists, _generate_machine_id):
'''
Ensure the function does not remove any file if a network error is encountered
'''
Expand Down
7 changes: 5 additions & 2 deletions insights/tests/client/test_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ def test_write_to_disk():
util.write_to_disk(filename, delete=True) is None


def test_generate_machine_id():
def test_get_machine_id():
"""
Test get machine_id with generate_machine_id method, if the machine-id file exists
"""
machine_id_regex = re.match('\w{8}-\w{4}-\w{4}-\w{4}-\w{12}',
util.generate_machine_id(destination_file='/tmp/testmachineid'))
assert machine_id_regex.group(0) is not None
Expand All @@ -61,7 +64,7 @@ def test_generate_machine_id():
os.remove('/tmp/testmachineid')


def test_generate_machine_id_with_non_hyphen_id():
def test_get_machineid_with_non_hyphen_id():
content = '86f6f5fad8284730b708a2e44ba5c14a'
filename = '/tmp/testmachineid'
util.write_to_disk(filename, content=content)
Expand Down
Loading