blob: 4b7d9ddf57638a54237550567807e4699c928d98 [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
Matthew Treinish481466b2012-12-20 17:16:01 -050018from tempest import clients
Masayuki Igawa259c1132013-10-31 17:48:44 +090019from tempest.common.utils import data_utils
Chris Yeoh01cb2792013-02-09 22:25:37 +103020from tempest.test import attr
Sean Dague09761f62013-05-13 15:20:40 -040021from tempest.thirdparty.boto.test import BotoTestCase
22from tempest.thirdparty.boto.utils.s3 import s3_upload_dir
Attila Fazekasa23f5002012-10-23 19:32:45 +020023
24
Attila Fazekasa23f5002012-10-23 19:32:45 +020025class S3ImagesTest(BotoTestCase):
26
27 @classmethod
28 def setUpClass(cls):
29 super(S3ImagesTest, cls).setUpClass()
Attila Fazekas234d3e82013-02-22 16:39:49 +010030 if not cls.conclusion['A_I_IMAGES_READY']:
ivan-zhu1feeb382013-01-24 10:14:39 +080031 raise cls.skipException("".join(("EC2 ", cls.__name__,
32 ": requires ami/aki/ari manifest")))
Matthew Treinish481466b2012-12-20 17:16:01 -050033 cls.os = clients.Manager()
Attila Fazekasa23f5002012-10-23 19:32:45 +020034 cls.s3_client = cls.os.s3_client
35 cls.images_client = cls.os.ec2api_client
Attila Fazekasdc216422013-01-29 15:12:14 +010036 config = cls.config
Attila Fazekasa23f5002012-10-23 19:32:45 +020037 cls.materials_path = config.boto.s3_materials_path
38 cls.ami_manifest = config.boto.ami_manifest
39 cls.aki_manifest = config.boto.aki_manifest
40 cls.ari_manifest = config.boto.ari_manifest
41 cls.ami_path = cls.materials_path + os.sep + cls.ami_manifest
42 cls.aki_path = cls.materials_path + os.sep + cls.aki_manifest
43 cls.ari_path = cls.materials_path + os.sep + cls.ari_manifest
Masayuki Igawa259c1132013-10-31 17:48:44 +090044 cls.bucket_name = data_utils.rand_name("bucket-")
Attila Fazekasa23f5002012-10-23 19:32:45 +020045 bucket = cls.s3_client.create_bucket(cls.bucket_name)
46 cls.addResourceCleanUp(cls.destroy_bucket,
47 cls.s3_client.connection_data,
48 cls.bucket_name)
49 s3_upload_dir(bucket, cls.materials_path)
50
Attila Fazekasa23f5002012-10-23 19:32:45 +020051 @attr(type='smoke')
52 def test_register_get_deregister_ami_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050053 # Register and deregister ami image
Masayuki Igawa259c1132013-10-31 17:48:44 +090054 image = {"name": data_utils.rand_name("ami-name-"),
Attila Fazekasa23f5002012-10-23 19:32:45 +020055 "location": self.bucket_name + "/" + self.ami_manifest,
56 "type": "ami"}
57 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -040058 name=image["name"],
59 image_location=image["location"])
Attila Fazekas3e381f72013-08-01 16:52:23 +020060 # NOTE(afazekas): delete_snapshot=True might trigger boto lib? bug
Attila Fazekasa23f5002012-10-23 19:32:45 +020061 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -040062 self.images_client.deregister_image,
63 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020064 self.assertEqual(image["image_id"][0:3], image["type"])
65 retrieved_image = self.images_client.get_image(image["image_id"])
66 self.assertTrue(retrieved_image.name == image["name"])
67 self.assertTrue(retrieved_image.id == image["image_id"])
Attila Fazekas95d4f1f2013-07-26 07:40:02 +020068 if retrieved_image.state != "available":
69 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +020070 self.images_client.deregister_image(image["image_id"])
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053071 self.assertNotIn(image["image_id"], str(
72 self.images_client.get_all_images()))
Attila Fazekasa23f5002012-10-23 19:32:45 +020073 self.cancelResourceCleanUp(image["cleanUp"])
74
Attila Fazekasa23f5002012-10-23 19:32:45 +020075 def test_register_get_deregister_aki_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050076 # Register and deregister aki image
Masayuki Igawa259c1132013-10-31 17:48:44 +090077 image = {"name": data_utils.rand_name("aki-name-"),
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053078 "location": self.bucket_name + "/" + self.aki_manifest,
Attila Fazekasa23f5002012-10-23 19:32:45 +020079 "type": "aki"}
80 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -040081 name=image["name"],
82 image_location=image["location"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020083 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -040084 self.images_client.deregister_image,
85 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +020086 self.assertEqual(image["image_id"][0:3], image["type"])
87 retrieved_image = self.images_client.get_image(image["image_id"])
88 self.assertTrue(retrieved_image.name == image["name"])
89 self.assertTrue(retrieved_image.id == image["image_id"])
90 self.assertIn(retrieved_image.state, self.valid_image_state)
91 if retrieved_image.state != "available":
Attila Fazekas40aa3612013-01-19 22:16:38 +010092 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +020093 self.images_client.deregister_image(image["image_id"])
Hoisaleshwara Madan V Saed773c2013-05-27 16:53:44 +053094 self.assertNotIn(image["image_id"], str(
95 self.images_client.get_all_images()))
Attila Fazekasa23f5002012-10-23 19:32:45 +020096 self.cancelResourceCleanUp(image["cleanUp"])
97
Attila Fazekasa23f5002012-10-23 19:32:45 +020098 def test_register_get_deregister_ari_image(self):
Sean Dague64ef48d2013-01-03 17:54:36 -050099 # Register and deregister ari image
Masayuki Igawa259c1132013-10-31 17:48:44 +0900100 image = {"name": data_utils.rand_name("ari-name-"),
Attila Fazekasa23f5002012-10-23 19:32:45 +0200101 "location": "/" + self.bucket_name + "/" + self.ari_manifest,
102 "type": "ari"}
103 image["image_id"] = self.images_client.register_image(
Sean Dague14c68182013-04-14 15:34:30 -0400104 name=image["name"],
105 image_location=image["location"])
Attila Fazekasa23f5002012-10-23 19:32:45 +0200106 image["cleanUp"] = self.addResourceCleanUp(
Sean Dague14c68182013-04-14 15:34:30 -0400107 self.images_client.deregister_image,
108 image["image_id"])
Attila Fazekasa23f5002012-10-23 19:32:45 +0200109 self.assertEqual(image["image_id"][0:3], image["type"])
110 retrieved_image = self.images_client.get_image(image["image_id"])
111 self.assertIn(retrieved_image.state, self.valid_image_state)
112 if retrieved_image.state != "available":
Attila Fazekas40aa3612013-01-19 22:16:38 +0100113 self.assertImageStateWait(retrieved_image, "available")
Attila Fazekasa23f5002012-10-23 19:32:45 +0200114 self.assertIn(retrieved_image.state, self.valid_image_state)
115 self.assertTrue(retrieved_image.name == image["name"])
116 self.assertTrue(retrieved_image.id == image["image_id"])
117 self.images_client.deregister_image(image["image_id"])
118 self.cancelResourceCleanUp(image["cleanUp"])
119
Attila Fazekas3e381f72013-08-01 16:52:23 +0200120# TODO(afazekas): less copy-paste style