Merge "Add new test "RebuildInstanceWithVolume""
diff --git a/tempest/scenario/test_rebuild_instance_with_volume.py b/tempest/scenario/test_rebuild_instance_with_volume.py
new file mode 100644
index 0000000..7764425
--- /dev/null
+++ b/tempest/scenario/test_rebuild_instance_with_volume.py
@@ -0,0 +1,83 @@
+# Copyright 2016 Mirantis Inc.
+# 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 import config
+from tempest.scenario import manager
+from tempest import test
+
+CONF = config.CONF
+
+
+class TestRebuildInstanceWithVolume(manager.ScenarioTest):
+ """Verifying functionality of rebuilding instance with attached volume
+
+ The following is the scenario outline:
+ 1. Boot an instance
+ 2. Create a volume
+ 3. Attach the volume to the instance
+ 4. Create a file with timestamp on the volume
+ 5. Rebuild the instance
+ 6. Check existence of the file which was created at step #4
+ 7. Detach the volume
+ """
+
+ @test.idempotent_id('36c3d492-f5bd-11e4-b9b2-1697f925ec7b')
+ @test.services('compute', 'volume', 'image', 'network')
+ def test_rebuild_instance_with_volume(self):
+ # create key pair and security group
+ keypair = self.create_keypair()
+ security_group = self._create_security_group()
+
+ # boot an instance
+ server = self.create_server(
+ image_id=CONF.compute.image_ref,
+ key_name=keypair['name'],
+ security_groups=[{'name': security_group['name']}],
+ wait_until='ACTIVE')
+
+ # get instance IP
+ server_ip = self.get_server_ip(server)
+
+ # create volume, attach it and create timestamp file on it
+ volume = self.create_volume()
+ attached_volume = self.nova_volume_attach(server, volume)
+ timestamp = self.create_timestamp(
+ server_ip,
+ dev_name=CONF.compute.volume_device_name,
+ private_key=keypair['private_key'])
+
+ # NOTE: for rebuild we use the same image,
+ # so we should verify that VM was actually rebuilt
+ ssh_client = self.get_remote_client(server_ip,
+ private_key=keypair['private_key'])
+ cmd_addstamp = 'sudo sh -c "echo \'#check_rebuild\' >> /etc/fstab"'
+ fstab = ssh_client.exec_command('%s; cat /etc/fstab' % cmd_addstamp)
+
+ # rebuild instance
+ self.rebuild_server(server['id'])
+
+ # verify that instance was actually rebuilt
+ actual_fstab = ssh_client.exec_command('cat /etc/fstab')
+ self.assertNotEqual(fstab, actual_fstab, 'Server was not rebuilt')
+
+ # check existence of the timestamp file in the volume
+ timestamp2 = self.get_timestamp(
+ server_ip,
+ dev_name=CONF.compute.volume_device_name,
+ private_key=keypair['private_key'])
+ self.assertEqual(timestamp, timestamp2)
+
+ # detach volume
+ self.nova_volume_detach(server, attached_volume)