blob: f5dec955d844a41c14e6150a73738b07ec33aa75 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Attila Fazekasa23f5002012-10-23 19:32:45 +02002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Matthew Treinisha83a16e2012-12-07 13:44:02 -050016import os
17
Masayuki Igawa259c1132013-10-31 17:48:44 +090018from tempest.common.utils import data_utils
Matthew Treinish88f49ef2014-01-29 18:36:27 +000019from tempest import config
Masayuki Igawa224a8272014-02-17 15:07:43 +090020from tempest.thirdparty.boto import test as boto_test
21from tempest.thirdparty.boto.utils import s3
Attila Fazekasa23f5002012-10-23 19:32:45 +020022
Matthew Treinish88f49ef2014-01-29 18:36:27 +000023CONF = config.CONF
24
Attila Fazekasa23f5002012-10-23 19:32:45 +020025
Masayuki Igawa224a8272014-02-17 15:07:43 +090026class S3ImagesTest(boto_test.BotoTestCase):
Attila Fazekasa23f5002012-10-23 19:32:45 +020027
28 @classmethod
Andrea Frittoli29fea352014-09-15 13:31:14 +010029 def resource_setup(cls):
30 super(S3ImagesTest, cls).resource_setup()
Attila Fazekas234d3e82013-02-22 16:39:49 +010031 if not cls.conclusion['A_I_IMAGES_READY']:
ivan-zhu1feeb382013-01-24 10:14:39 +080032 raise cls.skipException("".join(("EC2 ", cls.__name__,
33 ": requires ami/aki/ari manifest")))
Attila Fazekasa23f5002012-10-23 19:32:45 +020034 cls.s3_client = cls.os.s3_client
35 cls.images_client = cls.os.ec2api_client
Matthew Treinish88f49ef2014-01-29 18:36:27 +000036 cls.materials_path = CONF.boto.s3_materials_path
37 cls.ami_manifest = CONF.boto.ami_manifest
38 cls.aki_manifest = CONF.boto.aki_manifest
39 cls.ari_manifest = CONF.boto.ari_manifest
Attila Fazekasa23f5002012-10-23 19:32:45 +020040 cls.ami_path = cls.materials_path + os.sep + cls.ami_manifest
41 cls.aki_path = cls.materials_path + os.sep + cls.aki_manifest
42 cls.ari_path = cls.materials_path + os.sep + cls.ari_manifest
Masayuki Igawa259c1132013-10-31 17:48:44 +090043 cls.bucket_name = data_utils.rand_name("bucket-")
Attila Fazekasa23f5002012-10-23 19:32:45 +020044 bucket = cls.s3_client.create_bucket(cls.bucket_name)
45 cls.addResourceCleanUp(cls.destroy_bucket,
46 cls.s3_client.connection_data,
47 cls.bucket_name)
Masayuki Igawa224a8272014-02-17 15:07:43 +090048 s3.s3_upload_dir(bucket, cls.materials_path)
Attila Fazekasa23f5002012-10-23 19:32:45 +020049
Attila Fazekasa23f5002012-10-23 19:32:45 +020050 def test_register_get_deregister_ami_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050051 # Register and deregister ami image
Masayuki Igawa259c1132013-10-31 17:48:44 +090052 image = {"name": data_utils.rand_name("ami-name-"),
Attila Fazekasa23f5002012-10-23 19:32:45 +020053 "location": self.bucket_name + "/" + self.ami_manifest,
54 "type": "ami"}
55 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -040056 name=image["name"],
57 image_location=image["location"])
Attila Fazekas3e381f72013-08-01 16:52:23 +020058 # NOTE(afazekas): delete_snapshot=True might trigger boto lib? bug
Attila Fazekasa23f5002012-10-23 19:32:45 +020059 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -040060 self.images_client.deregister_image,
61 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020062 self.assertEqual(image["image_id"][0:3], image["type"])
63 retrieved_image = self.images_client.get_image(image["image_id"])
64 self.assertTrue(retrieved_image.name == image["name"])
65 self.assertTrue(retrieved_image.id == image["image_id"])
Attila Fazekas95d4f1f2013-07-26 07:40:02 +020066 if retrieved_image.state != "available":
67 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +020068 self.images_client.deregister_image(image["image_id"])
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053069 self.assertNotIn(image["image_id"], str(
70 self.images_client.get_all_images()))
Attila Fazekasa23f5002012-10-23 19:32:45 +020071 self.cancelResourceCleanUp(image["cleanUp"])
72
Attila Fazekasa23f5002012-10-23 19:32:45 +020073 def test_register_get_deregister_aki_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050074 # Register and deregister aki image
Masayuki Igawa259c1132013-10-31 17:48:44 +090075 image = {"name": data_utils.rand_name("aki-name-"),
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053076 "location": self.bucket_name + "/" + self.aki_manifest,
Attila Fazekasa23f5002012-10-23 19:32:45 +020077 "type": "aki"}
78 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -040079 name=image["name"],
80 image_location=image["location"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020081 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -040082 self.images_client.deregister_image,
83 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020084 self.assertEqual(image["image_id"][0:3], image["type"])
85 retrieved_image = self.images_client.get_image(image["image_id"])
86 self.assertTrue(retrieved_image.name == image["name"])
87 self.assertTrue(retrieved_image.id == image["image_id"])
88 self.assertIn(retrieved_image.state, self.valid_image_state)
89 if retrieved_image.state != "available":
Attila Fazekas40aa3612013-01-19 22:16:38 +010090 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +020091 self.images_client.deregister_image(image["image_id"])
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053092 self.assertNotIn(image["image_id"], str(
93 self.images_client.get_all_images()))
Attila Fazekasa23f5002012-10-23 19:32:45 +020094 self.cancelResourceCleanUp(image["cleanUp"])
95
Attila Fazekasa23f5002012-10-23 19:32:45 +020096 def test_register_get_deregister_ari_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050097 # Register and deregister ari image
Masayuki Igawa259c1132013-10-31 17:48:44 +090098 image = {"name": data_utils.rand_name("ari-name-"),
Attila Fazekasa23f5002012-10-23 19:32:45 +020099 "location": "/" + self.bucket_name + "/" + self.ari_manifest,
100 "type": "ari"}
101 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -0400102 name=image["name"],
103 image_location=image["location"])
Attila Fazekasa23f5002012-10-23 19:32:45 +0200104 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -0400105 self.images_client.deregister_image,
106 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +0200107 self.assertEqual(image["image_id"][0:3], image["type"])
108 retrieved_image = self.images_client.get_image(image["image_id"])
109 self.assertIn(retrieved_image.state, self.valid_image_state)
110 if retrieved_image.state != "available":
Attila Fazekas40aa3612013-01-19 22:16:38 +0100111 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +0200112 self.assertIn(retrieved_image.state, self.valid_image_state)
113 self.assertTrue(retrieved_image.name == image["name"])
114 self.assertTrue(retrieved_image.id == image["image_id"])
115 self.images_client.deregister_image(image["image_id"])
116 self.cancelResourceCleanUp(image["cleanUp"])
117
Attila Fazekas3e381f72013-08-01 16:52:23 +0200118# TODO(afazekas): less copy-paste style