ec2-api/ec2api/tests/functional/api/test_key_pairs.py

150 lines
6.3 KiB
Python

# Copyright 2014 OpenStack Foundation
# All Rights Reserved.
#
# 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 tempest.lib import decorators
import testtools
from ec2api.tests.functional import base
from ec2api.tests.functional import config
CONF = config.CONF
class KeyPairTest(base.EC2TestCase):
@decorators.idempotent_id('15cfd866-d6bb-473a-9b8a-6420900a5ca3')
def test_create_delete_key_pair(self):
keyName = 'Test key'
data = self.client.create_key_pair(KeyName=keyName)
res_clean = self.addResourceCleanUp(self.client.delete_key_pair,
KeyName=keyName)
self.assertEqual(keyName, data['KeyName'])
self.assertIsNotNone(data.get('KeyFingerprint'))
self.assertGreater(len(data['KeyFingerprint']), 0)
self.assertGreater(len(data.get('KeyMaterial')), 0)
data = self.client.delete_key_pair(KeyName=keyName)
self.cancelResourceCleanUp(res_clean)
@decorators.idempotent_id('05478a51-1505-42a8-8c7d-4fd7e32c467e')
def test_create_duplicate_key_pair(self):
keyName = 'Test key'
self.client.create_key_pair(KeyName=keyName)
res_clean = self.addResourceCleanUp(self.client.delete_key_pair,
KeyName=keyName)
self.assertRaises('InvalidKeyPair.Duplicate',
self.client.create_key_pair,
KeyName=keyName)
self.client.delete_key_pair(KeyName=keyName)
self.cancelResourceCleanUp(res_clean)
@decorators.idempotent_id('43d87b6e-6667-4d19-8c0b-e73901105bb7')
def test_describe_key_pairs(self):
keyName = 'Test key'
data = self.client.create_key_pair(KeyName=keyName)
res_clean = self.addResourceCleanUp(self.client.delete_key_pair,
KeyName=keyName)
self.assertIsNotNone(data.get('KeyFingerprint'))
self.assertGreater(len(data['KeyFingerprint']), 0)
fingerprint = data.get('KeyFingerprint')
data = self.client.describe_key_pairs(KeyNames=[keyName])
self.assertEqual(1, len(data.get('KeyPairs')))
data = data['KeyPairs'][0]
self.assertEqual(keyName, data['KeyName'])
self.assertIsNotNone(data.get('KeyFingerprint'))
self.assertGreater(len(data['KeyFingerprint']), 0)
self.assertIsNone(data.get('KeyMaterial'))
data = self.client.describe_key_pairs(
Filters=[{'Name': 'key-name', 'Values': [keyName]}])
self.assertEqual(1, len(data.get('KeyPairs')))
self.assertEqual(keyName, data['KeyPairs'][0]['KeyName'])
data = self.client.describe_key_pairs(
Filters=[{'Name': 'fingerprint', 'Values': [fingerprint]}])
self.assertEqual(1, len(data.get('KeyPairs')))
self.assertEqual(keyName, data['KeyPairs'][0]['KeyName'])
self.assertRaises('InvalidKeyPair.NotFound',
self.client.describe_key_pairs,
KeyNames=['fake key'])
data = self.client.delete_key_pair(KeyName=keyName)
self.cancelResourceCleanUp(res_clean)
self.assertRaises('InvalidKeyPair.NotFound',
self.client.describe_key_pairs,
KeyNames=[keyName])
# NOTE(andrey-mp): Amazon allows to delete absent key and returns 200
self.client.delete_key_pair(KeyName=keyName)
@decorators.idempotent_id('0e51eec5-3f61-4d8a-89c9-8d098f381682')
def test_import_empty_key_pair(self):
keyName = 'Test key'
publicKey = ''
def _rollback(fn_data):
self.client.delete_key_pair(KeyName=keyName)
self.assertRaises('MissingParameter',
self.client.import_key_pair,
rollback_fn=_rollback,
KeyName=keyName, PublicKeyMaterial=publicKey)
@decorators.idempotent_id('478c17e6-b7ca-4115-bee2-be279bdd0f65')
@testtools.skipUnless(CONF.aws.run_incompatible_tests,
"Different error code")
def test_import_invalid_key_pair(self):
keyName = 'Test key'
publicKey = 'ssh-rsa JUNK test@ubuntu'
def _rollback():
self.client.delete_key_pair(KeyName=keyName)
self.assertRaises('InvalidKey.Format',
self.client.import_key_pair,
rollback_fn=_rollback,
KeyName=keyName, PublicKeyMaterial=publicKey)
@decorators.idempotent_id('eda525d6-144b-4840-b6ba-e18d93e3589f')
def test_import_key_pair(self):
keyName = 'Test key'
publicKey = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs"
"Ne3/1ILNCqFyfYWDeTKLD6jEXC2OQHLmietMWW+/vd"
"aZq7KZEwO0jhglaFjU1mpqq4Gz5RX156sCTNM9vRbw"
"KAxfsdF9laBYVsex3m3Wmui3uYrKyumsoJn2g9GNnG1P"
"I1mrVjZ61i0GY3khna+wzlTpCCmy5HNlrmbj3XLqBUpip"
"TOXmsnr4sChzC53KCd8LXuwc1i/CZPvF+3XipvAgFSE53pCt"
"LOeB1kYMOBaiUPLQTWXR3JpckqFIQwhIH0zoHlJvZE8hh90"
"XcPojYN56tI0OlrGqojbediJYD0rUsJu4weZpbn8vilb3JuDY+jws"
"snSA8wzBx3A/8y9Pp1B test@ubuntu")
data = self.client.import_key_pair(KeyName=keyName,
PublicKeyMaterial=publicKey)
res_clean = self.addResourceCleanUp(self.client.delete_key_pair,
KeyName=keyName)
self.assertEqual(keyName, data['KeyName'])
self.assertIsNotNone(data.get('KeyFingerprint'))
self.assertGreater(len(data['KeyFingerprint']), 0)
self.assertIsNone(data.get('KeyMaterial'))
self.client.delete_key_pair(KeyName=keyName)
self.cancelResourceCleanUp(res_clean)