Exemplo n.º 1
0
    def test_else_http(self):
        # test hosts must not redirect http to https
        hosts = [
            "www.google.com",
        ]

        for host in hosts:
            # http by default
            try:
                verta.Client(host, max_retries=0)
            except requests.HTTPError as e:
                assert e.request.url.split(':', 1)[0] == "http"
            else:
                raise RuntimeError("faulty test; expected error")

            # http if provided
            try:
                verta.Client("http://{}".format(host), max_retries=0)
            except requests.HTTPError as e:
                assert e.request.url.split(':', 1)[0] == "http"
            else:
                raise RuntimeError("faulty test; expected error")

            # https if provided
            try:
                verta.Client("https://{}".format(host), max_retries=0)
            except requests.HTTPError as e:
                assert e.request.url.split(':', 1)[0] == "https"
            else:
                raise RuntimeError("faulty test; expected error")
Exemplo n.º 2
0
    def config_file_with_type_util(self, connect):
        PROJECT_NAME = _utils.generate_default_name()
        DATASET_NAME = _utils.generate_default_name()
        EXPERIMENT_NAME = _utils.generate_default_name()
        CONFIG_FILENAME = "verta_config.json"

        HOST_KEY, EMAIL_KEY, DEV_KEY_KEY = "VERTA_HOST", "VERTA_EMAIL", "VERTA_DEV_KEY"

        HOST, EMAIL, DEV_KEY = os.environ[HOST_KEY], os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY]
        try:
            del os.environ[HOST_KEY], os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY]

            try:
                with open(CONFIG_FILENAME, 'w') as f:
                    json.dump(
                        {
                            'host': HOST,
                            'email': EMAIL, 'dev_key': DEV_KEY,
                            'project': PROJECT_NAME,
                            'experiment': EXPERIMENT_NAME,
                            'dataset': DATASET_NAME,
                        },
                        f,
                    )

                client = verta.Client(_connect=connect)
                conn = client._conn

                back_end_url = urlparse(HOST)
                socket = back_end_url.netloc + back_end_url.path.rstrip('/')

                assert conn.socket == socket
                assert conn.auth['Grpc-Metadata-email'] == EMAIL
                assert conn.auth['Grpc-Metadata-developer_key'] == DEV_KEY
                assert conn.auth['Grpc-Metadata-developer-key'] == DEV_KEY

                if connect:
                    try:
                        assert client.set_experiment_run()
                        assert client.proj.name == PROJECT_NAME
                        assert client.expt.name == EXPERIMENT_NAME
                    finally:
                        if client.proj is not None:
                            client.proj.delete()
                    dataset = client.set_dataset()
                    try:
                        assert dataset.name == DATASET_NAME
                    finally:
                        dataset.delete()
                else:
                    assert client._set_from_config_if_none(None, "project") == PROJECT_NAME
                    assert client._set_from_config_if_none(None, "experiment") == EXPERIMENT_NAME
                    assert client._set_from_config_if_none(None, "dataset") == DATASET_NAME

            finally:
                if os.path.exists(CONFIG_FILENAME):
                    os.remove(CONFIG_FILENAME)
        finally:
            os.environ[HOST_KEY], os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY] = HOST, EMAIL, DEV_KEY
Exemplo n.º 3
0
    def test_no_auth(self, host):
        client = verta.Client(host)

        # it's just been revoked
        client._conn.auth = None

        assert client.set_project()
        utils.delete_project(client.proj.id, client._conn)
Exemplo n.º 4
0
    def test_extra_auth_headers_in_request(self, strs):
        headers = dict(zip(strs[:len(strs) // 2], strs[len(strs) // 2:]))
        client = verta.Client(extra_auth_headers=headers)

        url = "http://httpbin.org/anything"
        response = _utils.make_request("GET", url, client._conn)

        for key, val in headers.items():
            assert key in response.request.headers
            assert val == response.request.headers[key]
Exemplo n.º 5
0
    def test_verta_https(self):
        hosts = [
            "app.verta.ai",
        ]

        for host in hosts:
            # https by default
            conn = verta.Client(host)._conn
            assert conn.scheme == "https"
            assert conn.scheme == conn.auth['Grpc-Metadata-scheme']

            # http if provided
            conn = verta.Client("http://{}".format(host))._conn
            assert conn.scheme == "http"
            assert conn.scheme == conn.auth['Grpc-Metadata-scheme']

            # https if provided
            conn = verta.Client("https://{}".format(host))._conn
            assert conn.scheme == "https"
            assert conn.scheme == conn.auth['Grpc-Metadata-scheme']
Exemplo n.º 6
0
    def test_config_file(self):
        PROJECT_NAME = "test_project"
        DATASET_NAME = "test_dataset"
        EXPERIMENT_NAME = "test_experiment"
        CONFIG_FILENAME = "verta_config.json"

        HOST = "app.verta.ai"
        EMAIL_KEY, DEV_KEY_KEY = "VERTA_EMAIL", "VERTA_DEV_KEY"

        EMAIL, DEV_KEY = os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY]
        try:
            del os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY]

            try:
                with open(CONFIG_FILENAME, 'w') as f:
                    json.dump(
                        {
                            'host': HOST,
                            'email': EMAIL,
                            'dev_key': DEV_KEY,
                            'project': PROJECT_NAME,
                            'experiment': EXPERIMENT_NAME,
                            'dataset': DATASET_NAME,
                        },
                        f,
                    )

                client = verta.Client()
                conn = client._conn

                assert conn.socket == HOST
                assert conn.auth['Grpc-Metadata-email'] == EMAIL
                assert conn.auth['Grpc-Metadata-developer_key'] == DEV_KEY

                try:
                    assert client.set_experiment_run()
                    assert client.proj.name == PROJECT_NAME
                    assert client.expt.name == EXPERIMENT_NAME
                finally:
                    if client.proj is not None:
                        utils.delete_project(client.proj.id, conn)

                dataset = client.set_dataset()
                try:
                    assert dataset.name == DATASET_NAME
                finally:
                    utils.delete_datasets([dataset.id], conn)

            finally:
                if os.path.exists(CONFIG_FILENAME):
                    os.remove(CONFIG_FILENAME)
        finally:
            os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY] = EMAIL, DEV_KEY
Exemplo n.º 7
0
    def test_auth_headers(self, host):
        expected_headers = {
            'Grpc-Metadata-email': os.environ['VERTA_EMAIL'],
            'Grpc-Metadata-developer_key': os.environ['VERTA_DEV_KEY'],
            'Grpc-Metadata-developer-key': os.environ['VERTA_DEV_KEY'],
        }

        def assert_contains_expected_headers(headers):
            for key, val in expected_headers.items():
                assert key in headers
                assert headers[key] == val

        # present in Client state
        client = verta.Client(host)
        assert_contains_expected_headers(client._conn.auth)

        # sent in requests
        with pytest.raises(requests.HTTPError) as exc_info:
            verta.Client("www.google.com")
        request = exc_info.value.request
        assert_contains_expected_headers(request.headers)
Exemplo n.º 8
0
    def test_wrong_credentials(self):
        EMAIL_KEY, DEV_KEY_KEY = "VERTA_EMAIL", "VERTA_DEV_KEY"
        old_email, old_dev_key = os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY]

        try:
            os.environ[EMAIL_KEY] = "*****@*****.**"
            os.environ[DEV_KEY_KEY] = "def"

            with pytest.raises(requests.exceptions.HTTPError) as excinfo:
                verta.Client()

            excinfo_value = str(excinfo.value).strip()
            assert "401 Client Error" in excinfo_value
            assert "authentication failed; please check `VERTA_EMAIL` and `VERTA_DEV_KEY`" in excinfo_value
        finally:
            os.environ[EMAIL_KEY], os.environ[DEV_KEY_KEY] = old_email, old_dev_key
Exemplo n.º 9
0
    def test_no_auth(self, host):
        EMAIL_KEY, DEV_KEY_KEY = "VERTA_EMAIL", "VERTA_DEV_KEY"
        EMAIL, DEV_KEY = os.environ.pop(EMAIL_KEY, None), os.environ.pop(DEV_KEY_KEY, None)
        try:
            client = verta.Client(host)

            # still has source set
            assert 'Grpc-Metadata-source' in client._conn.auth

            assert client.set_project()

            client.proj.delete()
        finally:
            if EMAIL is not None:
                os.environ[EMAIL_KEY] = EMAIL
            if DEV_KEY is not None:
                os.environ[DEV_KEY_KEY] = DEV_KEY
Exemplo n.º 10
0
    def test_extra_auth_headers_in_conn(self, headers):
        client = verta.Client(extra_auth_headers=headers, _connect=False)

        for key, val in headers.items():
            assert key in client._conn.auth
            assert val == client._conn.auth[key]