Exemplo n.º 1
0
def test_client_status_is_approved_when_authentication_method_is_custom_and_approve_is_called(
):
    # Given
    expected_status = Handshake.CONNECTION_STATUS_APPROVED
    allowed_authentication_methods_client = ["custom"]
    allowed_authentication_methods_server = ["custom"]
    authentication_information_client = {}
    client = Handshake(
        role=Handshake.CLIENT,
        authentication_information=authentication_information_client,
        allowed_authentication_methods=allowed_authentication_methods_client)
    server = Handshake(
        role=Handshake.SERVER,
        allowed_authentication_methods=allowed_authentication_methods_server)

    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())

    # When
    server.approve()
    client.add_message(server.next_message())
    status_server = server.get_status()
    status_client = client.get_status()

    # Then
    assert status_server == expected_status
    assert status_client == expected_status
Exemplo n.º 2
0
def test_client_status_is_waiting_approval_when_authentication_method_is_custom(
):
    # Given
    expected_status = Handshake.CONNECTION_STATUS_WAIT_APPROVAL
    allowed_authentication_methods_client = ["custom"]
    allowed_authentication_methods_server = ["custom"]
    authentication_information_client = {}
    client = Handshake(
        role=Handshake.CLIENT,
        authentication_information=authentication_information_client,
        allowed_authentication_methods=allowed_authentication_methods_client)
    server = Handshake(
        role=Handshake.SERVER,
        allowed_authentication_methods=allowed_authentication_methods_server)

    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())

    # When
    status = server.get_status()

    # Then
    assert status == expected_status
Exemplo n.º 3
0
def test_get_status_return_complete_when_and_handshake_was_successful_without_authentication(
):
    # Given
    server = Handshake(role=Handshake.SERVER)
    client = Handshake(role=Handshake.CLIENT)

    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())
    client.add_message(server.next_message())

    # When
    result_client = client.get_status()
    result_server = server.get_status()

    # Then
    assert result_client == Handshake.CONNECTION_STATUS_APPROVED
    assert result_server == Handshake.CONNECTION_STATUS_APPROVED
Exemplo n.º 4
0
def test_connection_fail_if_abort_is_called_on_client_after_a_connection_request(
):
    # Given
    server = Handshake(role=Handshake.SERVER)
    client = Handshake(role=Handshake.CLIENT)

    server.add_message(client.next_message())
    client.add_message(server.next_message())

    # When
    client.abort()
    connection_failed_message = client.next_message()
    server.add_message(connection_failed_message)

    # Then
    assert server.get_status() == Handshake.CONNECTION_STATUS_FAILED
    assert client.get_status() == Handshake.CONNECTION_STATUS_FAILED
    assert int.from_bytes(connection_failed_message.topic,
                          'little') == Handshake.CONNECTION_FAILED_TOPIC
Exemplo n.º 5
0
def test_get_status_return_incomplete_when_role_is_client_and_handshake_process_not_started(
):
    # Given
    role = Handshake.CLIENT
    client = Handshake(role=role)

    # When
    result = client.get_status()

    # Then
    assert result == Handshake.CONNECTION_STATUS_INCOMPLETE
Exemplo n.º 6
0
def test_get_status_return_approved_when_authentication_is_correct():
    # Given
    allowed_authentication_methods = ["password"]
    password_to_derive = b"test"
    password_salt = os.urandom(16)
    password_client = "test"
    derived_password = derive_password_scrypt(
        password_salt=password_salt, password_to_derive=password_to_derive)
    authentication_information_server = {
        "password": {
            Handshake.PASSWORD_AUTH_METHOD_DERIVED_PASSWORD_KEY:
            derived_password,
            Handshake.PASSWORD_AUTH_METHOD_SALT_KEY: password_salt
        }
    }
    server = Handshake(
        role=Handshake.SERVER,
        authentication_information=authentication_information_server,
        allowed_authentication_methods=allowed_authentication_methods)
    authentication_information_client = {
        Handshake.PASSWORD_AUTH_METHOD_PASSWORD_KEY: password_client
    }
    client = Handshake(
        role=Handshake.CLIENT,
        authentication_information=authentication_information_client,
        allowed_authentication_methods=allowed_authentication_methods)

    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())
    client.add_message(server.next_message())
    server.add_message(client.next_message())
    client.add_message(server.next_message())

    # When
    result_client = client.get_status()
    result_server = server.get_status()

    # Then
    assert result_client == Handshake.CONNECTION_STATUS_APPROVED
    assert result_server == Handshake.CONNECTION_STATUS_APPROVED
Exemplo n.º 7
0
def test_connection_fail_if_server_and_client_have_not_a_common_protocol_version(
):
    # Given
    allowed_protocol_versions_client = ['alpha']
    allowed_protocol_versions_server = ['1.0']
    server = Handshake(
        role=Handshake.SERVER,
        allowed_protocol_versions=allowed_protocol_versions_server)
    client = Handshake(
        role=Handshake.CLIENT,
        allowed_protocol_versions=allowed_protocol_versions_client)

    server.add_message(client.next_message())

    # When
    connection_failed_message = server.next_message()
    client.add_message(connection_failed_message)

    # Then
    assert server.get_status() == Handshake.CONNECTION_STATUS_FAILED
    assert client.get_status() == Handshake.CONNECTION_STATUS_FAILED
    assert int.from_bytes(connection_failed_message.topic,
                          'little') == Handshake.CONNECTION_FAILED_TOPIC