diff --git a/devops/tests/factories.py b/devops/tests/factories.py
index 0a02fa28..3835a38a 100644
--- a/devops/tests/factories.py
+++ b/devops/tests/factories.py
@@ -13,8 +13,42 @@
# 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 uuid
+
+import factory
from factory import fuzzy
+from devops import models
+
+
+class FuzzyUuid(fuzzy.BaseFuzzyAttribute):
+
+ def fuzz(self):
+ return str(uuid.uuid4())
+
+
+@factory.use_strategy(factory.BUILD_STRATEGY)
+class EnvironmentFactory(factory.django.DjangoModelFactory):
+ class Meta:
+ model = models.Environment
+
+ name = fuzzy.FuzzyText('test_env_')
+
+
+@factory.use_strategy(factory.BUILD_STRATEGY)
+class VolumeFactory(factory.django.DjangoModelFactory):
+ class Meta:
+ model = models.Volume
+
+ environment = factory.SubFactory(EnvironmentFactory)
+ backing_store = factory.SubFactory('devops.tests.factories.VolumeFactory',
+ backing_store=None)
+ name = fuzzy.FuzzyText('test_volume_')
+ uuid = FuzzyUuid()
+ capacity = fuzzy.FuzzyInteger(50, 100)
+ format = fuzzy.FuzzyText('qcow2_')
+
def fuzzy_string(*args, **kwargs):
"""Shortcut for getting fuzzy text"""
diff --git a/devops/tests/test_libvirt_xml_builder.py b/devops/tests/test_libvirt_xml_builder.py
index bda23877..f74c3c9b 100644
--- a/devops/tests/test_libvirt_xml_builder.py
+++ b/devops/tests/test_libvirt_xml_builder.py
@@ -24,16 +24,17 @@ from devops.tests import factories
class BaseTestXMLBuilder(TestCase):
def setUp(self):
+ # TODO(prmtl): make it fuzzy
+ self.volume_path = "volume_path_mock"
self.xml_builder = LibvirtXMLBuilder(mock.Mock())
self.xml_builder.driver.volume_path = mock.Mock(
- return_value="volume_path_mock"
+ return_value=self.volume_path
)
self.xml_builder.driver.network_name = mock.Mock(
return_value="network_name_mock"
)
self.xml_builder.driver.reboot_timeout = None
self.net = mock.Mock()
- self.vol = mock.Mock()
self.node = mock.Mock()
@@ -82,39 +83,57 @@ class TestVolumeXml(BaseTestXMLBuilder):
def setUp(self):
super(TestVolumeXml, self).setUp()
- self.vol.name = 'test_name'
- self.vol.environment.name = 'test_env_name'
- self.vol.id = random.randint(1, 100)
- self.vol.format = "qcow2"
- self.vol.backing_store = None
- def test_general_properties(self):
- self.vol.capacity = random.randint(50, 100)
- xml = self.xml_builder.build_volume_xml(self.vol)
- self.assertIn(
- '{0}_{1}'
- ''.format(self.vol.environment.name, self.vol.name),
- xml)
- self.assertIn(
- '{0}'.format(self.vol.capacity), xml)
- self.assertIn(
- '''
+ def get_xml(self, volume):
+ """Generate XML from volume"""
+ return self.xml_builder.build_volume_xml(volume)
+
+ def test_full_volume_xml(self):
+ volume = factories.VolumeFactory()
+ expected = '''
+
+ {env_name}_{name}
+ {capacity}
-
- '''.format(self.vol.format), xml)
+
+
+
+ {path}
+
+
+'''.format(
+ env_name=volume.environment.name,
+ name=volume.name,
+ capacity=volume.capacity,
+ format=volume.format,
+ path=self.volume_path,
+ store_format=volume.backing_store.format,
+ )
+ xml = self.get_xml(volume)
+ # NOTE(prmtl): this assert provide better reporting (diff) in py.test
+ assert expected == xml
+ self.xml_builder.driver.volume_path.assert_called_with(
+ volume.backing_store)
+
+ def test_name_without_env(self):
+ volume = factories.VolumeFactory(environment=None)
+ xml = self.get_xml(volume)
+ self.assertIn('{0}'.format(volume.name), xml)
+
+ def test_no_backing_store(self):
+ volume = factories.VolumeFactory(backing_store=None)
+ xml = self.get_xml(volume)
+ self.assertNotIn("", xml)
def test_backing_store(self):
- self.vol.backing_store = mock.Mock(
- uuid="volume_uuid",
- format="raw"
- )
- xml = self.xml_builder.build_volume_xml(self.vol)
- self.assertIn(
- '''
+ format = "raw"
+ volume = factories.VolumeFactory(backing_store__format=format)
+ xml = self.get_xml(volume)
+ self.assertIn('''
- volume_path_mock
-
- '''.format(self.vol.backing_store.format), xml)
+ {path}
+
+ '''.format(path=self.volume_path, format=format), xml)
class TestSnapshotXml(BaseTestXMLBuilder):
diff --git a/tox.ini b/tox.ini
index 9783922b..7bf5b6fc 100644
--- a/tox.ini
+++ b/tox.ini
@@ -12,7 +12,7 @@ skipsdist = True
usedevelop = True
deps = -r{toxinidir}/test-requirements.txt
commands =
- py.test -v {posargs:devops/tests}
+ py.test -vv {posargs:devops/tests}
[testenv:venv]
commands = {posargs:}