blob: e5eb0446e67af915644c58f5fa8bcde78088eaf3 [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
Emily Hugenbruche252a4a2015-02-27 15:43:12 +000029 def setup_clients(cls):
30 super(S3ImagesTest, cls).setup_clients()
31 cls.s3_client = cls.os.s3_client
32 cls.images_client = cls.os.ec2api_client
33
34 @classmethod
Andrea Frittoli29fea352014-09-15 13:31:14 +010035 def resource_setup(cls):
36 super(S3ImagesTest, cls).resource_setup()
Attila Fazekas234d3e82013-02-22 16:39:49 +010037 if not cls.conclusion['A_I_IMAGES_READY']:
ivan-zhu1feeb382013-01-24 10:14:39 +080038 raise cls.skipException("".join(("EC2 ", cls.__name__,
39 ": requires ami/aki/ari manifest")))
Matthew Treinish88f49ef2014-01-29 18:36:27 +000040 cls.materials_path = CONF.boto.s3_materials_path
41 cls.ami_manifest = CONF.boto.ami_manifest
42 cls.aki_manifest = CONF.boto.aki_manifest
43 cls.ari_manifest = CONF.boto.ari_manifest
Attila Fazekasa23f5002012-10-23 19:32:45 +020044 cls.ami_path = cls.materials_path + os.sep + cls.ami_manifest
45 cls.aki_path = cls.materials_path + os.sep + cls.aki_manifest
46 cls.ari_path = cls.materials_path + os.sep + cls.ari_manifest
Masayuki Igawa259c1132013-10-31 17:48:44 +090047 cls.bucket_name = data_utils.rand_name("bucket-")
Attila Fazekasa23f5002012-10-23 19:32:45 +020048 bucket = cls.s3_client.create_bucket(cls.bucket_name)
49 cls.addResourceCleanUp(cls.destroy_bucket,
50 cls.s3_client.connection_data,
51 cls.bucket_name)
Masayuki Igawa224a8272014-02-17 15:07:43 +090052 s3.s3_upload_dir(bucket, cls.materials_path)
Attila Fazekasa23f5002012-10-23 19:32:45 +020053
Attila Fazekasa23f5002012-10-23 19:32:45 +020054 def test_register_get_deregister_ami_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050055 # Register and deregister ami image
Masayuki Igawa259c1132013-10-31 17:48:44 +090056 image = {"name": data_utils.rand_name("ami-name-"),
Attila Fazekasa23f5002012-10-23 19:32:45 +020057 "location": self.bucket_name + "/" + self.ami_manifest,
58 "type": "ami"}
59 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -040060 name=image["name"],
61 image_location=image["location"])
Attila Fazekas3e381f72013-08-01 16:52:23 +020062 # NOTE(afazekas): delete_snapshot=True might trigger boto lib? bug
Attila Fazekasa23f5002012-10-23 19:32:45 +020063 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -040064 self.images_client.deregister_image,
65 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020066 self.assertEqual(image["image_id"][0:3], image["type"])
67 retrieved_image = self.images_client.get_image(image["image_id"])
68 self.assertTrue(retrieved_image.name == image["name"])
69 self.assertTrue(retrieved_image.id == image["image_id"])
Attila Fazekas95d4f1f2013-07-26 07:40:02 +020070 if retrieved_image.state != "available":
71 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +020072 self.images_client.deregister_image(image["image_id"])
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053073 self.assertNotIn(image["image_id"], str(
74 self.images_client.get_all_images()))
Attila Fazekasa23f5002012-10-23 19:32:45 +020075 self.cancelResourceCleanUp(image["cleanUp"])
76
Attila Fazekasa23f5002012-10-23 19:32:45 +020077 def test_register_get_deregister_aki_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050078 # Register and deregister aki image
Masayuki Igawa259c1132013-10-31 17:48:44 +090079 image = {"name": data_utils.rand_name("aki-name-"),
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053080 "location": self.bucket_name + "/" + self.aki_manifest,
Attila Fazekasa23f5002012-10-23 19:32:45 +020081 "type": "aki"}
82 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -040083 name=image["name"],
84 image_location=image["location"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020085 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -040086 self.images_client.deregister_image,
87 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020088 self.assertEqual(image["image_id"][0:3], image["type"])
89 retrieved_image = self.images_client.get_image(image["image_id"])
90 self.assertTrue(retrieved_image.name == image["name"])
91 self.assertTrue(retrieved_image.id == image["image_id"])
92 self.assertIn(retrieved_image.state, self.valid_image_state)
93 if retrieved_image.state != "available":
Attila Fazekas40aa3612013-01-19 22:16:38 +010094 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +020095 self.images_client.deregister_image(image["image_id"])
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053096 self.assertNotIn(image["image_id"], str(
97 self.images_client.get_all_images()))
Attila Fazekasa23f5002012-10-23 19:32:45 +020098 self.cancelResourceCleanUp(image["cleanUp"])
99
Attila Fazekasa23f5002012-10-23 19:32:45 +0200100 def test_register_get_deregister_ari_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -0500101 # Register and deregister ari image
Masayuki Igawa259c1132013-10-31 17:48:44 +0900102 image = {"name": data_utils.rand_name("ari-name-"),
Attila Fazekasa23f5002012-10-23 19:32:45 +0200103 "location": "/" + self.bucket_name + "/" + self.ari_manifest,
104 "type": "ari"}
105 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -0400106 name=image["name"],
107 image_location=image["location"])
Attila Fazekasa23f5002012-10-23 19:32:45 +0200108 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -0400109 self.images_client.deregister_image,
110 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +0200111 self.assertEqual(image["image_id"][0:3], image["type"])
112 retrieved_image = self.images_client.get_image(image["image_id"])
113 self.assertIn(retrieved_image.state, self.valid_image_state)
114 if retrieved_image.state != "available":
Attila Fazekas40aa3612013-01-19 22:16:38 +0100115 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +0200116 self.assertIn(retrieved_image.state, self.valid_image_state)
117 self.assertTrue(retrieved_image.name == image["name"])
118 self.assertTrue(retrieved_image.id == image["image_id"])
119 self.images_client.deregister_image(image["image_id"])
120 self.cancelResourceCleanUp(image["cleanUp"])
121
Attila Fazekas3e381f72013-08-01 16:52:23 +0200122# TODO(afazekas): less copy-paste style