blob: c2f622caba703010bb2797b1c8942c1b2243639f [file] [log] [blame]
Matthew Treinish7b015822014-01-21 18:15:39 +00001# Copyright 2014 IBM Corp.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15import time
16
17import mock
18
19from tempest.common import waiters
20from tempest import exceptions
guo yunxianebb15f22016-11-01 21:03:35 +080021from tempest.lib import exceptions as lib_exc
lkuchlanf53947e2016-09-15 10:37:57 +030022from tempest.lib.services.volume.v2 import volumes_client
Matthew Treinishffad78a2016-04-16 14:39:52 -040023from tempest.tests import base
Jordan Pittier0e53b612016-03-03 14:23:17 +010024import tempest.tests.utils as utils
Matthew Treinish7b015822014-01-21 18:15:39 +000025
26
27class TestImageWaiters(base.TestCase):
28 def setUp(self):
29 super(TestImageWaiters, self).setUp()
30 self.client = mock.MagicMock()
31 self.client.build_timeout = 1
32 self.client.build_interval = 1
33
34 def test_wait_for_image_status(self):
Ken'ichi Ohmichi5d410762015-05-22 01:10:03 +000035 self.client.show_image.return_value = ({'status': 'active'})
Matthew Treinish7b015822014-01-21 18:15:39 +000036 start_time = int(time.time())
37 waiters.wait_for_image_status(self.client, 'fake_image_id', 'active')
38 end_time = int(time.time())
39 # Ensure waiter returns before build_timeout
Béla Vancsics64862f72016-11-08 09:12:31 +010040 self.assertLess((end_time - start_time), 10)
Matthew Treinish7b015822014-01-21 18:15:39 +000041
Yaroslav Lobankov2fea4052016-04-19 15:05:57 +030042 def test_wait_for_image_status_timeout(self):
Jordan Pittier0e53b612016-03-03 14:23:17 +010043 time_mock = self.patch('time.time')
44 time_mock.side_effect = utils.generate_timeout_series(1)
45
Ken'ichi Ohmichi5d410762015-05-22 01:10:03 +000046 self.client.show_image.return_value = ({'status': 'saving'})
guo yunxianebb15f22016-11-01 21:03:35 +080047 self.assertRaises(lib_exc.TimeoutException,
Matthew Treinish7b015822014-01-21 18:15:39 +000048 waiters.wait_for_image_status,
49 self.client, 'fake_image_id', 'active')
50
Yaroslav Lobankov2fea4052016-04-19 15:05:57 +030051 def test_wait_for_image_status_error_on_image_create(self):
Ken'ichi Ohmichi5d410762015-05-22 01:10:03 +000052 self.client.show_image.return_value = ({'status': 'ERROR'})
Matthew Treinish7b015822014-01-21 18:15:39 +000053 self.assertRaises(exceptions.AddImageException,
54 waiters.wait_for_image_status,
55 self.client, 'fake_image_id', 'active')
Matt Riedemannf77e7dc2015-08-10 16:39:39 -070056
57 @mock.patch.object(time, 'sleep')
58 def test_wait_for_volume_status_error_restoring(self, mock_sleep):
59 # Tests that the wait method raises VolumeRestoreErrorException if
60 # the volume status is 'error_restoring'.
lkuchlanf53947e2016-09-15 10:37:57 +030061 client = mock.Mock(spec=volumes_client.VolumesClient,
Matt Riedemannf77e7dc2015-08-10 16:39:39 -070062 build_interval=1)
John Warren6177c9e2015-08-19 20:00:17 +000063 volume1 = {'volume': {'status': 'restoring-backup'}}
64 volume2 = {'volume': {'status': 'error_restoring'}}
Matt Riedemannf77e7dc2015-08-10 16:39:39 -070065 mock_show = mock.Mock(side_effect=(volume1, volume2))
66 client.show_volume = mock_show
67 volume_id = '7532b91e-aa0a-4e06-b3e5-20c0c5ee1caa'
68 self.assertRaises(exceptions.VolumeRestoreErrorException,
lkuchlan52d7b0d2016-11-07 20:53:19 +020069 waiters.wait_for_volume_resource_status,
Matt Riedemannf77e7dc2015-08-10 16:39:39 -070070 client, volume_id, 'available')
71 mock_show.assert_has_calls([mock.call(volume_id),
72 mock.call(volume_id)])
73 mock_sleep.assert_called_once_with(1)