示例#1
0
class TestK8SResourceDetailViewV1(BaseViewTest):
    serializer_class = None
    model_class = None
    factory_class = None
    HAS_AUTH = True
    ADMIN_USER = True

    def setUp(self):
        super().setUp()
        self.normal_client = AuthorizedClient()
        self.object = self.factory_class()  # pylint:disable=not-callable
        self.url = self.get_url()
        self.queryset = self.model_class.objects.all()

    def get_url(self):
        return ''

    def test_get(self):
        resp = self.auth_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

        # Non admin can get
        resp = self.normal_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

    def test_patch(self):
        data = {
            'name': 'foo',
            'description': 'new description',
            'tags': ['foo', 'bar'],
            'k8s_ref': 'new_ref',
            'keys': ['key1', 'key2'],
        }
        assert self.object.name != data['name']
        assert self.object.description != data['description']
        assert self.object.tags != data['tags']
        assert self.object.k8s_ref != data['k8s_ref']
        assert self.object.keys != data['keys']

        resp = self.auth_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=self.object.id)
        assert new_object.name == data['name']
        assert new_object.description == data['description']
        assert new_object.tags == data['tags']
        assert new_object.k8s_ref == data['k8s_ref']
        assert new_object.keys == data['keys']

        # Non admin
        resp = self.normal_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

    def test_delete(self):
        # Non admin
        resp = self.normal_client.delete(self.url)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

        assert self.model_class.objects.count() == 1
        resp = self.auth_client.delete(self.url)
        assert resp.status_code == status.HTTP_204_NO_CONTENT
        assert self.model_class.objects.count() == 0
示例#2
0
class TestDataStoreDetailViewV1(BaseViewTest):
    serializer_class = DataStoreSerializer
    model_class = DataStore
    factory_class = DataStoreFactory
    HAS_AUTH = True
    ADMIN_USER = True

    def setUp(self):
        super().setUp()
        self.normal_client = AuthorizedClient()
        self.object = self.factory_class()
        self.url = '/{}/catalogs/data_stores/{}/'.format(
            API_V1, self.object.name)
        self.queryset = self.model_class.objects.all()

    def test_get(self):
        resp = self.auth_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

        # Non admin can get
        resp = self.normal_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

    def test_patch(self):
        secret = K8SSecretFactory()

        data = {
            'name': 'foo',
            'description': 'new description',
            'tags': ['foo', 'bar'],
            'type': StoreTypes.S3,
            'bucket': 'foo',
            'k8s_secret': secret.id,
            'read_only': True
        }
        assert self.object.name != data['name']
        assert self.object.description != data['description']
        assert self.object.tags != data['tags']
        assert self.object.type != data['type']
        assert self.object.bucket != data['bucket']
        assert self.object.k8s_secret != data['k8s_secret']
        assert self.object.read_only is False

        resp = self.auth_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=self.object.id)
        assert new_object.name == data['name']
        assert new_object.description == data['description']
        assert set(new_object.tags) == set(data['tags'])
        assert new_object.type == data['type']
        assert new_object.bucket == data['bucket']
        assert new_object.k8s_secret.id == data['k8s_secret']
        assert new_object.read_only is True

        # Non admin
        resp = self.normal_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

    def test_delete(self):
        # Non admin
        resp = self.normal_client.delete(self.url)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

        assert self.model_class.objects.count() == 1
        resp = self.auth_client.delete(self.url)
        assert resp.status_code == status.HTTP_204_NO_CONTENT
        assert self.model_class.objects.count() == 0
示例#3
0
class TestRegistryAccessDetailViewV1(BaseViewTest):
    serializer_class = RegistryAccessSerializer
    model_class = RegistryAccess
    factory_class = RegistryAccessFactory
    HAS_AUTH = True
    ADMIN_USER = True

    def setUp(self):
        super().setUp()
        self.normal_client = AuthorizedClient()
        self.object = self.factory_class()
        self.url = '/{}/catalogs/registry_access/{}/'.format(API_V1, self.object.name)
        self.queryset = self.model_class.objects.all()

    def test_get(self):
        resp = self.auth_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

        # Non admin can get
        resp = self.normal_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

    def test_patch(self):
        secret = K8SSecretFactory()

        data = {
            'name': 'foo',
            'description': 'new description',
            'tags': ['foo', 'bar'],
            'host': 'https://foo.bar',
            'k8s_secret': secret.id,
        }
        assert self.object.name != data['name']
        assert self.object.description != data['description']
        assert self.object.tags != data['tags']
        assert self.object.host != data['host']
        assert self.object.k8s_secret != data['k8s_secret']

        resp = self.auth_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=self.object.id)
        assert new_object.name == data['name']
        assert new_object.description == data['description']
        assert set(new_object.tags) == set(data['tags'])
        assert new_object.host == data['host']
        assert new_object.k8s_secret.id == data['k8s_secret']

        # Non admin
        resp = self.normal_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

    def test_delete(self):
        # Non admin
        resp = self.normal_client.delete(self.url)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

        assert self.model_class.objects.count() == 1
        resp = self.auth_client.delete(self.url)
        assert resp.status_code == status.HTTP_204_NO_CONTENT
        assert self.model_class.objects.count() == 0
示例#4
0
class TestRegistryAccessDetailViewV1(BaseViewTest):
    serializer_class = RegistryAccessSerializer
    model_class = RegistryAccess
    factory_class = RegistryAccessFactory
    HAS_AUTH = True
    ADMIN_USER = True

    def setUp(self):
        super().setUp()
        self.normal_client = AuthorizedClient()
        self.object = self.factory_class()
        self.url = self.get_access_url(self.object.name)
        self.queryset = self.model_class.objects.all()

    @staticmethod
    def get_access_url(name):
        return '/{}/catalogs/registry_access/{}/'.format(API_V1, name)

    def test_get(self):
        resp = self.auth_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

        # Non admin can get
        resp = self.normal_client.get(self.url)
        assert resp.status_code == status.HTTP_200_OK
        assert resp.data == self.serializer_class(self.object).data

    def test_patch(self):
        secret = K8SSecretFactory()

        data = {
            'name': 'foo',
            'description': 'new description',
            'tags': ['foo', 'bar'],
            'host': 'https://foo.bar',
            'k8s_secret': secret.id,
        }
        assert self.object.name != data['name']
        assert self.object.description != data['description']
        assert self.object.tags != data['tags']
        assert self.object.host != data['host']
        assert self.object.k8s_secret != data['k8s_secret']

        resp = self.auth_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=self.object.id)
        assert new_object.name == data['name']
        assert new_object.description == data['description']
        assert set(new_object.tags) == set(data['tags'])
        assert new_object.host == data['host']
        assert new_object.k8s_secret.id == data['k8s_secret']

        # Path an access without a host
        new_secret = K8SSecretFactory()
        last_object = RegistryAccess.objects.create(owner=self.object.owner,
                                                    name='my_registry',
                                                    k8s_secret=secret)
        assert last_object.owner.owner == Cluster.load()
        assert last_object.name == 'my_registry'
        assert last_object.description is None
        assert last_object.tags is None
        assert last_object.host == ''
        assert last_object.k8s_secret.id == data['k8s_secret']
        url = self.get_access_url(last_object.name)

        # Patch
        data = {
            'k8s_secret': new_secret.id,
        }
        resp = self.auth_client.patch(url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=last_object.id)
        assert new_object.name == 'my_registry'
        assert new_object.description is None
        assert new_object.tags is None
        assert new_object.host == ''
        assert new_object.k8s_secret.id == data['k8s_secret']

        # Patch
        data = {
            'tags': ['foo', 'bar'],
        }
        resp = self.auth_client.patch(url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=last_object.id)
        assert new_object.name == 'my_registry'
        assert new_object.description is None
        assert set(new_object.tags) == set(data['tags'])
        assert new_object.host == ''
        assert new_object.k8s_secret.id == new_secret.id

        # Patch
        data = {'tags': ['foo', 'bar'], 'host': ''}
        resp = self.auth_client.patch(url, data=data)
        assert resp.status_code == status.HTTP_200_OK
        new_object = self.model_class.objects.get(id=last_object.id)
        assert new_object.name == 'my_registry'
        assert new_object.description is None
        assert set(new_object.tags) == set(data['tags'])
        assert new_object.host == ''
        assert new_object.k8s_secret.id == new_secret.id

        # Non admin
        resp = self.normal_client.patch(self.url, data=data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

    def test_delete(self):
        # Non admin
        resp = self.normal_client.delete(self.url)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

        assert self.model_class.objects.count() == 1
        resp = self.auth_client.delete(self.url)
        assert resp.status_code == status.HTTP_204_NO_CONTENT
        assert self.model_class.objects.count() == 0