Fix unit tests with py27
Fix building unit tests with py27. Signed-off-by: Chuck Short <chuck.short@canonical.com>
This commit is contained in:
parent
3457fa29b4
commit
88e7fdd568
|
@ -2,6 +2,8 @@
|
||||||
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
||||||
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
||||||
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
|
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
|
||||||
${PYTHON:-python} -m subunit.run discover -t ./ . $LISTOPT $IDOPTION
|
${PYTHON:-python} -m subunit.run discover \
|
||||||
|
-t ./nova/tests/unit/virt/lxd/ ./nova/tests/unit/virt/lxd \
|
||||||
|
$LISTOPT $IDOPTION
|
||||||
test_id_option=--load-list $IDFILE
|
test_id_option=--load-list $IDFILE
|
||||||
test_list_option=--list
|
test_list_option=--list
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
# Copyright 2015 Canonical Ltd
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import ddt
|
|
||||||
import mock
|
|
||||||
|
|
||||||
from nova import test
|
|
||||||
|
|
||||||
from nova_lxd.nova.virt.lxd import session
|
|
||||||
from nova_lxd.tests import stubs
|
|
||||||
|
|
||||||
|
|
||||||
@ddt.ddt
|
|
||||||
class SessionEventTest(test.NoDBTestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super(SessionEventTest, self).setUp()
|
|
||||||
|
|
||||||
self.ml = stubs.lxd_mock()
|
|
||||||
lxd_patcher = mock.patch('pylxd.api.API',
|
|
||||||
mock.Mock(return_value=self.ml))
|
|
||||||
lxd_patcher.start()
|
|
||||||
self.addCleanup(lxd_patcher.stop)
|
|
||||||
|
|
||||||
self.session = session.LXDAPISession()
|
|
||||||
|
|
||||||
def test_container_wait(self):
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
operation_id = mock.Mock()
|
|
||||||
self.ml.wait_container_operation.return_value = True
|
|
||||||
self.assertEqual(None,
|
|
||||||
self.session.operation_wait(operation_id, instance))
|
|
||||||
self.ml.wait_container_operation.assert_called_with(operation_id,
|
|
||||||
200, -1)
|
|
|
@ -1,54 +0,0 @@
|
||||||
# Copyright 2015 Canonical Ltd
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import ddt
|
|
||||||
import mock
|
|
||||||
|
|
||||||
from nova import test
|
|
||||||
|
|
||||||
from nova_lxd.nova.virt.lxd import session
|
|
||||||
from nova_lxd.tests import stubs
|
|
||||||
|
|
||||||
|
|
||||||
@ddt.ddt
|
|
||||||
class SessionImageTest(test.NoDBTestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super(SessionImageTest, self).setUp()
|
|
||||||
|
|
||||||
self.ml = stubs.lxd_mock()
|
|
||||||
lxd_patcher = mock.patch('pylxd.api.API',
|
|
||||||
mock.Mock(return_value=self.ml))
|
|
||||||
lxd_patcher.start()
|
|
||||||
self.addCleanup(lxd_patcher.stop)
|
|
||||||
|
|
||||||
self.session = session.LXDAPISession()
|
|
||||||
|
|
||||||
def test_image_defined(self):
|
|
||||||
"""Test the image is defined in the LXD hypervisor."""
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
self.ml.alias_defined.return_value = True
|
|
||||||
self.assertTrue(self.session.image_defined(instance))
|
|
||||||
calls = [mock.call.alias_defined(instance.image_ref)]
|
|
||||||
self.assertEqual(calls, self.ml.method_calls)
|
|
||||||
|
|
||||||
def test_alias_create(self):
|
|
||||||
"""Test the alias is created."""
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
alias = mock.Mock()
|
|
||||||
self.ml.alias_create.return_value = True
|
|
||||||
self.assertTrue(self.session.create_alias(alias, instance))
|
|
||||||
calls = [mock.call.alias_create(alias)]
|
|
||||||
self.assertEqual(calls, self.ml.method_calls)
|
|
|
@ -1,38 +0,0 @@
|
||||||
# Copyright 2015 Canonical Ltd
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import ddt
|
|
||||||
import mock
|
|
||||||
|
|
||||||
from nova import test
|
|
||||||
|
|
||||||
from nova_lxd.nova.virt.lxd import session
|
|
||||||
from nova_lxd.tests import stubs
|
|
||||||
|
|
||||||
|
|
||||||
@ddt.ddt
|
|
||||||
class SessionMigrateTest(test.NoDBTestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super(SessionMigrateTest, self).setUp()
|
|
||||||
|
|
||||||
"""This is so we can mock out pylxd API calls."""
|
|
||||||
self.ml = stubs.lxd_mock()
|
|
||||||
lxd_patcher = mock.patch('pylxd.api.API',
|
|
||||||
mock.Mock(return_value=self.ml))
|
|
||||||
lxd_patcher.start()
|
|
||||||
self.addCleanup(lxd_patcher.stop)
|
|
||||||
|
|
||||||
self.session = session.LXDAPISession()
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Copyright 2015 Canonical Ltd
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
|
|
||||||
import ddt
|
|
||||||
import mock
|
|
||||||
|
|
||||||
from nova import exception
|
|
||||||
from nova import test
|
|
||||||
from pylxd.deprecated import exceptions as lxd_exceptions
|
|
||||||
|
|
||||||
from nova_lxd.nova.virt.lxd import session
|
|
||||||
from nova_lxd.tests import fake_api
|
|
||||||
from nova_lxd.tests import stubs
|
|
||||||
|
|
||||||
|
|
||||||
@ddt.ddt
|
|
||||||
class SessionProfileTest(test.NoDBTestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super(SessionProfileTest, self).setUp()
|
|
||||||
|
|
||||||
"""This is so we can mock out pylxd API calls."""
|
|
||||||
self.ml = stubs.lxd_mock()
|
|
||||||
lxd_patcher = mock.patch('pylxd.api.API',
|
|
||||||
mock.Mock(return_value=self.ml))
|
|
||||||
lxd_patcher.start()
|
|
||||||
self.addCleanup(lxd_patcher.stop)
|
|
||||||
|
|
||||||
self.session = session.LXDAPISession()
|
|
||||||
|
|
||||||
@stubs.annotated_data(
|
|
||||||
('empty', [], []),
|
|
||||||
('valid', ['test'], ['test']),
|
|
||||||
)
|
|
||||||
def test_profile_list(self, tag, side_effect, expected):
|
|
||||||
self.ml.profile_list.return_value = side_effect
|
|
||||||
self.assertEqual(expected,
|
|
||||||
self.session.profile_list())
|
|
||||||
|
|
||||||
def test_profile_list_fail(self):
|
|
||||||
self.ml.profile_list.side_effect = (
|
|
||||||
lxd_exceptions.APIError('Fake', 500))
|
|
||||||
self.assertRaises(
|
|
||||||
exception.NovaException,
|
|
||||||
self.session.profile_list)
|
|
||||||
|
|
||||||
def test_profile_create(self):
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
config = mock.Mock()
|
|
||||||
self.ml.profile_defined.return_value = True
|
|
||||||
self.ml.profile_create.return_value = \
|
|
||||||
(200, fake_api.fake_standard_return())
|
|
||||||
self.assertEqual((200, fake_api.fake_standard_return()),
|
|
||||||
self.session.profile_create(config,
|
|
||||||
instance))
|
|
||||||
calls = [mock.call.profile_list(),
|
|
||||||
mock.call.profile_create(config)]
|
|
||||||
self.assertEqual(calls, self.ml.method_calls)
|
|
||||||
|
|
||||||
def test_profile_delete(self):
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
self.ml.profile_defined.return_value = True
|
|
||||||
self.ml.profile_delete.return_value = \
|
|
||||||
(200, fake_api.fake_standard_return())
|
|
||||||
self.assertEqual(None,
|
|
||||||
self.session.profile_delete(instance))
|
|
|
@ -1,81 +0,0 @@
|
||||||
# Copyright 2015 Canonical Ltd
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import ddt
|
|
||||||
import mock
|
|
||||||
|
|
||||||
from nova import exception
|
|
||||||
from nova import test
|
|
||||||
from pylxd.deprecated import exceptions as lxd_exceptions
|
|
||||||
|
|
||||||
from nova_lxd.nova.virt.lxd import session
|
|
||||||
from nova_lxd.tests import fake_api
|
|
||||||
from nova_lxd.tests import stubs
|
|
||||||
|
|
||||||
|
|
||||||
@ddt.ddt
|
|
||||||
class SessionSnapshotTest(test.NoDBTestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super(SessionSnapshotTest, self).setUp()
|
|
||||||
|
|
||||||
"""This is so we can mock out pylxd API calls."""
|
|
||||||
self.ml = stubs.lxd_mock()
|
|
||||||
lxd_patcher = mock.patch('pylxd.api.API',
|
|
||||||
mock.Mock(return_value=self.ml))
|
|
||||||
lxd_patcher.start()
|
|
||||||
self.addCleanup(lxd_patcher.stop)
|
|
||||||
|
|
||||||
self.session = session.LXDAPISession()
|
|
||||||
|
|
||||||
@stubs.annotated_data(
|
|
||||||
('1,', (200, fake_api.fake_operation_info_ok()))
|
|
||||||
)
|
|
||||||
def test_container_snapshot(self, tag, side_effect):
|
|
||||||
snapshot = mock.Mock()
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
self.ml.container_snapshot_create.return_value = side_effect
|
|
||||||
self.assertEqual(None,
|
|
||||||
self.session.container_snapshot(snapshot, instance))
|
|
||||||
calls = [
|
|
||||||
mock.call.container_snapshot_create(instance.name, snapshot),
|
|
||||||
mock.call.wait_container_operation(
|
|
||||||
'/1.0/operation/1234', 200, -1)]
|
|
||||||
self.assertEqual(calls, self.ml.method_calls)
|
|
||||||
|
|
||||||
@stubs.annotated_data(
|
|
||||||
('api_fail', lxd_exceptions.APIError(500, 'Fake'),
|
|
||||||
exception.NovaException)
|
|
||||||
)
|
|
||||||
def test_container_snapshot_fail(self, tag, side_effect, expected):
|
|
||||||
snapshot = mock.Mock()
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
self.ml.container_snapshot_create.side_effect = side_effect
|
|
||||||
self.assertRaises(expected,
|
|
||||||
self.session.container_snapshot,
|
|
||||||
instance.name, snapshot)
|
|
||||||
|
|
||||||
@stubs.annotated_data(
|
|
||||||
(1, (200, fake_api.fake_operation_info_ok()))
|
|
||||||
)
|
|
||||||
def test_container_publish(self, tag, side_effect):
|
|
||||||
image = mock.Mock()
|
|
||||||
instance = stubs._fake_instance()
|
|
||||||
self.ml.image_export.return_value = True
|
|
||||||
self.assertTrue(
|
|
||||||
self.session.container_publish(image, instance))
|
|
||||||
calls = [
|
|
||||||
mock.call.container_publish(image)]
|
|
||||||
self.assertEqual(calls, self.ml.method_calls)
|
|
|
@ -15,20 +15,17 @@
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
|
import nova.conf
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.virt import fake
|
from nova.virt import fake
|
||||||
|
|
||||||
from oslo_config import cfg
|
|
||||||
|
|
||||||
from nova.virt.lxd import config
|
from nova.virt.lxd import config
|
||||||
from nova.virt.lxd import migrate
|
from nova.virt.lxd import migrate
|
||||||
from nova.virt.lxd import operations
|
from nova.virt.lxd import operations
|
||||||
from nova.virt.lxd import session
|
from nova.virt.lxd import session
|
||||||
import stubs
|
import stubs
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = nova.conf.CONF
|
||||||
CONF.import_opt('my_ip', 'nova.netconf')
|
|
||||||
|
|
||||||
|
|
||||||
class LXDTestContainerMigrate(test.NoDBTestCase):
|
class LXDTestContainerMigrate(test.NoDBTestCase):
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,9 @@ from nova import exception
|
||||||
from nova import test
|
from nova import test
|
||||||
from pylxd.deprecated import exceptions as lxd_exceptions
|
from pylxd.deprecated import exceptions as lxd_exceptions
|
||||||
|
|
||||||
from nova_lxd.nova.virt.lxd import session
|
from nova.virt.lxd import session
|
||||||
from nova_lxd.tests import fake_api
|
import fake_api
|
||||||
from nova_lxd.tests import stubs
|
import stubs
|
||||||
|
|
||||||
|
|
||||||
@ddt.ddt
|
@ddt.ddt
|
||||||
|
@ -548,3 +548,164 @@ class SessionContainerTest(test.NoDBTestCase):
|
||||||
self.assertRaises(expected,
|
self.assertRaises(expected,
|
||||||
self.session.container_init, config,
|
self.session.container_init, config,
|
||||||
instance)
|
instance)
|
||||||
|
|
||||||
|
@ddt.ddt
|
||||||
|
class SessionEventTest(test.NoDBTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(SessionEventTest, self).setUp()
|
||||||
|
|
||||||
|
self.ml = stubs.lxd_mock()
|
||||||
|
lxd_patcher = mock.patch('pylxd.api.API',
|
||||||
|
mock.Mock(return_value=self.ml))
|
||||||
|
lxd_patcher.start()
|
||||||
|
self.addCleanup(lxd_patcher.stop)
|
||||||
|
|
||||||
|
self.session = session.LXDAPISession()
|
||||||
|
|
||||||
|
def test_container_wait(self):
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
operation_id = mock.Mock()
|
||||||
|
self.ml.wait_container_operation.return_value = True
|
||||||
|
self.assertEqual(None,
|
||||||
|
self.session.operation_wait(operation_id, instance))
|
||||||
|
self.ml.wait_container_operation.assert_called_with(operation_id,
|
||||||
|
200, -1)
|
||||||
|
|
||||||
|
@ddt.ddt
|
||||||
|
class SessionImageTest(test.NoDBTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(SessionImageTest, self).setUp()
|
||||||
|
|
||||||
|
self.ml = stubs.lxd_mock()
|
||||||
|
lxd_patcher = mock.patch('pylxd.api.API',
|
||||||
|
mock.Mock(return_value=self.ml))
|
||||||
|
lxd_patcher.start()
|
||||||
|
self.addCleanup(lxd_patcher.stop)
|
||||||
|
|
||||||
|
self.session = session.LXDAPISession()
|
||||||
|
|
||||||
|
def test_image_defined(self):
|
||||||
|
"""Test the image is defined in the LXD hypervisor."""
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
self.ml.alias_defined.return_value = True
|
||||||
|
self.assertTrue(self.session.image_defined(instance))
|
||||||
|
calls = [mock.call.alias_defined(instance.image_ref)]
|
||||||
|
self.assertEqual(calls, self.ml.method_calls)
|
||||||
|
|
||||||
|
def test_alias_create(self):
|
||||||
|
"""Test the alias is created."""
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
alias = mock.Mock()
|
||||||
|
self.ml.alias_create.return_value = True
|
||||||
|
self.assertTrue(self.session.create_alias(alias, instance))
|
||||||
|
calls = [mock.call.alias_create(alias)]
|
||||||
|
self.assertEqual(calls, self.ml.method_calls)
|
||||||
|
|
||||||
|
@ddt.ddt
|
||||||
|
class SessionProfileTest(test.NoDBTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(SessionProfileTest, self).setUp()
|
||||||
|
|
||||||
|
"""This is so we can mock out pylxd API calls."""
|
||||||
|
self.ml = stubs.lxd_mock()
|
||||||
|
lxd_patcher = mock.patch('pylxd.api.API',
|
||||||
|
mock.Mock(return_value=self.ml))
|
||||||
|
lxd_patcher.start()
|
||||||
|
self.addCleanup(lxd_patcher.stop)
|
||||||
|
|
||||||
|
self.session = session.LXDAPISession()
|
||||||
|
|
||||||
|
@stubs.annotated_data(
|
||||||
|
('empty', [], []),
|
||||||
|
('valid', ['test'], ['test']),
|
||||||
|
)
|
||||||
|
def test_profile_list(self, tag, side_effect, expected):
|
||||||
|
self.ml.profile_list.return_value = side_effect
|
||||||
|
self.assertEqual(expected,
|
||||||
|
self.session.profile_list())
|
||||||
|
|
||||||
|
def test_profile_list_fail(self):
|
||||||
|
self.ml.profile_list.side_effect = (
|
||||||
|
lxd_exceptions.APIError('Fake', 500))
|
||||||
|
self.assertRaises(
|
||||||
|
exception.NovaException,
|
||||||
|
self.session.profile_list)
|
||||||
|
|
||||||
|
def test_profile_create(self):
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
config = mock.Mock()
|
||||||
|
self.ml.profile_defined.return_value = True
|
||||||
|
self.ml.profile_create.return_value = \
|
||||||
|
(200, fake_api.fake_standard_return())
|
||||||
|
self.assertEqual((200, fake_api.fake_standard_return()),
|
||||||
|
self.session.profile_create(config,
|
||||||
|
instance))
|
||||||
|
calls = [mock.call.profile_list(),
|
||||||
|
mock.call.profile_create(config)]
|
||||||
|
self.assertEqual(calls, self.ml.method_calls)
|
||||||
|
|
||||||
|
def test_profile_delete(self):
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
self.ml.profile_defined.return_value = True
|
||||||
|
self.ml.profile_delete.return_value = \
|
||||||
|
(200, fake_api.fake_standard_return())
|
||||||
|
self.assertEqual(None,
|
||||||
|
self.session.profile_delete(instance))
|
||||||
|
|
||||||
|
@ddt.ddt
|
||||||
|
class SessionSnapshotTest(test.NoDBTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(SessionSnapshotTest, self).setUp()
|
||||||
|
|
||||||
|
"""This is so we can mock out pylxd API calls."""
|
||||||
|
self.ml = stubs.lxd_mock()
|
||||||
|
lxd_patcher = mock.patch('pylxd.api.API',
|
||||||
|
mock.Mock(return_value=self.ml))
|
||||||
|
lxd_patcher.start()
|
||||||
|
self.addCleanup(lxd_patcher.stop)
|
||||||
|
|
||||||
|
self.session = session.LXDAPISession()
|
||||||
|
|
||||||
|
@stubs.annotated_data(
|
||||||
|
('1,', (200, fake_api.fake_operation_info_ok()))
|
||||||
|
)
|
||||||
|
def test_container_snapshot(self, tag, side_effect):
|
||||||
|
snapshot = mock.Mock()
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
self.ml.container_snapshot_create.return_value = side_effect
|
||||||
|
self.assertEqual(None,
|
||||||
|
self.session.container_snapshot(snapshot, instance))
|
||||||
|
calls = [
|
||||||
|
mock.call.container_snapshot_create(instance.name, snapshot),
|
||||||
|
mock.call.wait_container_operation(
|
||||||
|
'/1.0/operation/1234', 200, -1)]
|
||||||
|
self.assertEqual(calls, self.ml.method_calls)
|
||||||
|
|
||||||
|
@stubs.annotated_data(
|
||||||
|
('api_fail', lxd_exceptions.APIError(500, 'Fake'),
|
||||||
|
exception.NovaException)
|
||||||
|
)
|
||||||
|
def test_container_snapshot_fail(self, tag, side_effect, expected):
|
||||||
|
snapshot = mock.Mock()
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
self.ml.container_snapshot_create.side_effect = side_effect
|
||||||
|
self.assertRaises(expected,
|
||||||
|
self.session.container_snapshot,
|
||||||
|
instance.name, snapshot)
|
||||||
|
|
||||||
|
@stubs.annotated_data(
|
||||||
|
(1, (200, fake_api.fake_operation_info_ok()))
|
||||||
|
)
|
||||||
|
def test_container_publish(self, tag, side_effect):
|
||||||
|
image = mock.Mock()
|
||||||
|
instance = stubs._fake_instance()
|
||||||
|
self.ml.image_export.return_value = True
|
||||||
|
self.assertTrue(
|
||||||
|
self.session.container_publish(image, instance))
|
||||||
|
calls = [
|
||||||
|
mock.call.container_publish(image)]
|
||||||
|
self.assertEqual(calls, self.ml.method_calls)
|
|
@ -16,11 +16,11 @@
|
||||||
|
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
import nova.conf
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova import i18n
|
from nova import i18n
|
||||||
from nova.virt import configdrive
|
from nova.virt import configdrive
|
||||||
|
|
||||||
from oslo_config import cfg
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
|
|
||||||
|
@ -32,8 +32,7 @@ _ = i18n._
|
||||||
_LE = i18n._LE
|
_LE = i18n._LE
|
||||||
_LI = i18n._LI
|
_LI = i18n._LI
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = nova.conf.CONF
|
||||||
CONF.import_opt('my_ip', 'nova.netconf')
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import nova.conf
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova import i18n
|
from nova import i18n
|
||||||
from nova import utils
|
from nova import utils
|
||||||
|
@ -35,8 +36,7 @@ _ = i18n._
|
||||||
_LE = i18n._LE
|
_LE = i18n._LE
|
||||||
_LI = i18n._LI
|
_LI = i18n._LI
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = nova.conf.CONF
|
||||||
CONF.import_opt('my_ip', 'nova.netconf')
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
# the License for the specific language governing permissions and
|
# the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import nova.conf
|
||||||
from nova import context as nova_context
|
from nova import context as nova_context
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova import i18n
|
from nova import i18n
|
||||||
|
@ -37,8 +38,7 @@ _ = i18n._
|
||||||
_LE = i18n._LE
|
_LE = i18n._LE
|
||||||
_LI = i18n._LI
|
_LI = i18n._LI
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = nova.conf.CONF
|
||||||
CONF.import_opt('host', 'nova.netconf')
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|
4
tox.ini
4
tox.ini
|
@ -18,6 +18,10 @@ deps = -r{toxinidir}/requirements.txt
|
||||||
-egit+https://github.com/openstack/nova#egg=nova
|
-egit+https://github.com/openstack/nova#egg=nova
|
||||||
commands = ostestr {posargs}
|
commands = ostestr {posargs}
|
||||||
|
|
||||||
|
[testenv:py27]
|
||||||
|
commands = /bin/cp -r {toxinidir}/nova/virt/lxd/ {toxinidir}/.tox/py27/src/nova/nova/virt/
|
||||||
|
python setup.py testr --slowest --testr-args='{posargs}'
|
||||||
|
|
||||||
[testenv:pep8]
|
[testenv:pep8]
|
||||||
commands = flake8
|
commands = flake8
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue