summaryrefslogtreecommitdiff
path: root/barbicanclient/tests/v1/test_consumers.py
blob: 7b0c400f029f511a709dd9df2256bb8f020334b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# Copyright 2022 Red Hat Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from barbicanclient import client
from barbicanclient.tests import test_client
from barbicanclient.tests.utils import mock_delete_secret_for_responses
from barbicanclient.tests.utils import mock_get_secret_for_client
from barbicanclient.tests.v1.test_secrets import SecretData
from barbicanclient.v1 import secrets

from oslo_serialization import jsonutils


class WhenTestingConsumers(test_client.BaseEntityResource):

    def setUp(self):
        self._setUp('secrets')

        self.secret = SecretData()

        self.client_v1_0 = client.Client(
            endpoint=self.endpoint, project_id=self.project_id,
            microversion='1.0')

        self.manager = self.client.secrets
        self.manager_v1_0 = self.client_v1_0.secrets

        self.consumers_post_resource = self.entity_href + '/consumers/'
        self.consumers_delete_resource = self.entity_href + '/consumers'

    def test_register_consumer_fails_with_lower_microversion(self):
        self.assertRaises(
            NotImplementedError, self.manager_v1_0.register_consumer,
            self.entity_href, self.secret.consumer.get('service'),
            self.secret.consumer.get('resource_type'),
            self.secret.consumer.get('resource_id'))

    def _register_consumer(self):
        data = self.secret.get_dict(
            self.entity_href, consumers=[self.secret.consumer])
        self.responses.post(self.entity_href + '/consumers/', json=data)
        return self.manager.register_consumer(
            self.entity_href, self.secret.consumer.get('service'),
            self.secret.consumer.get('resource_type'),
            self.secret.consumer.get('resource_id'))

    def test_should_register_consumer_with_correct_microversion(self):
        self._register_consumer()

    def test_should_register_consumer_and_return_secret(self):
        self.assertIsInstance(self._register_consumer(), secrets.Secret)

    def test_should_register_consumer_with_correct_secret_href(self):
        secret = self._register_consumer()
        self.assertEqual(self.entity_href, secret.secret_ref)

    def test_should_register_consumer_with_correct_url(self):
        self._register_consumer()
        self.assertEqual(
            self.consumers_post_resource, self.responses.last_request.url)

    def test_should_register_consumer_with_consumer(self):
        secret = self._register_consumer()
        self.assertEqual([self.secret.consumer], secret.consumers)

    def test_remove_consumer_fails_with_lower_microversion(self):
        self.assertRaises(
            NotImplementedError, self.manager_v1_0.remove_consumer,
            self.entity_href, self.secret.consumer.get('service'),
            self.secret.consumer.get('resource_type'),
            self.secret.consumer.get('resource_id'))

    def _remove_consumer(self):
        self.responses.delete(self.entity_href + '/consumers', status_code=204)
        self.manager.remove_consumer(
            self.entity_href, self.secret.consumer.get('service'),
            self.secret.consumer.get('resource_type'),
            self.secret.consumer.get('resource_id'))

    def test_should_remove_consumer_with_correct_microversion(self):
        self._remove_consumer()

    def test_should_remove_consumer_with_correct_url(self):
        self._remove_consumer()
        self.assertEqual(
            self.consumers_delete_resource, self.responses.last_request.url)

    def test_should_remove_consumer_with_correct_consumer(self):
        self._remove_consumer()
        self.assertEqual(
            self.consumers_delete_resource, self.responses.last_request.url)

        body = jsonutils.loads(self.responses.last_request.text)
        self.assertEqual(self.secret.consumer, body)

    def _delete_from_manager(self, secret_ref, force=False, consumers=[]):
        mock_get_secret_for_client(self.client, consumers=consumers)
        mock_delete_secret_for_responses(self.responses, self.entity_href)
        self.manager.delete(secret_ref=secret_ref, force=force)

    def _delete_from_manager_with_consumers(self, secret_ref, force=False):
        consumers = [{'service': 'service_test',
                      'resource_type': 'type_test',
                      'resource_id': 'id_test'}]

        self._delete_from_manager(secret_ref, force=force, consumers=consumers)

    def test_delete_from_manager_fails_with_consumers_without_force(self):
        self.assertRaises(
            ValueError,
            self._delete_from_manager_with_consumers, self.entity_href,
            force=False)

    def test_should_delete_from_manager_with_consumers_and_force(self):
        self._delete_from_manager_with_consumers(self.entity_href, force=True)

    def test_should_delete_from_manager_without_consumers_and_force(self):
        self._delete_from_manager(self.entity_href, force=True)