barbican/functionaltests/api/v1/smoke/test_consumers.py
Thomas Dinkjian 0b8743948a Added smoke tests for consumers
Moved consumers tests from functional to smoke tests.
Added test to handle get consumers.
Also added consumer behaviors and the consumer model.

Change-Id: I3466fbf6c0f13ba9ea483a8251f19b00104968a3
2014-12-01 09:12:46 -06:00

217 lines
7.6 KiB
Python

# Copyright (c) 2014 Rackspace, 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.
import copy
from testtools import testcase
from functionaltests.api import base
from functionaltests.api.v1.behaviors import consumer_behaviors
from functionaltests.api.v1.behaviors import container_behaviors
from functionaltests.api.v1.behaviors import secret_behaviors
from functionaltests.api.v1.models import consumer_model
from functionaltests.api.v1.models import container_models
from functionaltests.api.v1.models import secret_models
create_secret_data = {
"name": "AES key",
"expiration": "2018-02-28T19:14:44.180394",
"algorithm": "aes",
"bit_length": 256,
"mode": "cbc",
"payload": "gF6+lLoF3ohA9aPRpt+6bQ==",
"payload_content_type": "application/octet-stream",
"payload_content_encoding": "base64",
}
default_consumer_data = {
"name": "consumername",
"URL": "consumerURL"
}
create_container_data = {
"name": "containername",
"type": "generic",
"secret_refs": [
{
"name": "secret1",
},
{
"name": "secret2",
}
]
}
class ConsumersTestCase(base.TestCase):
default_data = default_consumer_data
def _create_a_secret(self):
secret_model = secret_models.SecretModel(**create_secret_data)
resp, secret_ref = self.secret_behaviors.create_secret(secret_model)
self.assertEqual(resp.status_code, 201)
self.assertIsNotNone(secret_ref)
return secret_ref
def setUp(self):
super(ConsumersTestCase, self).setUp()
self.secret_behaviors = secret_behaviors.SecretBehaviors(self.client)
self.container_behaviors = container_behaviors.ContainerBehaviors(
self.client
)
self.consumer_behaviors = consumer_behaviors.ConsumerBehaviors(
self.client
)
self.consumer_data = copy.deepcopy(self.default_data)
# Set up two secrets
secret_ref_1 = self._create_a_secret()
secret_ref_2 = self._create_a_secret()
# Create a container with our secrets
create_container_data['secret_refs'][0]['secret_ref'] = secret_ref_1
create_container_data['secret_refs'][1]['secret_ref'] = secret_ref_2
container_model = container_models.ContainerModel(
**create_container_data
)
resp, container_ref = self.container_behaviors.create_container(
container_model
)
self.assertEqual(resp.status_code, 201)
self.assertIsNotNone(container_ref)
self.container_ref = container_ref
def tearDown(self):
self.secret_behaviors.delete_all_created_secrets()
super(ConsumersTestCase, self).tearDown()
@testcase.attr('positive')
def test_create_consumer_defaults(self):
"""Covers consumer creation.
All of the data needed to create the consumer is provided in a
single POST.
"""
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
@testcase.attr('positive')
def test_get_consumer_defaults(self):
"""Tests getting a list of consumers for a container."""
# Create first consumer
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
# Create second consumer
test_model.name = "consumername2"
test_model.URL = "consumerURL2"
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
# Get list of consumers
resp, consumers, nref, pref = self.consumer_behaviors.get_consumers(
self.container_ref
)
self.assertEqual(resp.status_code, 200)
self.assertIn("consumername", consumers[0].name)
self.assertIn("consumername2", consumers[1].name)
@testcase.attr('positive')
def test_delete_consumer_defaults(self):
"""Covers consumer deletion.
A consumer is first created, and then the consumer is deleted and
verified to no longer exist.
"""
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
# Delete the consumer
resp, consumer_data = self.consumer_behaviors.delete_consumer(
test_model, self.container_ref
)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
self.assertNotIn(test_model.name, consumer_data)
self.assertNotIn(test_model.URL, consumer_data)
@testcase.attr('positive')
def test_recreate_consumer_defaults(self):
"""Covers consumer recreation."""
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
# Delete the consumer
resp, consumer_data = self.consumer_behaviors.delete_consumer(
test_model, self.container_ref
)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
self.assertNotIn(test_model.name, consumer_data)
self.assertNotIn(test_model.URL, consumer_data)
# Register the consumer again
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
@testcase.attr('positive')
def test_create_consumer_defaults_is_idempotent(self):
"""Covers checking that create consumer is idempotent."""
# Register the consumer once
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
# Register the consumer again, without deleting it first
test_model = consumer_model.ConsumerModel(**self.consumer_data)
resp, consumer_data = self.consumer_behaviors.create_consumer(
test_model, self.container_ref)
count = consumer_data.count(self.consumer_data)
self.assertEqual(resp.status_code, 200)
self.assertIsNotNone(consumer_data)
self.assertIn(self.consumer_data, consumer_data)
self.assertEqual(1, count)