Merge "Add tempest test for heat resource OS::Nova::KeyPair"
This commit is contained in:
commit
6a66e52d2f
181
tempest/api/orchestration/stacks/test_nova_keypair_resources.py
Normal file
181
tempest/api/orchestration/stacks/test_nova_keypair_resources.py
Normal file
@ -0,0 +1,181 @@
|
||||
# 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 logging
|
||||
|
||||
from tempest.api.orchestration import base
|
||||
from tempest.common.utils import data_utils
|
||||
from tempest.test import attr
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class NovaKeyPairResourcesYAMLTest(base.BaseOrchestrationTest):
|
||||
_interface = 'json'
|
||||
template = """
|
||||
heat_template_version: 2013-05-23
|
||||
|
||||
description: >
|
||||
Template which creates two key pairs.
|
||||
|
||||
parameters:
|
||||
KeyPairName1:
|
||||
type: string
|
||||
default: testkey
|
||||
|
||||
KeyPairName2:
|
||||
type: string
|
||||
default: testkey2
|
||||
|
||||
resources:
|
||||
KeyPairSavePrivate:
|
||||
type: OS::Nova::KeyPair
|
||||
properties:
|
||||
name: { get_param: KeyPairName1 }
|
||||
save_private_key: true
|
||||
|
||||
KeyPairDontSavePrivate:
|
||||
type: OS::Nova::KeyPair
|
||||
properties:
|
||||
name: { get_param: KeyPairName2 }
|
||||
save_private_key: false
|
||||
|
||||
outputs:
|
||||
KeyPair_PublicKey:
|
||||
description: Public Key of generated keypair
|
||||
value: { get_attr: [KeyPairSavePrivate, public_key] }
|
||||
|
||||
KeyPair_PrivateKey:
|
||||
description: Private Key of generated keypair
|
||||
value: { get_attr: [KeyPairSavePrivate, private_key] }
|
||||
|
||||
KeyPairDontSavePrivate_PublicKey:
|
||||
description: Public Key of generated keypair
|
||||
value: { get_attr: [KeyPairDontSavePrivate, public_key] }
|
||||
|
||||
KeyPairDontSavePrivate_PrivateKey:
|
||||
description: Private Key of generated keypair
|
||||
value: { get_attr: [KeyPairDontSavePrivate, private_key] }
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(NovaKeyPairResourcesYAMLTest, cls).setUpClass()
|
||||
cls.client = cls.orchestration_client
|
||||
cls.stack_name = data_utils.rand_name('heat')
|
||||
|
||||
# create the stack, avoid any duplicated key.
|
||||
cls.stack_identifier = cls.create_stack(
|
||||
cls.stack_name,
|
||||
cls.template,
|
||||
parameters={
|
||||
'KeyPairName1': cls.stack_name + '_1',
|
||||
'KeyPairName2': cls.stack_name + '_2'
|
||||
})
|
||||
|
||||
cls.stack_id = cls.stack_identifier.split('/')[1]
|
||||
cls.client.wait_for_stack_status(cls.stack_id, 'CREATE_COMPLETE')
|
||||
_, resources = cls.client.list_resources(cls.stack_identifier)
|
||||
cls.test_resources = {}
|
||||
for resource in resources:
|
||||
cls.test_resources[resource['logical_resource_id']] = resource
|
||||
|
||||
@attr(type='slow')
|
||||
def test_created_resources(self):
|
||||
"""Verifies created keypair resource."""
|
||||
resources = [('KeyPairSavePrivate', 'OS::Nova::KeyPair'),
|
||||
('KeyPairDontSavePrivate', 'OS::Nova::KeyPair')]
|
||||
|
||||
for resource_name, resource_type in resources:
|
||||
resource = self.test_resources.get(resource_name, None)
|
||||
self.assertIsInstance(resource, dict)
|
||||
self.assertEqual(resource_name, resource['logical_resource_id'])
|
||||
self.assertEqual(resource_type, resource['resource_type'])
|
||||
self.assertEqual('CREATE_COMPLETE', resource['resource_status'])
|
||||
|
||||
@attr(type='slow')
|
||||
def test_stack_keypairs_output(self):
|
||||
resp, stack = self.client.get_stack(self.stack_name)
|
||||
self.assertEqual('200', resp['status'])
|
||||
self.assertIsInstance(stack, dict)
|
||||
|
||||
output_map = {}
|
||||
for outputs in stack['outputs']:
|
||||
output_map[outputs['output_key']] = outputs['output_value']
|
||||
#Test that first key generated public and private keys
|
||||
self.assertTrue('KeyPair_PublicKey' in output_map)
|
||||
self.assertTrue("Generated by" in output_map['KeyPair_PublicKey'])
|
||||
self.assertTrue('KeyPair_PrivateKey' in output_map)
|
||||
self.assertTrue('-----BEGIN' in output_map['KeyPair_PrivateKey'])
|
||||
#Test that second key generated public key, and private key is not
|
||||
#in the output due to save_private_key = false
|
||||
self.assertTrue('KeyPairDontSavePrivate_PublicKey' in output_map)
|
||||
self.assertTrue('Generated by' in
|
||||
output_map['KeyPairDontSavePrivate_PublicKey'])
|
||||
self.assertTrue(u'KeyPairDontSavePrivate_PrivateKey' in output_map)
|
||||
private_key = output_map['KeyPairDontSavePrivate_PrivateKey']
|
||||
self.assertTrue(len(private_key) == 0)
|
||||
|
||||
|
||||
class NovaKeyPairResourcesAWSTest(NovaKeyPairResourcesYAMLTest):
|
||||
template = """
|
||||
{
|
||||
"AWSTemplateFormatVersion" : "2010-09-09",
|
||||
"Description" : "Template which create two key pairs.",
|
||||
"Parameters" : {
|
||||
"KeyPairName1": {
|
||||
"Type": "String",
|
||||
"Default": "testkey1"
|
||||
},
|
||||
"KeyPairName2": {
|
||||
"Type": "String",
|
||||
"Default": "testkey2"
|
||||
}
|
||||
},
|
||||
"Resources" : {
|
||||
"KeyPairSavePrivate": {
|
||||
"Type": "OS::Nova::KeyPair",
|
||||
"Properties": {
|
||||
"name" : { "Ref" : "KeyPairName1" },
|
||||
"save_private_key": true
|
||||
}
|
||||
},
|
||||
"KeyPairDontSavePrivate": {
|
||||
"Type": "OS::Nova::KeyPair",
|
||||
"Properties": {
|
||||
"name" : { "Ref" : "KeyPairName2" },
|
||||
"save_private_key": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"Outputs": {
|
||||
"KeyPair_PublicKey": {
|
||||
"Description": "Public Key of generated keypair.",
|
||||
"Value": { "Fn::GetAtt" : ["KeyPairSavePrivate", "public_key"] }
|
||||
},
|
||||
"KeyPair_PrivateKey": {
|
||||
"Description": "Private Key of generated keypair.",
|
||||
"Value": { "Fn::GetAtt" : ["KeyPairSavePrivate", "private_key"] }
|
||||
},
|
||||
"KeyPairDontSavePrivate_PublicKey": {
|
||||
"Description": "Public Key of generated keypair.",
|
||||
"Value": { "Fn::GetAtt" : ["KeyPairDontSavePrivate", "public_key"] }
|
||||
},
|
||||
"KeyPairDontSavePrivate_PrivateKey": {
|
||||
"Description": "Private Key of generated keypair.",
|
||||
"Value": { "Fn::GetAtt" : ["KeyPairDontSavePrivate", "private_key"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
Loading…
Reference in New Issue
Block a user