Exemplo n.º 1
0
    def test_connect(self, clean_mongo, tenant_id=None):
        """
        Tests end-to-end connection between user and device and checks
        for basic expected responses.
        """

        dev = Device(tenant_id=tenant_id)
        user_id = str(uuid.uuid4())
        api_mgmt = management_api_with_params(user_id=user_id,
                                              tenant_id=tenant_id)
        try:
            api_mgmt.connect(
                "00000000-0000-0000-0000-000000000000",
                connection="Upgrade",
                upgrade="websocket",
                sec_websocket_key="mumbojumbo==",
                sec_websocket_version=13,
            )
        except management_api.ApiException as e:
            assert e.status == 404
            assert "device not found" in str(e.body)
        else:
            raise Exception("Expected status code 404")

        try:
            api_mgmt.connect(
                dev.id,
                connection="Upgrade",
                upgrade="websocket",
                sec_websocket_key="mumbojumbo==",
                sec_websocket_version=13,
            )
        except management_api.ApiException as e:
            assert e.status == 404
            assert "device not connected" in str(e.body)
        else:
            raise Exception("Expected status code 404")

        with dev.connect() as dev_conn:
            try:
                api_mgmt.connect(dev.id)
            except management_api.ApiException as e:
                assert e.status == 400
                assert "the client is not using the websocket protocol" in e.body
            else:
                raise Exception("Expected status code 400")

            try:
                api_mgmt.connect(
                    dev.id,
                    connection="Upgrade",
                    upgrade="websocket",
                    sec_websocket_key="mumbojumbo==",
                    sec_websocket_version=13,
                )
            except management_api.ApiException as e:
                assert e.status == 101
            else:
                raise Exception("Expected status code 101")

            with management_api_connect(dev.id,
                                        user_id=user_id,
                                        tenant_id=tenant_id) as user_conn:
                user_conn.send(
                    msgpack.dumps({
                        "hdr": {
                            "proto": 1,
                            "typ": "start",
                            "props": {
                                "status": "ok"
                            },
                        },
                    }))
                msg = dev_conn.recv()
                rsp = msgpack.loads(msg)
                assert "hdr" in rsp, "Message does not contain header"
                assert ("sid" in rsp["hdr"]
                        ), "Forwarded message should contain session ID"
                assert rsp == {
                    "hdr": {
                        "proto": 1,
                        "typ": "start",
                        "props": {
                            "status": "ok",
                            "user_id": user_id,
                        },
                        "sid": rsp["hdr"]["sid"],
                    },
                }
                dev_conn.send(
                    msgpack.dumps({
                        "hdr": {
                            "proto": 1,
                            "typ": "shell",
                            "props": {
                                "status": "ok"
                            },
                            "sid": rsp["hdr"]["sid"],
                        },
                        "body": b"sh-5.0$ ",
                    }))
                msg = user_conn.recv()
                assert msgpack.loads(msg) == {
                    "hdr": {
                        "proto": 1,
                        "typ": "shell",
                        "props": {
                            "status": "ok"
                        },
                        "sid": rsp["hdr"]["sid"],
                    },
                    "body": b"sh-5.0$ ",
                }

        try:
            api_mgmt.connect(
                dev.id,
                connection="Upgrade",
                upgrade="websocket",
                sec_websocket_key="mumbojumbo==",
                sec_websocket_version=13,
            )
        except management_api.ApiException as e:
            assert e.status == 404
        else:
            raise Exception("Expected status code 404")
Exemplo n.º 2
0
    def test_connect(self, clean_mongo, tenant_id=None):
        """
        Tests end-to-end connection between user and device and checks
        for basic expected responses.
        """

        dev = Device(tenant_id=tenant_id)
        api_mgmt = management_api_with_params(user_id=str(uuid.uuid4()),
                                              tenant_id=tenant_id)
        try:
            api_mgmt.connect(
                "00000000-0000-0000-0000-000000000000",
                connection="Upgrade",
                upgrade="websocket",
                sec_websocket_key="mumbojumbo==",
                sec_websocket_version=13,
            )
        except management_api.ApiException as e:
            assert e.status == 404
            assert "device not found" in str(e.body)
        else:
            raise Exception("Expected status code 404")

        try:
            api_mgmt.connect(
                dev.id,
                connection="Upgrade",
                upgrade="websocket",
                sec_websocket_key="mumbojumbo==",
                sec_websocket_version=13,
            )
        except management_api.ApiException as e:
            assert e.status == 404
            assert "device not connected" in str(e.body)
        else:
            raise Exception("Expected status code 404")

        with dev.connect() as dev_conn:
            try:
                api_mgmt.connect(dev.id)
            except management_api.ApiException as e:
                assert e.status == 400
                assert "the client is not using the websocket protocol" in e.body
            else:
                raise Exception("Expected status code 400")

            try:
                api_mgmt.connect(
                    dev.id,
                    connection="Upgrade",
                    upgrade="websocket",
                    sec_websocket_key="mumbojumbo==",
                    sec_websocket_version=13,
                )
            except management_api.ApiException as e:
                assert e.status == 101
            else:
                raise Exception("Expected status code 101")

            with management_api_connect(dev.id,
                                        tenant_id=tenant_id) as user_conn:
                user_conn.send(msgpack.dumps({
                    "type": "shell",
                    "data": None,
                }))
                msg = dev_conn.recv()
                assert msgpack.loads(msg) == {
                    "type": "shell",
                    "data": None,
                    "session_id": "",
                    "status_code": 0
                }
                dev_conn.send(
                    msgpack.dumps({
                        "type": "shell",
                        "data": b"sh-5.0$ "
                    }))
                msg = user_conn.recv()
                assert msgpack.loads(msg) == {
                    "type": "shell",
                    "data": b"sh-5.0$ ",
                    "session_id": "",
                    "status_code": 0
                }

        try:
            api_mgmt.connect(
                dev.id,
                connection="Upgrade",
                upgrade="websocket",
                sec_websocket_key="mumbojumbo==",
                sec_websocket_version=13,
            )
        except management_api.ApiException as e:
            assert e.status == 404
        else:
            raise Exception("Expected status code 404")