report_agentless.html

Report generated on 03-Jan-2024 at 12:06:45 by pytest-html v3.1.1

Environment

Packages {"pluggy": "0.13.0", "pytest": "7.1.2"}
Platform Linux-6.2.0-39-generic-x86_64-with-glibc2.35
Plugins {"html": "3.1.1", "metadata": "2.0.4", "testinfra": "5.0.0"}
Python 3.10.12

Summary

24 tests ran in 1826.13 seconds.

15 passed, 0 skipped, 9 failed, 0 errors, 0 expected failures, 0 unexpected passes
Tests Failed Success XFail Error
test_cluster/test_integrity_sync/test_integrity_sync.py 0 4 0 0
test_cluster/test_ruleset_sync_status/test_ruleset_sync_status.py 0 1 0 0
test_jwt_invalidation/test_change_rbac_mode.py 2 2 0 0
test_jwt_invalidation/test_change_security_resources.py 2 2 0 0
test_jwt_invalidation/test_disconnected_nodes.py 0 1 0 0
test_jwt_invalidation/test_revoke_endpoint.py 3 3 0 0
test_jwt_invalidation/test_update_password.py 2 2 0 0

Results

Result Time Test Description Duration Markers Links Tier
Failed 2024-01-03 11:06:45.135726 test_jwt_invalidation/test_change_rbac_mode.py::test_change_rbac_mode_with_endpoint[login_endpoint1] Check that all tokens are revoked when changing RBAC mode with the security endpoint. 1.42 agentless_cluster_env

Test function details

Extended Summary

Parameters

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd91330a0>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'elastic'}, 'password': 'wazuh-wui', 'user': 'wazuh-wui'}, set_default_api_conf = None, restore_default_security_settings = None

@pytest.mark.parametrize('login_endpoint', [
# User-roles based login
{},
# Auth context login
{'user': 'wazuh-wui', 'password': 'wazuh-wui', 'auth_context': {"username": "elastic"}}
])
def test_change_rbac_mode_with_endpoint(login_endpoint, set_default_api_conf, restore_default_security_settings):
"""Check that all tokens are revoked when changing RBAC mode with the security endpoint."""
# Get valid tokens
> tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}

test_jwt_invalidation/test_change_rbac_mode.py:43:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_jwt_invalidation/test_change_rbac_mode.py:43: in <dictcomp>
tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd91330a0>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:52:27 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=wazuh-wui password=wazuh-wui method=POST body="{\"username\":\"elastic\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:52:27 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
Failed 2024-01-03 11:06:45.138973 test_jwt_invalidation/test_change_rbac_mode.py::test_change_rbac_mode_manually[login_endpoint1] Check that all tokens are revoked when changing RBAC mode manually in the security.yaml . 65.94 agentless_cluster_env

Test function details

Extended Summary

Parameters

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd91330a0>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'elastic'}, 'password': 'wazuh-wui', 'user': 'wazuh-wui'}, set_default_api_conf = None, restore_default_security_settings = None

@pytest.mark.parametrize('login_endpoint', [
# Normal admin
{},
# Auth context login
{'user': 'wazuh-wui', 'password': 'wazuh-wui', 'auth_context': {"username": "elastic"}}
])
def test_change_rbac_mode_manually(login_endpoint, set_default_api_conf, restore_default_security_settings):
"""Check that all tokens are revoked when changing RBAC mode manually in the security.yaml ."""
# Get valid tokens
> tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}

test_jwt_invalidation/test_change_rbac_mode.py:70:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_jwt_invalidation/test_change_rbac_mode.py:70: in <dictcomp>
tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd91330a0>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:53:11 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=wazuh-wui password=wazuh-wui method=POST body="{\"username\":\"elastic\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:53:11 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
----------------------------Captured stdout teardown----------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:53:12 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTkyLCJleHAiOjE3MDQyODAwOTIsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AOY7IU3LCv6azWUIGI1vCcdKBky-B_EtobDuwGz0HbrIVCKbSBswaSDF2oNWuVN8KcoYV7Xhhftj50JX5RXGb2lQAHlaLfQvZ_ERb-NttMbt9h5njPLkNXyiIC1dWoci048HFTX9KZlXe2yAuYNBMaXiroXH_HG2J_peF7dScNOOJhqe'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Failed 2024-01-03 11:06:45.142302 test_jwt_invalidation/test_change_security_resources.py::test_change_user_policy_and_role[wazuh-master-wazuh-worker1-login_endpoint1] Test that the obtained token is invalid after changing a role or policy related to the user. 1.47 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='node1', type='str', desc=['Node from the cluster.'])
Parameter(name='node2', type='str', desc=['Node from the cluster.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd9133940>, host = 'wazuh-master', user = 'testing_user', password = 'Testing1*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'testing'}}, node1 = 'wazuh-master', node2 = 'wazuh-worker1', set_default_api_conf = None, create_testing_api_user = None, create_security_resources = None
set_role_to_user = None

@pytest.mark.parametrize('login_endpoint', [
# User-roles based login
{},
# Auth context login
{'auth_context': {"username": "testing"}}
])
@pytest.mark.parametrize('node1, node2', [
(test_hosts[0], test_hosts[1]),
(test_hosts[1], test_hosts[2])
])
def test_change_user_policy_and_role(login_endpoint, node1, node2, set_default_api_conf, create_testing_api_user,
create_security_resources,
set_role_to_user):
"""Test that the obtained token is invalid after changing a role or policy related to the user.

Parameters
----------
node1 : str
Node from the cluster.
node2 : str
Node from the cluster.
"""

def check_revoked_token(node, current_token):
# Check that the token was revoked
resp = host_manager.make_api_call(node, endpoint='/agents', token=current_token)
assert resp['status'] == 401, f'Token was not revoked: {resp}'

# Get token with testing user
> token = host_manager.get_api_token(node1, user=test_user, password=test_passw, **login_endpoint)

test_jwt_invalidation/test_change_security_resources.py:68:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd9133940>, host = 'wazuh-master', user = 'testing_user', password = 'Testing1*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:55:56 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=testing_user password=Testing1* method=POST body="{\"username\":\"testing\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:55:56 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
Failed 2024-01-03 11:06:45.146287 test_jwt_invalidation/test_change_security_resources.py::test_change_user_policy_and_role[wazuh-worker1-wazuh-worker2-login_endpoint1] Test that the obtained token is invalid after changing a role or policy related to the user. 68.25 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='node1', type='str', desc=['Node from the cluster.'])
Parameter(name='node2', type='str', desc=['Node from the cluster.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd9133940>, host = 'wazuh-worker1', user = 'testing_user', password = 'Testing1*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'testing'}}, node1 = 'wazuh-worker1', node2 = 'wazuh-worker2', set_default_api_conf = None, create_testing_api_user = None, create_security_resources = None
set_role_to_user = None

@pytest.mark.parametrize('login_endpoint', [
# User-roles based login
{},
# Auth context login
{'auth_context': {"username": "testing"}}
])
@pytest.mark.parametrize('node1, node2', [
(test_hosts[0], test_hosts[1]),
(test_hosts[1], test_hosts[2])
])
def test_change_user_policy_and_role(login_endpoint, node1, node2, set_default_api_conf, create_testing_api_user,
create_security_resources,
set_role_to_user):
"""Test that the obtained token is invalid after changing a role or policy related to the user.

Parameters
----------
node1 : str
Node from the cluster.
node2 : str
Node from the cluster.
"""

def check_revoked_token(node, current_token):
# Check that the token was revoked
resp = host_manager.make_api_call(node, endpoint='/agents', token=current_token)
assert resp['status'] == 401, f'Token was not revoked: {resp}'

# Get token with testing user
> token = host_manager.get_api_token(node1, user=test_user, password=test_passw, **login_endpoint)

test_jwt_invalidation/test_change_security_resources.py:68:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd9133940>, host = 'wazuh-worker1', user = 'testing_user', password = 'Testing1*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:56:13 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=testing_user password=Testing1* method=POST body="{\"username\":\"testing\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:56:13 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
----------------------------Captured stdout teardown----------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:56:14 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5Mzc0LCJleHAiOjE3MDQyODAyNzQsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AagyXBFBMp_byHtRd_37gE57BSa-9G_D-exR35nbBWZAfy2XZzKuok9LuNTkEDSw-Aq_8dtx9HUDLXPJffEr_-3tAK_kPf64OhNWPuhzLNuPNZpkjFfsIpFiRepRKr1TfOOEdSIYL3uMZU2Xbx5Sjyqgb2y6X8hO5LBGZlOgzhEurJRs'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:56:20 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzgwLCJleHAiOjE3MDQyODAyODAsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AUQ606KZ966MFqNUakbb08cW3vjL8OIfrMegkADOG-gCd6wxodw0tZVYihY1jhFvvBOFDJvXSAVxw9S2cdH4jd0lAWX61wsJhrkoZer_eftxQ4FM_7NER8ynjHZb4xgQf1D8vjX9YSIvbe6jxp2lP2rS5bW1imfGPYYgTClilbV4d30x'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Failed 2024-01-03 11:06:45.148729 test_jwt_invalidation/test_revoke_endpoint.py::test_revoke_all_tokens_with_api[wazuh-master-login_endpoint1] Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'. 1.50 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='host', type='str', desc=['Host where the test will be run.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c040>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'elastic'}, 'password': 'wazuh-wui', 'user': 'wazuh-wui'}, revoke_host = 'wazuh-master', set_default_api_conf = None

@pytest.mark.parametrize('login_endpoint', [
# User-roles based login
{},
# Auth context login
{'user': 'wazuh-wui', 'password': 'wazuh-wui', 'auth_context': {"username": "elastic"}}
])
@pytest.mark.parametrize('revoke_host', test_hosts)
def test_revoke_all_tokens_with_api(login_endpoint, revoke_host, set_default_api_conf):
"""Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'.

Parameters
----------
host : str
Host where the test will be run.
"""

def default_api_call(token_dikt, expected_code=200):
for host, token in token_dikt.items():
response = host_manager.make_api_call(host, endpoint='/agents', token=token)
assert response['status'] == expected_code, f'API call failed. Response: {response}'

# Get valid tokens
> tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}

test_jwt_invalidation/test_revoke_endpoint.py:43:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_jwt_invalidation/test_revoke_endpoint.py:43: in <dictcomp>
tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c040>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:03:06 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=wazuh-wui password=wazuh-wui method=POST body="{\"username\":\"elastic\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:03:06 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
Failed 2024-01-03 11:06:45.151828 test_jwt_invalidation/test_revoke_endpoint.py::test_revoke_all_tokens_with_api[wazuh-worker1-login_endpoint1] Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'. 1.85 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='host', type='str', desc=['Host where the test will be run.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c040>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'elastic'}, 'password': 'wazuh-wui', 'user': 'wazuh-wui'}, revoke_host = 'wazuh-worker1', set_default_api_conf = None

@pytest.mark.parametrize('login_endpoint', [
# User-roles based login
{},
# Auth context login
{'user': 'wazuh-wui', 'password': 'wazuh-wui', 'auth_context': {"username": "elastic"}}
])
@pytest.mark.parametrize('revoke_host', test_hosts)
def test_revoke_all_tokens_with_api(login_endpoint, revoke_host, set_default_api_conf):
"""Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'.

Parameters
----------
host : str
Host where the test will be run.
"""

def default_api_call(token_dikt, expected_code=200):
for host, token in token_dikt.items():
response = host_manager.make_api_call(host, endpoint='/agents', token=token)
assert response['status'] == expected_code, f'API call failed. Response: {response}'

# Get valid tokens
> tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}

test_jwt_invalidation/test_revoke_endpoint.py:43:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_jwt_invalidation/test_revoke_endpoint.py:43: in <dictcomp>
tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c040>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:03:24 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=wazuh-wui password=wazuh-wui method=POST body="{\"username\":\"elastic\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:03:24 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
Failed 2024-01-03 11:06:45.156300 test_jwt_invalidation/test_revoke_endpoint.py::test_revoke_all_tokens_with_api[wazuh-worker2-login_endpoint1] Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'. 60.79 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='host', type='str', desc=['Host where the test will be run.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c040>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'elastic'}, 'password': 'wazuh-wui', 'user': 'wazuh-wui'}, revoke_host = 'wazuh-worker2', set_default_api_conf = None

@pytest.mark.parametrize('login_endpoint', [
# User-roles based login
{},
# Auth context login
{'user': 'wazuh-wui', 'password': 'wazuh-wui', 'auth_context': {"username": "elastic"}}
])
@pytest.mark.parametrize('revoke_host', test_hosts)
def test_revoke_all_tokens_with_api(login_endpoint, revoke_host, set_default_api_conf):
"""Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'.

Parameters
----------
host : str
Host where the test will be run.
"""

def default_api_call(token_dikt, expected_code=200):
for host, token in token_dikt.items():
response = host_manager.make_api_call(host, endpoint='/agents', token=token)
assert response['status'] == expected_code, f'API call failed. Response: {response}'

# Get valid tokens
> tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}

test_jwt_invalidation/test_revoke_endpoint.py:43:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_jwt_invalidation/test_revoke_endpoint.py:43: in <dictcomp>
tokens = {host: host_manager.get_api_token(host, **login_endpoint) for host in test_hosts}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c040>, host = 'wazuh-master', user = 'wazuh-wui', password = 'wazuh-wui', auth_context = {'username': 'elastic'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:03:42 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=wazuh-wui password=wazuh-wui method=POST body="{\"username\":\"elastic\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:03:42 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
Failed 2024-01-03 11:06:45.160783 test_jwt_invalidation/test_update_password.py::test_update_password[login_endpoint2-wazuh-master-Newpass2*-Newpass1*] Test that the obtained token is invalid after updating the password from its user. 1.55 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='host', type='str', desc=['Host where the test will be run.'])
Parameter(name='old_password', type='str', desc=['Password before updating.'])
Parameter(name='new_password', type='str', desc=['New password to update to.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c2b0>, host = 'wazuh-master', user = 'testing_user', password = 'Newpass2*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'testing'}}, host = 'wazuh-master', old_password = 'Newpass2*', new_password = 'Newpass1*', set_default_api_conf = None, create_testing_api_user = None
create_security_resources = None

@pytest.mark.parametrize('login_endpoint, host, old_password, new_password', [
# User-roles based login
({}, 'wazuh-master', test_passw, 'Newpass1*'),
({}, 'wazuh-worker1', 'Newpass1*', 'Newpass2*'),
# Auth context login
({"auth_context": {"username": "testing"}}, 'wazuh-master', 'Newpass2*', 'Newpass1*'),
({"auth_context": {"username": "testing"}}, 'wazuh-worker1', 'Newpass1*', 'Newpass2*')
])
def test_update_password(login_endpoint, host, old_password, new_password, set_default_api_conf,
create_testing_api_user,
create_security_resources):
"""Test that the obtained token is invalid after updating the password from its user.

Parameters
----------
host : str
Host where the test will be run.
old_password : str
Password before updating.
new_password : str
New password to update to.
"""
# Get token
> token = host_manager.get_api_token(host, user=test_user, password=test_passw if not old_password else old_password,
**login_endpoint)

test_jwt_invalidation/test_update_password.py:49:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c2b0>, host = 'wazuh-master', user = 'testing_user', password = 'Newpass2*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:05:54 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=testing_user password=Newpass2* method=POST body="{\"username\":\"testing\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '65', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:05:54 GMT', 'elapsed': 0, 'msg': 'Status code was 400 and not [200]: HTTP Error 400: Bad Request', 'redirected': False, 'status': 400, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
Failed 2024-01-03 11:06:45.164309 test_jwt_invalidation/test_update_password.py::test_update_password[login_endpoint3-wazuh-worker1-Newpass1*-Newpass2*] Test that the obtained token is invalid after updating the password from its user. 50.11 agentless_cluster_env

Test function details

Extended Summary

Parameters

Parameter(name='host', type='str', desc=['Host where the test will be run.'])
Parameter(name='old_password', type='str', desc=['Password before updating.'])
Parameter(name='new_password', type='str', desc=['New password to update to.'])
self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c2b0>, host = 'wazuh-worker1', user = 'testing_user', password = 'Newpass1*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
> return token_response['json']['data']['token']
E KeyError: 'json'

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:233: KeyError

During handling of the above exception, another exception occurred:

login_endpoint = {'auth_context': {'username': 'testing'}}, host = 'wazuh-worker1', old_password = 'Newpass1*', new_password = 'Newpass2*', set_default_api_conf = None, create_testing_api_user = None
create_security_resources = None

@pytest.mark.parametrize('login_endpoint, host, old_password, new_password', [
# User-roles based login
({}, 'wazuh-master', test_passw, 'Newpass1*'),
({}, 'wazuh-worker1', 'Newpass1*', 'Newpass2*'),
# Auth context login
({"auth_context": {"username": "testing"}}, 'wazuh-master', 'Newpass2*', 'Newpass1*'),
({"auth_context": {"username": "testing"}}, 'wazuh-worker1', 'Newpass1*', 'Newpass2*')
])
def test_update_password(login_endpoint, host, old_password, new_password, set_default_api_conf,
create_testing_api_user,
create_security_resources):
"""Test that the obtained token is invalid after updating the password from its user.

Parameters
----------
host : str
Host where the test will be run.
old_password : str
Password before updating.
new_password : str
New password to update to.
"""
# Get token
> token = host_manager.get_api_token(host, user=test_user, password=test_passw if not old_password else old_password,
**login_endpoint)

test_jwt_invalidation/test_update_password.py:49:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <wazuh_testing.tools.system.HostManager object at 0x7ffbd916c2b0>, host = 'wazuh-worker1', user = 'testing_user', password = 'Newpass1*', auth_context = {'username': 'testing'}, port = 55000, check = False

def get_api_token(self, host, user='wazuh', password='wazuh', auth_context=None, port=55000, check=False):
"""Return an API token for the specified user.

Args:
host (str): Hostname.
user (str, optional): API username. Default `wazuh`
password (str, optional): API password. Default `wazuh`
auth_context (dict, optional): Authorization context body. Default `None`
port (int, optional): API port. Default `55000`
check (bool, optional): Ansible check mode("Dry Run"),
by default it is enabled so no changes will be applied. Default `False`

Returns:
API token (str): Usable API token.
"""
login_endpoint = '/security/user/authenticate'
login_method = 'POST'
login_body = ''
if auth_context is not None:
login_endpoint = '/security/user/authenticate/run_as'
login_body = 'body="{}"'.format(json.dumps(auth_context).replace('"', '\\"').replace(' ', ''))

try:
token_response = self.get_host(host).ansible('uri', f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check=check)
print(f"url=https://localhost:{port}{login_endpoint} "
f"user={user} password={password} "
f"method={login_method} {login_body} validate_certs=no "
f"force_basic_auth=yes",
check)
print(token_response)
return token_response['json']['data']['token']
except KeyError:
> raise KeyError(f'Failed to get token: {token_response}')
E KeyError: "Failed to get token: {'changed': False, 'connection': 'close', 'content_length': '59', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:05:56 GMT', 'elapsed': 0, 'msg': 'Status code was 401 and not [200]: HTTP Error 401: Unauthorized', 'redirected': False, 'status': 401, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}"

/usr/local/lib/python3.10/dist-packages/wazuh_testing/tools/system.py:235: KeyError
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate/run_as user=testing_user password=Newpass1* method=POST body="{\"username\":\"testing\"}" validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '59', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 11:05:56 GMT', 'elapsed': 0, 'msg': 'Status code was 401 and not [200]: HTTP Error 401: Unauthorized', 'redirected': False, 'status': 401, 'url': 'https://localhost:55000/security/user/authenticate/run_as'}
----------------------------Captured stdout teardown----------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:05:58 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5OTU4LCJleHAiOjE3MDQyODA4NTgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AQRFJG10_hT4WIJ8Aib81hPr5SWj0FChBwPx0CueA6J5aAahkTEr_UOhiUCB_neonFIAUi4XojnLHfaB-D8ez5JbAJjVEygKPARId_klMye0MdyrxuiCOJvHYPc3NZ2_zkr8i3BI1_9wXF0emQUNTZpUA4HosKJ8j8tSHMzJeDY11yy-'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:06:04 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5OTY0LCJleHAiOjE3MDQyODA4NjQsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.ACLwJdlpOcDHvEYQwQHHwdGY1Yb_-DSb8jFyDFWD8tDdnA3a1NxgdrbCQwmEAzpdAFUF1pHIKj8-Dv-JpEwWSwFsAGR9WtuBJEBE1T5ohJPzcKV7Qa-ZKNAx9Z1s2jwFjwRvXeNkClB8YSZO-jXTCgIQtw9yP4sIoLsahjEQjlwmlreT'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.131166 test_cluster/test_integrity_sync/test_integrity_sync.py::test_missing_file Check if missing files are copied to each node. 139.26 cluster, agentless_cluster_env
No log output captured.
Passed 2024-01-03 11:06:45.131358 test_cluster/test_integrity_sync/test_integrity_sync.py::test_shared_files Check if the content of each file is the same in all nodes. 107.41 cluster, agentless_cluster_env
No log output captured.
Passed 2024-01-03 11:06:45.131459 test_cluster/test_integrity_sync/test_integrity_sync.py::test_extra_files Check if extra files in the workers are correctly deleted. 113.30 cluster, agentless_cluster_env
No log output captured.
Passed 2024-01-03 11:06:45.132553 test_cluster/test_integrity_sync/test_integrity_sync.py::test_zip_size_limit Check if zip size limit works and if it is dynamically adapted. 278.96 cluster, agentless_cluster_env
------------------------------Captured stderr call------------------------------
2024-01-03 11:44:44,072 - wazuh_testing - DEBUG - Add new file composer process for wazuh-master and path: /var/ossec/logs/cluster.log 2024-01-03 11:44:44,074 - wazuh_testing - DEBUG - Starting file composer for wazuh-master and path: /var/ossec/logs/cluster.log. Composite file in /home/akim/Desktop/wazuh-qa/tests/system/test_cluster/test_integrity_sync/data/tmp/wazuh-master_cluster.log.tmp 2024-01-03 11:44:44,074 - wazuh_testing - DEBUG - Add new file monitor process for wazuh-master and path: /var/ossec/logs/cluster.log 2024-01-03 11:44:44,077 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*File too large to be synced: /var/ossec/etc/rules/test_file_too_big 2024-01-03 11:44:44,077 - wazuh_testing - DEBUG - Add new file composer process for wazuh-worker1 and path: /var/ossec/logs/cluster.log 2024-01-03 11:44:44,079 - wazuh_testing - DEBUG - Starting file composer for wazuh-worker1 and path: /var/ossec/logs/cluster.log. Composite file in /home/akim/Desktop/wazuh-qa/tests/system/test_cluster/test_integrity_sync/data/tmp/wazuh-worker1_cluster.log.tmp 2024-01-03 11:44:44,080 - wazuh_testing - DEBUG - Add new file monitor process for wazuh-worker1 and path: /var/ossec/logs/cluster.log 2024-01-03 11:44:44,082 - wazuh_testing - DEBUG - Add new file composer process for wazuh-worker2 and path: /var/ossec/logs/cluster.log 2024-01-03 11:44:44,082 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-worker1 and message: .*Files to create: 0 \| Files to update: 0 \| Files to delete: 0.* 2024-01-03 11:44:44,084 - wazuh_testing - DEBUG - Starting file composer for wazuh-worker2 and path: /var/ossec/logs/cluster.log. Composite file in /home/akim/Desktop/wazuh-qa/tests/system/test_cluster/test_integrity_sync/data/tmp/wazuh-worker2_cluster.log.tmp 2024-01-03 11:44:44,084 - wazuh_testing - DEBUG - Add new file monitor process for wazuh-worker2 and path: /var/ossec/logs/cluster.log 2024-01-03 11:44:44,087 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-worker2 and message: .*Files to create: 0 \| Files to update: 0 \| Files to delete: 0.* 2024-01-03 11:45:24,921 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*File too large to be synced: /var/ossec/etc/rules/test_file_too_big 2024-01-03 11:45:24,921 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*Maximum zip size exceeded. Not all files will be compressed during this sync.* 2024-01-03 11:45:24,968 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*Maximum zip size exceeded. Not all files will be compressed during this sync.* 2024-01-03 11:45:24,968 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*Command received: b'cancel_task'.* 2024-01-03 11:45:25,019 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*Command received: b'cancel_task'.* 2024-01-03 11:45:25,019 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*Decreasing sync size limit to .* MB.* 2024-01-03 11:45:25,069 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*Decreasing sync size limit to .* MB.* 2024-01-03 11:45:25,069 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*wazuh-worker1.*Files to create in worker: 1 \| Files to update in worker: 0 \| Files to delete in worker: 0.* 2024-01-03 11:45:42,643 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-worker2 and message: .*Files to create: 0 \| Files to update: 0 \| Files to delete: 0.* 2024-01-03 11:45:46,958 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*wazuh-worker1.*Files to create in worker: 1 \| Files to update in worker: 0 \| Files to delete in worker: 0.* 2024-01-03 11:45:46,958 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*wazuh-worker2.*Files to create in worker: 1 \| Files to update in worker: 0 \| Files to delete in worker: 0.* 2024-01-03 11:45:47,158 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*wazuh-worker2.*Files to create in worker: 1 \| Files to update in worker: 0 \| Files to delete in worker: 0.* 2024-01-03 11:45:47,158 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*Increasing sync size limit to .* MB.* 2024-01-03 11:45:47,366 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*Increasing sync size limit to .* MB.* 2024-01-03 11:45:47,659 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-worker1 and message: .*Files to create: 0 \| Files to update: 0 \| Files to delete: 0.* 2024-01-03 11:45:48,165 - wazuh_testing - DEBUG - Cleaning temporal files... 2024-01-03 11:45:48,167 - wazuh_testing - DEBUG - Checking results... 2024-01-03 11:45:48,169 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,170 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,171 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,171 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,172 - wazuh_testing - DEBUG - Received from wazuh-worker2 the expected message: True 2024-01-03 11:45:48,172 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,173 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,173 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:45:48,174 - wazuh_testing - DEBUG - Received from wazuh-worker1 the expected message: True
-------------------------------Captured log call--------------------------------
DEBUG wazuh_testing:monitoring.py:921 Add new file composer process for wazuh-master and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:925 Add new file monitor process for wazuh-master and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:921 Add new file composer process for wazuh-worker1 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:925 Add new file monitor process for wazuh-worker1 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:921 Add new file composer process for wazuh-worker2 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:925 Add new file monitor process for wazuh-worker2 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:1028 Cleaning temporal files... DEBUG wazuh_testing:monitoring.py:1017 Checking results... DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-worker2 the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-worker1 the expected message: True
Passed 2024-01-03 11:06:45.132789 test_cluster/test_ruleset_sync_status/test_ruleset_sync_status.py::test_ruleset_sync_status Check if 'GET /cluster/ruleset/synchronization' API endpoint returns correct sync status. 246.17 cluster, agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:48:09 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc4ODg5LCJleHAiOjE3MDQyNzk3ODksInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AUBhLFZ_1wI5wVzEeWQM-IPXIjAkkW6wiJJMDUAFpZuP3gEAWaOMCS3dJrYbArq7toAf40kgp1vMmskAL6D6FdAaAKjHhTqP8VJ8xe75MzkM6-szENf1HiqqIBpwcebT8JwcIF7BxxZFI3o42ae1KhD1nFf_z8ND8BL5JATLs3nW1xWP'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
------------------------------Captured stderr call------------------------------
2024-01-03 11:48:18,500 - wazuh_testing - DEBUG - Add new file composer process for wazuh-master and path: /var/ossec/logs/cluster.log 2024-01-03 11:48:18,502 - wazuh_testing - DEBUG - Starting file composer for wazuh-master and path: /var/ossec/logs/cluster.log. Composite file in /home/akim/Desktop/wazuh-qa/tests/system/test_cluster/test_ruleset_sync_status/data/tmp/wazuh-master_cluster.log.tmp 2024-01-03 11:48:18,502 - wazuh_testing - DEBUG - Add new file monitor process for wazuh-master and path: /var/ossec/logs/cluster.log 2024-01-03 11:48:18,504 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*\[Local integrity\] Starting.* 2024-01-03 11:49:21,631 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*\[Local integrity\] Starting.* 2024-01-03 11:49:21,632 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-master and message: .*\[Local integrity\] Finished in .* 2024-01-03 11:49:21,670 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-master and message: .*\[Local integrity\] Finished in .* 2024-01-03 11:49:22,578 - wazuh_testing - DEBUG - Cleaning temporal files... 2024-01-03 11:49:22,580 - wazuh_testing - DEBUG - Checking results... 2024-01-03 11:49:22,583 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:49:22,584 - wazuh_testing - DEBUG - Received from wazuh-master the expected message: True 2024-01-03 11:49:22,615 - wazuh_testing - DEBUG - Add new file composer process for wazuh-worker1 and path: /var/ossec/logs/cluster.log 2024-01-03 11:49:22,618 - wazuh_testing - DEBUG - Starting file composer for wazuh-worker1 and path: /var/ossec/logs/cluster.log. Composite file in /home/akim/Desktop/wazuh-qa/tests/system/test_cluster/test_ruleset_sync_status/data/tmp/wazuh-worker1_cluster.log.tmp 2024-01-03 11:49:22,618 - wazuh_testing - DEBUG - Add new file monitor process for wazuh-worker1 and path: /var/ossec/logs/cluster.log 2024-01-03 11:49:22,620 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-worker1 and message: .*Integrity sync.*Starting.* 2024-01-03 11:49:22,621 - wazuh_testing - DEBUG - Add new file composer process for wazuh-worker2 and path: /var/ossec/logs/cluster.log 2024-01-03 11:49:22,623 - wazuh_testing - DEBUG - Starting file composer for wazuh-worker2 and path: /var/ossec/logs/cluster.log. Composite file in /home/akim/Desktop/wazuh-qa/tests/system/test_cluster/test_ruleset_sync_status/data/tmp/wazuh-worker2_cluster.log.tmp 2024-01-03 11:49:22,623 - wazuh_testing - DEBUG - Add new file monitor process for wazuh-worker2 and path: /var/ossec/logs/cluster.log 2024-01-03 11:49:22,626 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-worker2 and message: .*Integrity sync.*Starting.* 2024-01-03 11:49:42,653 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-worker1 and message: .*Integrity sync.*Starting.* 2024-01-03 11:49:42,653 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-worker1 and message: .*Integrity sync.*Finished in.* 2024-01-03 11:49:42,668 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-worker1 and message: .*Integrity sync.*Finished in.* 2024-01-03 11:50:06,674 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-worker2 and message: .*Integrity sync.*Starting.* 2024-01-03 11:50:06,675 - wazuh_testing - DEBUG - Starting QueueMonitor for wazuh-worker2 and message: .*Integrity sync.*Finished in.* 2024-01-03 11:50:06,683 - wazuh_testing - DEBUG - Finishing QueueMonitor for wazuh-worker2 and message: .*Integrity sync.*Finished in.* 2024-01-03 11:50:07,186 - wazuh_testing - DEBUG - Cleaning temporal files... 2024-01-03 11:50:07,188 - wazuh_testing - DEBUG - Checking results... 2024-01-03 11:50:07,193 - wazuh_testing - DEBUG - Received from wazuh-worker1 the expected message: True 2024-01-03 11:50:07,194 - wazuh_testing - DEBUG - Received from wazuh-worker1 the expected message: True 2024-01-03 11:50:07,195 - wazuh_testing - DEBUG - Received from wazuh-worker2 the expected message: True 2024-01-03 11:50:07,196 - wazuh_testing - DEBUG - Received from wazuh-worker2 the expected message: True
-------------------------------Captured log call--------------------------------
DEBUG wazuh_testing:monitoring.py:921 Add new file composer process for wazuh-master and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:925 Add new file monitor process for wazuh-master and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:1028 Cleaning temporal files... DEBUG wazuh_testing:monitoring.py:1017 Checking results... DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-master the expected message: True DEBUG wazuh_testing:monitoring.py:921 Add new file composer process for wazuh-worker1 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:925 Add new file monitor process for wazuh-worker1 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:921 Add new file composer process for wazuh-worker2 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:925 Add new file monitor process for wazuh-worker2 and path: /var/ossec/logs/cluster.log DEBUG wazuh_testing:monitoring.py:1028 Cleaning temporal files... DEBUG wazuh_testing:monitoring.py:1017 Checking results... DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-worker1 the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-worker1 the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-worker2 the expected message: True DEBUG wazuh_testing:monitoring.py:1023 Received from wazuh-worker2 the expected message: True
Passed 2024-01-03 11:06:45.132946 test_jwt_invalidation/test_change_rbac_mode.py::test_change_rbac_mode_with_endpoint[login_endpoint0] Check that all tokens are revoked when changing RBAC mode with the security endpoint. 79.67 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:52:14 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTM0LCJleHAiOjE3MDQyODAwMzQsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AcJ3u15XH85UOCKsnEs-8rdgHbqKXBX6HfF3KdvYvsxNPt9--46tHxgvAgagqcL-QkjcUcYs_n3h9xLrPL5oJYsnARcxhfpeGcdpcGCVsq40I4S35QzCkf5YkNcAGYCQjKj--JBvgN0A-z-v_b9xcvYpiNUPRFVYxXgCy4KH-suVzGy6'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:52:16 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTM2LCJleHAiOjE3MDQyODAwMzYsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.ASKBbHlIbvPBfSjMfDIQI80-NAH_96EI26QLR52feuzmDrbEIuf7TkMGHjtzICqbH9DD-mPKgVY0VgEXgFRhTOQLAD2jXenQ-RweDxT15tLXyxxzWKMjlbmAxNAOgYyLim0DovLWERRfP3rGwAQKpIpz0t9Ttozc-7Wg0n-19aVF1ZGZ'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:52:18 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTM4LCJleHAiOjE3MDQyODAwMzgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AJQS-VrfpFyZ1xvcTCs6Y2QQDul2Nv8FuzjcXgrmz_ATupK_W8hmJnnXFGHfyclOPiWw4uHiSeeLGzQx-9itDxTUAaVggbw4oBX7JihVpwo-LoXn4pjXHeoWHDnFKradnDwpuBGfKKPBgAj3v9BeTieTDzPVCKghQNQvACvejMlyS83k'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.136030 test_jwt_invalidation/test_change_rbac_mode.py::test_change_rbac_mode_manually[login_endpoint0] Check that all tokens are revoked when changing RBAC mode manually in the security.yaml . 41.51 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:52:29 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTQ5LCJleHAiOjE3MDQyODAwNDksInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJ3aGl0ZSJ9.AY6NWMykcuD2z_VlQQa1H3mgJao10_OlavUi-SoRTQjE0aAJ3b1QmdW0sN4Ep1uMcqTLX1lAwfrhDUDZ54iOw5piAQRTnCPtzJcVdZmzU8Ak9pZYIynaP2-tH-SHO3mCwCoVAn1kmFeNmmEzt9Js4NvYagKUkrFy0LN1O0abpvLFhBll'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:52:31 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTUxLCJleHAiOjE3MDQyODAwNTEsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJ3aGl0ZSJ9.APoY4Rt_HdksF1zA4bNiUQ6myTFEAkC-5VqG5M9dCCvLQa1sZCxNZzuQEHek-F2cDTS8vTlJTaTt4nlkKz36c1vNAD7OYUCAxENHkchNH-cdNutsSYqP7SQLfEDD9SeyA0DKwlkSn_glNwt62U5wQ2pc6Q0D8O1HQzeq3bi8cF2rDlQh'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:52:32 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MTUyLCJleHAiOjE3MDQyODAwNTIsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJ3aGl0ZSJ9.AXF8DG87EP3Fjrqv4wZA71sgrPaY6hx4hlOMRhx9nZNLllUCb9qmH57QJZ6mke3VytIzj8hRoLQ1MTMNwM1cogJ4ANDTsv5l8_rDMiUD1keITD8G0vELdfwiBqK1-qiyuCpHDOn0ohSkSihRPx2cx99bcXzMjMYsBJYohP3BNPkMWoLf'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.139229 test_jwt_invalidation/test_change_security_resources.py::test_change_user_policy_and_role[wazuh-master-wazuh-worker1-login_endpoint0] Test that the obtained token is invalid after changing a role or policy related to the user. 98.50 agentless_cluster_env
-----------------------------Captured stdout setup------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:22 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzIyLCJleHAiOjE3MDQyODAyMjIsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AZ5P0g-ZyNaTkSENizurjhke7NUx5mYKxczUg8_uDxL5wGYQ1Q-h1pKmWsf6aUw58KCpPwrdq9X9_x_YJ21R9OdOAXRcZDsEhAM6APWSaoTY8vOsQ3-80Dgc7NyioUAPBay3hhZGr8oh5g5r5DpRkbX_f-wfFPvlDpN94rSp8EMgAEbz'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:28 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzI4LCJleHAiOjE3MDQyODAyMjgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AOYyqxEQyx_5-tZ--sfVfhxnDc0bRudAnvE0M4wM2lVNdzDvoL1EHhqbuUj2aP7LWV_NxcfFlLGY-Vil64jd-AfOAZQK7YNNIMC3flTMskxnFh8--1rkOYz-uTKoYCf42mXfoAA-0TNscfr6CQPdCohG5yZljDbTGuFNZ63TK-sbuxQm'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:37 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzM3LCJleHAiOjE3MDQyODAyMzcsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AeegT3klWXeEF4PfVaQNT-kCG7kvn9S0zgaDRbdAS676L17BO__p8abYycP3Tq__MLXLkhC2OW2ux4ZEZxhG2i-FARPHDNrQMa8i9Q5-KugycEVqPcFTvE_0AHzzUx47YkWuzG17wnYQIkhx3ZCmXJRZJrCyLOXmCK6jhFdfxt3ebs7J'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '448', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:40 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzQwLCJleHAiOjE3MDQyODAyNDAsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxLDEwMF0sInJiYWNfbW9kZSI6ImJsYWNrIn0.AHdORdI0oxPp7EeMjwiZr5v2eogcbxsE1Cabo5Dy9KbpnhbnWd6zc69giGOEKyvxYjG_HC4cnP9M7BL45SvJugSrAY1I1VNi0iHKOW2X4V8Oc4DG394999SONycjeENz3lh9hlyayj2OggeBcq4QZIvS9WCTI7F6U_9knEvi4CHAyDIE'}, 'error': 0}, 'msg': 'OK (448 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '448', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:46 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzQ2LCJleHAiOjE3MDQyODAyNDYsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxLDEwMF0sInJiYWNfbW9kZSI6ImJsYWNrIn0.ACxuyyGFButZp3pm1uxeopLcpYOeilw2WrRLJzYyRAMQAZ9jtJZidnTzrYjlQiQM73iADGEv2saUaveFX0kl_MnGAAWqjOpCvtmu_NC58OKXWmlACOcWrTSJLOK8KysPVlFhON_wtcJwt14VamPQu4sbLFfrmv7WW9jPWqEZuwCwl9c-'}, 'error': 0}, 'msg': 'OK (448 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '448', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:51 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzUxLCJleHAiOjE3MDQyODAyNTEsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxLDEwMF0sInJiYWNfbW9kZSI6ImJsYWNrIn0.AZu6hjfKj1uO2r2NNk_HQtGfiobVtzLN6oG1B9q0knTV-nRd14lWKeEaKypI8H7-bLpFDcuHQxgKJfSEG2SzxQP1ALoUK3IOMLzLZWcPTvAiEKvUnU_BnNJWguf8WlMUVdBdpGpH00P9-cUHQxtJN6mWIgzg-lk689kIfCvIkg6myIKb'}, 'error': 0}, 'msg': 'OK (448 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.142638 test_jwt_invalidation/test_change_security_resources.py::test_change_user_policy_and_role[wazuh-worker1-wazuh-worker2-login_endpoint0] Test that the obtained token is invalid after changing a role or policy related to the user. 14.96 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '448', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:55:57 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzU3LCJleHAiOjE3MDQyODAyNTcsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxLDEwMF0sInJiYWNfbW9kZSI6ImJsYWNrIn0.AKQioNneAR3OHzM-JRjKhaSHECNbCS3jxwGYcGm0EI89HNn57dZXzeChgqPUOM4rUxaE0TobiUb51QNq2PTVXGSqAMdklEvzwkg1SLERs4rilYOO_0CkdLb3dopfbIyGH_W4OCoKbaQaEbAGDBdrdzRotf339wFBwgMKk_19nb5f3yCX'}, 'error': 0}, 'msg': 'OK (448 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '448', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:56:03 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzYzLCJleHAiOjE3MDQyODAyNjMsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxLDEwMF0sInJiYWNfbW9kZSI6ImJsYWNrIn0.AFTjMxz5HF8NdRBquqKob8ddujJCcFnWCmwMvOzFfct_OzYCqoqVL6LR2IAtW2BoOoNUQqH9bXgjk9BXSwY9-2QTAHz5z1VJ51lSwgHqHDt99_1xp19E5f98Lm1dP5mDetQKvL6oJ8gXqw4IgyT9ginlYpGperaZd5Fn5UoHsos_Au8R'}, 'error': 0}, 'msg': 'OK (448 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '448', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:56:08 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5MzY4LCJleHAiOjE3MDQyODAyNjgsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxLDEwMF0sInJiYWNfbW9kZSI6ImJsYWNrIn0.AUJhaseI0bmeQwXZWhgt0nUD8jtapU2FfCf1El7VJwr2O4azZXz3eHEAXXGMiYmSXj7c4axT7GZtVH4aVIKApEueAHNWw140O5LNvq5EHsR33w_TY3ekkuFfOaksZGk3-uvZ2IxD5NzdjEyRBIhMSf19NTkjT7nq8oga1aL8t7zfBhtu'}, 'error': 0}, 'msg': 'OK (448 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.146471 test_jwt_invalidation/test_disconnected_nodes.py::test_create_user_when_node_is_disconnected Check that user information is not lost when different nodes from the cluster disconnect and reconnect. 259.72 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:58:38 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NTE4LCJleHAiOjE3MDQyODA0MTgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.Ac2IeyTKhpJ48Zgp9uZ8TXAQK83hcJq6rBOCA_H9LhOVi_UidQ_mALOSB-iUUTyN1Nca9rz6IODL5Gpsf4M8kybaAA1gmt-XkcUTZbFyMxQQ2DXWrfY9yfG5pIUbw0yCFqnZvjjrJWMU18h619CI1NMA2DZaRBmwlaTT6Yqf0mwpytfv'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=NewTestUser password=NewPassword1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '440', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:59:09 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NTQ5LCJleHAiOjE3MDQyODA0NDksInN1YiI6Ik5ld1Rlc3RVc2VyIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6W10sInJiYWNfbW9kZSI6ImJsYWNrIn0.APl8J8kt6ypu6xPPiENPn_uuOfjPYUZcYlg3H2sqpm28HkTcCOH32Xko9OLk31Nszr-WqRWDPbLg61psXHIAFP5cABeCpL49XuTbqUTJABLMhp_lYPJcfz2YAuJpp63dBxjkYUutnp6OuCGWcxXDQk5PGlbh2t4QaiQiQngCoYbNExAj'}, 'error': 0}, 'msg': 'OK (440 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=NewTestUser password=NewPassword1* method=POST validate_certs=no force_basic_auth=yes False {'changed': False, 'connection': 'close', 'content_length': '59', 'content_type': 'application/problem+json; charset=utf-8', 'date': 'Wed, 03 Jan 2024 10:59:40 GMT', 'elapsed': 0, 'msg': 'Status code was 401 and not [200]: HTTP Error 401: Unauthorized', 'redirected': False, 'status': 401, 'url': 'https://localhost:55000/security/user/authenticate'}
----------------------------Captured stdout teardown----------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 10:59:42 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NTgyLCJleHAiOjE3MDQyODA0ODIsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AB5YBH73owF0Nq22hS5GCp-roPqXNezum8jDsXndA5kQgVHop6Y3Egqhncq1qisVGzphlCIZL6GqWeLw7-uqewXHAWXGSULA6LJ8S0fmzMI4GWZ15bM6kofCapxoOT-NoVCPZ8l2kcFY7JHeCJxWmlXXnixbncpwAjuJ4eeuczA-jTB2'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.146596 test_jwt_invalidation/test_revoke_endpoint.py::test_revoke_all_tokens_with_api[wazuh-master-login_endpoint0] Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'. 84.86 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:02:50 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NzcwLCJleHAiOjE3MDQyODA2NzAsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.ANFWUtxTB9ntNwoh16jcXxn9xTufXa94AXAASqIK_7X7A_FDyqxL82hlngbwdw93ibSrUOPi1n82yU4g1YwKKf_pAS0iaGmd9BvoFonbObxKwd8gKkwJWxkBdL7jW-KGfToFMNA3dTxKLs_rjn-SH0URM50pVe2emUWzzsIoto3jXPfZ'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:02:52 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NzcyLCJleHAiOjE3MDQyODA2NzIsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AEDDxecUmmejyE1vciRXl88ECqpluiVTOeqAiOHRTsYWibIDNTToamrCXeIuThoWuRyu1c_lj7_uXa5jCjWQZUQzAWTfoIEcJTiq_FOfwgWZXEH8EgvCiovgZle9yRgRI8Rru5EmfRXqcUDuV9xwE5A6Xk2OuCwc60z6zc9r7Exs2l_G'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:02:54 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5Nzc0LCJleHAiOjE3MDQyODA2NzQsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.ABjOzFV-GMDPOVrAi0dLDY_3sf3ePEoHArYBNwSjvXbXx3yLf7SEQh-xKwSpsJSdxuGUsT5JVDVArNBFR17ce5leAU7f6TIIhm-luFQm3icJ9yEd-Hjl71Evc8E3-4s7WjBcGtvywW-Bm6_YeaRw-KS8qbbflvAbRRwmdjwl9SetTGwh'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.148937 test_jwt_invalidation/test_revoke_endpoint.py::test_revoke_all_tokens_with_api[wazuh-worker1-login_endpoint0] Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'. 15.51 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:03:08 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5Nzg4LCJleHAiOjE3MDQyODA2ODgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AINYBBKj2HAZ5EK2P9rKYUWClHvDvOGxBId-Q1sZ5q3v_LX4ygO6LFax4B6kNw0Q6ZKi2l5KjC1i5hnZHis_PgsQAJaybQXtPOX_EZyCu1LwDO-dK6MyemdaYyqIi6jgFsj5P5JNXV7puedEyYrPkzRd6ZobBnT1YnkJM0esu65JIGrd'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:03:10 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NzkwLCJleHAiOjE3MDQyODA2OTAsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.ATso1a6Jmyqm3v61gXju7TvCVe_BUzN7nBnUPu0-Ylo_F-2kU-FWrprEFpE5GTpZEubgT2EmVJSC5JmWRjZkpoQBAZBaGX82cS57aJe2dT4eItPVMFzgMDWLegFfN9CS3t9JhXmYYJitncHeKc1RJWpHL53EKKqtijherxtBO1PIPrjN'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:03:11 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5NzkxLCJleHAiOjE3MDQyODA2OTEsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AVJynYqKgiZZNczbimNzETC8KFloAgewdZqobG6aynAu_83NdEPCk4kUi_bchebQSmWtb3YE_L6VUwSHp9DRnJ1KAaXxJ7CuwL0kXaVmn6lWwFwOEmb15U2SYYicYK2QZgSnUkL0WCJ1BTwsg-fIAKABnlJIAeFRFBcJQ_IKbHG6EAc5'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.152137 test_jwt_invalidation/test_revoke_endpoint.py::test_revoke_all_tokens_with_api[wazuh-worker2-login_endpoint0] Test that every token gets revoked after making an API call to 'PUT /security/user/revoke'. 15.87 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:03:26 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5ODA2LCJleHAiOjE3MDQyODA3MDYsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AJEUIN2rJMqGlVsSltRVeVKQhJFXKi7gYmukBtLXkQp4-P37GmN1AqHJ9rxXrE0HARpA8l6P_kDqWVOMoYpKSoD-AYEvAcsYs9vt23x9cdKhraJKR7s-fDwaSNEzG48sjD9e9kqv_FoUrafvNYME0SlX4Rt_B9bYBKyLZoe16sLTggXH'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:03:28 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5ODA4LCJleHAiOjE3MDQyODA3MDgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.ASGaviGBDVJME-c8koTd1zsrMPWTDNIrtRbsQMtYs5pNohPVkyKzIdwf35Fp6rW1nT6eA7R4H2MDeUJhreCfdsXsAXM8U27ulDBMVQUpHzF-sPLvZlT5AZdfC3jHKR5iKao6GlhOzVhzHQFAbYnoWYZVCRpvkFoAP6IaNMfhmDRVLGKJ'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:03:29 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5ODA5LCJleHAiOjE3MDQyODA3MDksInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AJW_Fw5mh5Xos1GLnCQvIqGtRELL4f509zAg3ToHWOlJVyH4jAe6D-8khEFidrLAIn5d6rhVxq2O9tL6kEt40TLoAO_Mtmi52pCLuoQlVBE3rOz1ghRnqMfeN6yIBy8-CyrMwHnrhQCXiiMFTW6Qp-movoxBV-C_FN_0doBWEq0M94np'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.156686 test_jwt_invalidation/test_update_password.py::test_update_password[login_endpoint0-wazuh-master-None-Newpass1*] Test that the obtained token is invalid after updating the password from its user. 65.43 agentless_cluster_env
-----------------------------Captured stdout setup------------------------------
url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:05:28 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5OTI4LCJleHAiOjE3MDQyODA4MjgsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AK3M25pkMt8hRAO1SPkyWb74uXoOc4tz2iR-jGOwaVEnT2LIjrRq5iiKAYT_kFdSKEOsVtsDTALm2dpD3E0Nn4hDAFDPSNXngX6DP1dSjG4pl_Dp0ZjoDLX84A8wcmLGfXnvs0gCk3voluz4dXxkZameDldStXYKSqfg2LEAD_ZNRUOg'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'} url=https://localhost:55000/security/user/authenticate user=wazuh password=wazuh method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '433', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:05:35 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5OTM1LCJleHAiOjE3MDQyODA4MzUsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJibGFjayJ9.AJnLFnbN9E0ob_c047wkzFAHlTvTlpt2tx_f4pczWyO1_3wgzjDwhZ9BBWYz-ea4tAtC4XcbsOTMrRcZzvg49uqHAZ5yvpThtwD6nk14pJJVnhKzw-t9kwczm-9atlJ0mVttwXDtf3aUzT-iuVGwFZTLINVcHkpidZRUFycnckIL213M'}, 'error': 0}, 'msg': 'OK (433 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=testing_user password=Testing1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '443', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:05:44 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5OTQ0LCJleHAiOjE3MDQyODA4NDQsInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxXSwicmJhY19tb2RlIjoiYmxhY2sifQ.AKFpD0RkWvw_1QcAvtvoFJ0iXN55rz1DYuCzdMYYVKHHWboXBkYQO_XRocQOMhwRg4rQwbfUu6jHO4z2xXLZAK4FAfrESypXFstEmyLgh1KGcj-hxFg2O0nfIhnYVfYi8ye5HDg1kExV6uqRm93KPIZb6wg_WtE7-UY9DaEFPFk6vu2e'}, 'error': 0}, 'msg': 'OK (443 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}
Passed 2024-01-03 11:06:45.156990 test_jwt_invalidation/test_update_password.py::test_update_password[login_endpoint1-wazuh-worker1-Newpass1*-Newpass2*] Test that the obtained token is invalid after updating the password from its user. 4.96 agentless_cluster_env
------------------------------Captured stdout call------------------------------
url=https://localhost:55000/security/user/authenticate user=testing_user password=Newpass1* method=POST validate_certs=no force_basic_auth=yes False {'cache_control': 'no-cache, no-store, must-revalidate, max-age=0', 'changed': False, 'connection': 'close', 'content_length': '443', 'content_security_policy': 'none', 'content_type': 'application/json; charset=utf-8', 'cookies': {}, 'cookies_string': '', 'date': 'Wed, 03 Jan 2024 11:05:49 GMT', 'elapsed': 0, 'expires': '0', 'json': {'data': {'token': 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzA0Mjc5OTQ5LCJleHAiOjE3MDQyODA4NDksInN1YiI6InRlc3RpbmdfdXNlciIsInJ1bl9hcyI6ZmFsc2UsInJiYWNfcm9sZXMiOlsxXSwicmJhY19tb2RlIjoiYmxhY2sifQ.AFYAmWSH8RfYJCPoAR_N7tynCbcfs6YLS0w2i4XEck_V0aFXqiZMy6_6XqGiTkKcbglpxYT873t5sBAAVony5_96ADgQPIYej86GZR6SPaVkQX1vZCSiZGWhWtS5mhXiGk3qKTDZ2RGQ51fqLmnlWELWNg5Nvx3C166b-llVIyBk28un'}, 'error': 0}, 'msg': 'OK (443 bytes)', 'pragma': 'no-cache', 'redirected': False, 'referrer_policy': 'no-referrer, strict-origin-when-cross-origin', 'status': 200, 'strict_transport_security': 'max-age=63072000; includeSubdomains', 'url': 'https://localhost:55000/security/user/authenticate', 'x_content_type_options': 'nosniff', 'x_frame_options': 'DENY', 'x_xss_protection': '1; mode=block'}