Ejemplo n.º 1
0
    def test_make_tls_client(self, ws_create_connection):
        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WSS_URL

        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"
        clientmgr.cacert = '/etc/pki/ca-trust/source/anchors/cm-local-ca.pem'
        ws_create_connection.return_value.recv.return_value = json.dumps(
            {"headers": {
                "status": 200
            }})
        client = plugin.make_client(clientmgr)

        websocket = client.messaging_websocket()
        # The second access should not return the same client:
        self.assertIsNot(client.messaging_websocket(), websocket)

        plugin.make_client(clientmgr)

        # And the functions should only be called when the client is created:
        self.assertEqual(clientmgr.auth.get_token.call_count, 2)
        self.assertEqual(clientmgr.get_endpoint_for_service_type.call_count, 2)
        ws_create_connection.assert_called_with(
            "wss://0.0.0.0",
            sslopt={
                'ca_certs': '/etc/pki/ca-trust/source/anchors/cm-local-ca.pem'
            })
Ejemplo n.º 2
0
    def test_make_client(self):
        clientmgr = mock.MagicMock()
        clientmgr._api_version.__getitem__.return_value = '1'
        clientmgr.get_endpoint_for_service_type.return_value = fakes.AUTH_URL

        plugin.make_client(clientmgr)

        # And the functions should only be called when the client is created:
        self.assertEqual(clientmgr.auth.get_token.call_count, 0)
Ejemplo n.º 3
0
    def test_handle_websocket(self, ws_create_connection, recv_mock):

        send_ack = {
            "headers": {
                "status": 200
            }
        }

        # Creating the websocket sends three messages and closing sends one.
        # The one being tested is wrapped between these
        recv_mock.side_effect = [send_ack, send_ack, send_ack, {
            "body": {
                "payload": {
                    "status": 200,
                    "message": "Result for IDID",
                    "execution": {"id": "IDID"},
                }
            }
        }, send_ack]

        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL
        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"

        client = plugin.make_client(clientmgr)

        with client.messaging_websocket() as ws:
            payload = ws.wait_for_message("IDID")
            self.assertEqual(payload, {
                "status": 200,
                "message": "Result for IDID",
                "execution": {"id": "IDID"},
            })
Ejemplo n.º 4
0
    def test_handle_websocket(self, ws_create_connection, recv_mock):

        send_ack = {
            "headers": {
                "status": 200
            }
        }

        # Creating the websocket sends three messages and closing sends one.
        # The one being tested is wrapped between these
        recv_mock.side_effect = [send_ack, send_ack, send_ack, {
            "body": {
                "payload": {
                    "status": 200,
                    "message": "Result for IDID",
                    "execution": {"id": "IDID"},
                }
            }
        }, send_ack]

        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL
        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"

        client = plugin.make_client(clientmgr)

        with client.messaging_websocket() as ws:
            payload = ws.wait_for_message("IDID")
            self.assertEqual(payload, {
                "status": 200,
                "message": "Result for IDID",
                "execution": {"id": "IDID"},
            })
Ejemplo n.º 5
0
    def test_make_client(self, ws_create_connection):
        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL

        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"
        ws_create_connection.return_value.recv.return_value = json.dumps({
            "headers": {
                "status": 200
            }
        })
        client = plugin.make_client(clientmgr)

        websocket = client.messaging_websocket()
        # The second access should not return the same client:
        self.assertIsNot(client.messaging_websocket(), websocket)

        plugin.make_client(clientmgr)

        # And the functions should only be called when the client is created:
        self.assertEqual(clientmgr.auth.get_token.call_count, 2)
        self.assertEqual(clientmgr.get_endpoint_for_service_type.call_count, 2)
        ws_create_connection.assert_called_with("ws://0.0.0.0")
Ejemplo n.º 6
0
    def test_websocket_creation_error(self, ws_create_connection):

        ws_create_connection.side_effect = socket.error

        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL
        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"

        client = plugin.make_client(clientmgr)

        msg = ("Could not establish a connection to the Zaqar websocket. The "
               "command was sent but the answer could not be read.")
        with mock.patch('tripleoclient.plugin.LOG') as mock_log:
            self.assertRaises(socket.error, client.messaging_websocket)
            mock_log.error.assert_called_once_with(msg)
    def test_make_client(self):
        clientmgr = mock.MagicMock()
        clientmgr._api_version.__getitem__.return_value = '1'
        clientmgr.get_endpoint_for_service_type.return_value = fakes.AUTH_URL

        client = plugin.make_client(clientmgr)

        # The client should have an orchestration property. Accessing it should
        # fetch it from the clientmanager:
        orchestration = client.orchestration
        # The second access should return the same client:
        self.assertIs(client.orchestration, orchestration)

        # And the functions should only be called when the client is created:
        self.assertEqual(clientmgr.get_endpoint_for_service_type.call_count, 1)
        self.assertEqual(clientmgr.auth.get_token.call_count, 1)
Ejemplo n.º 8
0
    def test_websocket_creation_error(self, ws_create_connection):

        ws_create_connection.side_effect = socket.error

        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL
        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"

        client = plugin.make_client(clientmgr)

        msg = ("Could not establish a connection to the Zaqar websocket. The "
               "command was sent but the answer could not be read.")
        with mock.patch('tripleoclient.plugin.LOG') as mock_log:
            self.assertRaises(socket.error, client.messaging_websocket)
            mock_log.error.assert_called_once_with(msg)
Ejemplo n.º 9
0
    def test_make_client(self, ironic_get_client):
        clientmgr = mock.MagicMock()
        clientmgr._api_version.__getitem__.return_value = "1"
        clientmgr.get_endpoint_for_service_type.return_value = fakes.AUTH_URL

        client = plugin.make_client(clientmgr)

        # The client should have a baremetal property. Accessing it should
        # fetch it from the clientmanager:
        baremetal = client.baremetal
        orchestration = client.orchestration
        # The second access should return the same clients:
        self.assertIs(client.baremetal, baremetal)
        self.assertIs(client.orchestration, orchestration)

        # And the functions should only be called per property:
        self.assertEqual(clientmgr.get_endpoint_for_service_type.call_count, 2)
        self.assertEqual(clientmgr.auth.get_token.call_count, 2)
Ejemplo n.º 10
0
    def test_invalid_json(self, ws_create_connection):
        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL

        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"
        clientmgr.cacert = None
        ws_create_connection.return_value.recv.return_value = "BAD JSON"
        client = plugin.make_client(clientmgr)

        # NOTE(d0ugal): Manually catching errors rather than using assertRaises
        #               so we can assert the message.
        try:
            client.messaging_websocket()
            self.assertFail()
        except ValueError as e:
            self.assertEqual(str(e),
                             "No JSON object could be decoded; 'BAD JSON'")
Ejemplo n.º 11
0
    def test_handle_websocket_multiple(self, ws_create_connection, recv_mock):

        send_ack = {"headers": {"status": 200}}

        # Creating the websocket sends three messages and closing sends one.
        # The one being tested is wrapped between these
        recv_mock.side_effect = [
            send_ack, send_ack, send_ack, {
                "body": {
                    "payload": {
                        "status": 200,
                        "message": "Result for IDID",
                        "execution": {
                            "id": "IDID"
                        },
                    }
                }
            }, send_ack
        ]

        clientmgr = mock.MagicMock()
        clientmgr.get_endpoint_for_service_type.return_value = fakes.WS_URL
        clientmgr.auth.get_token.return_value = "TOKEN"
        clientmgr.auth_ref.project_id = "ID"

        client = plugin.make_client(clientmgr)

        with client.messaging_websocket() as ws:
            for payload in ws.wait_for_messages():
                self.assertEqual(
                    payload, {
                        "status": 200,
                        "message": "Result for IDID",
                        "execution": {
                            "id": "IDID"
                        },
                    })
                # We only want to test the first message, as there is only one.
                # The last one, the send_ack will be used by the context
                # manager when it is closed.
                break