Esempio n. 1
0
 def test_get_name_returns_concat_volume_group_name(self):
     name = factory.make_name("lv")
     vgname = factory.make_name("vg")
     volume_group = factory.make_VolumeGroup(name=vgname)
     logical_volume = factory.make_VirtualBlockDevice(
         name=name, filesystem_group=volume_group)
     self.assertEqual("%s-%s" % (vgname, name), logical_volume.get_name())
Esempio n. 2
0
 def test_create_logical_volume_creates_logical_volume(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     name = factory.make_name("lv")
     vguuid = "%s" % uuid.uuid4()
     size = random.randint(MIN_BLOCK_DEVICE_SIZE, volume_group.get_size())
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(
         uri,
         {
             "op": "create_logical_volume",
             "name": name,
             "uuid": vguuid,
             "size": size,
         },
     )
     self.assertEqual(http.client.OK, response.status_code,
                      response.content)
     logical_volume = json.loads(
         response.content.decode(settings.DEFAULT_CHARSET))
     expected_size = round_size_to_nearest_block(size,
                                                 PARTITION_ALIGNMENT_SIZE,
                                                 False)
     self.assertThat(
         logical_volume,
         ContainsDict({
             "name": Equals("%s-%s" % (volume_group.name, name)),
             "uuid": Equals(vguuid),
             "size": Equals(expected_size),
         }),
     )
Esempio n. 3
0
 def test_create_logical_volume_403_when_not_admin(self):
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(uri, {"op": "create_logical_volume"})
     self.assertEqual(http.client.FORBIDDEN, response.status_code,
                      response.content)
Esempio n. 4
0
 def test_is_not_valid_if_invalid_uuid(self):
     volume_group = factory.make_VolumeGroup()
     data = {"uuid": factory.make_string(size=32)}
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertFalse(form.is_valid(),
                      "Should be invalid because of an invalid uuid.")
     self.assertEqual({"uuid": ["Enter a valid value."]}, form._errors)
Esempio n. 5
0
 def test_create_logical_volume_409_when_not_ready(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.ALLOCATED)
     volume_group = factory.make_VolumeGroup(node=node)
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(uri, {"op": "create_logical_volume"})
     self.assertEqual(http.client.CONFLICT, response.status_code,
                      response.content)
Esempio n. 6
0
 def test_delete_logical_volume_400_when_missing_id(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(uri, {"op": "delete_logical_volume"})
     self.assertEqual(http.client.BAD_REQUEST, response.status_code,
                      response.content)
Esempio n. 7
0
 def test_updates_name(self):
     volume_group = factory.make_VolumeGroup()
     name = factory.make_name("vg")
     data = {"name": name}
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     self.assertEqual(name, volume_group.name)
Esempio n. 8
0
 def test_updates_uuid(self):
     volume_group = factory.make_VolumeGroup()
     vguuid = "%s" % uuid.uuid4()
     data = {"uuid": vguuid}
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     self.assertEqual(vguuid, volume_group.uuid)
Esempio n. 9
0
 def test_delete_deletes_volume_group(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     uri = get_volume_group_uri(volume_group)
     response = self.client.delete(uri)
     self.assertEqual(http.client.NO_CONTENT, response.status_code,
                      response.content)
     self.assertIsNone(reload_object(volume_group))
Esempio n. 10
0
 def test_update_updates_volume_group(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     delete_block_device = factory.make_PhysicalBlockDevice(node=node)
     factory.make_Filesystem(
         fstype=FILESYSTEM_TYPE.LVM_PV,
         block_device=delete_block_device,
         filesystem_group=volume_group,
     )
     delete_bd_for_partition = factory.make_PhysicalBlockDevice(node=node)
     delete_table = factory.make_PartitionTable(
         block_device=delete_bd_for_partition
     )
     delete_partition = factory.make_Partition(partition_table=delete_table)
     factory.make_Filesystem(
         fstype=FILESYSTEM_TYPE.LVM_PV,
         partition=delete_partition,
         filesystem_group=volume_group,
     )
     new_name = factory.make_name("vg")
     new_uuid = "%s" % uuid.uuid4()
     new_block_device = factory.make_PhysicalBlockDevice(node=node)
     new_bd_for_partition = factory.make_PhysicalBlockDevice(node=node)
     new_table = factory.make_PartitionTable(
         block_device=new_bd_for_partition
     )
     new_partition = factory.make_Partition(partition_table=new_table)
     uri = get_volume_group_uri(volume_group)
     response = self.client.put(
         uri,
         {
             "name": new_name,
             "uuid": new_uuid,
             "add_block_devices": [new_block_device.id],
             "remove_block_devices": [delete_block_device.id],
             "add_partitions": [new_partition.id],
             "remove_partitions": [delete_partition.id],
         },
     )
     self.assertEqual(
         http.client.OK, response.status_code, response.content
     )
     volume_group = reload_object(volume_group)
     self.assertEqual(new_name, volume_group.name)
     self.assertEqual(new_uuid, volume_group.uuid)
     self.assertEqual(
         volume_group.id,
         new_block_device.get_effective_filesystem().filesystem_group.id,
     )
     self.assertEqual(
         volume_group.id,
         new_partition.get_effective_filesystem().filesystem_group.id,
     )
     self.assertIsNone(delete_block_device.get_effective_filesystem())
     self.assertIsNone(delete_partition.get_effective_filesystem())
Esempio n. 11
0
 def test_delete_logical_volume_204_when_invalid_id(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     uri = get_volume_group_uri(volume_group)
     volume_id = random.randint(0, 100)
     response = self.client.post(uri, {
         "op": "delete_logical_volume",
         "id": volume_id
     })
     self.assertEqual(http.client.NO_CONTENT, response.status_code,
                      response.content)
Esempio n. 12
0
 def test_delete_logical_volume_403_when_not_admin(self):
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     logical_volume = factory.make_VirtualBlockDevice(
         filesystem_group=volume_group)
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(uri, {
         "op": "delete_logical_volume",
         "id": logical_volume.id
     })
     self.assertEqual(http.client.FORBIDDEN, response.status_code,
                      response.content)
Esempio n. 13
0
 def test_is_not_valid_if_invalid_uuid(self):
     volume_group = factory.make_VolumeGroup()
     name = factory.make_name("lv")
     data = {
         'name': name,
         'uuid': factory.make_string(size=32),
         'size': volume_group.get_size() - 1,
     }
     form = CreateLogicalVolumeForm(volume_group, data=data)
     self.assertFalse(form.is_valid(),
                      "Should be invalid because of an invalid uuid.")
     self.assertEqual({'uuid': ["Enter a valid value."]}, form._errors)
Esempio n. 14
0
 def test_adds_block_device_by_name(self):
     node = factory.make_Node()
     volume_group = factory.make_VolumeGroup(node=node)
     block_device = factory.make_PhysicalBlockDevice(node=node)
     data = {"add_block_devices": [block_device.name]}
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     self.assertEqual(
         volume_group.id,
         block_device.get_effective_filesystem().filesystem_group.id,
     )
Esempio n. 15
0
 def test_delete_logical_volume_409_when_not_ready(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.ALLOCATED)
     volume_group = factory.make_VolumeGroup(node=node)
     logical_volume = factory.make_VirtualBlockDevice(
         filesystem_group=volume_group)
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(uri, {
         "op": "delete_logical_volume",
         "id": logical_volume.id
     })
     self.assertEqual(http.client.CONFLICT, response.status_code,
                      response.content)
Esempio n. 16
0
 def test_adds_boot_disk(self):
     node = factory.make_Node(with_boot_disk=False)
     boot_disk = factory.make_PhysicalBlockDevice(node=node)
     volume_group = factory.make_VolumeGroup(node=node)
     data = {"add_block_devices": [boot_disk.id]}
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     boot_partition = boot_disk.get_partitiontable().partitions.first()
     self.assertEqual(
         boot_partition.get_effective_filesystem().filesystem_group.id,
         volume_group.id,
     )
Esempio n. 17
0
 def test_removes_block_device_by_name(self):
     node = factory.make_Node()
     volume_group = factory.make_VolumeGroup(node=node)
     block_device = factory.make_PhysicalBlockDevice(node=node)
     factory.make_Filesystem(fstype=FILESYSTEM_TYPE.LVM_PV,
                             block_device=block_device,
                             filesystem_group=volume_group)
     data = {
         'remove_block_devices': [block_device.name],
     }
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     self.assertIsNone(block_device.get_effective_filesystem())
Esempio n. 18
0
 def test_delete_logical_volume_deletes_logical_volume(self):
     self.become_admin()
     node = factory.make_Node(status=NODE_STATUS.READY)
     volume_group = factory.make_VolumeGroup(node=node)
     logical_volume = factory.make_VirtualBlockDevice(
         filesystem_group=volume_group)
     uri = get_volume_group_uri(volume_group)
     response = self.client.post(uri, {
         "op": "delete_logical_volume",
         "id": logical_volume.id
     })
     self.assertEqual(http.client.NO_CONTENT, response.status_code,
                      response.content)
     self.assertIsNone(reload_object(logical_volume))
Esempio n. 19
0
 def test_adds_partition_by_name(self):
     node = factory.make_Node()
     volume_group = factory.make_VolumeGroup(node=node)
     block_device = factory.make_PhysicalBlockDevice(node=node)
     partition_table = factory.make_PartitionTable(
         block_device=block_device)
     partition = factory.make_Partition(partition_table=partition_table)
     data = {"add_partitions": [partition.name]}
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     self.assertEqual(
         volume_group.id,
         partition.get_effective_filesystem().filesystem_group.id,
     )
Esempio n. 20
0
 def test_is_not_valid_if_size_less_than_minimum_block_size(self):
     volume_group = factory.make_VolumeGroup()
     name = factory.make_name("lv")
     data = {"name": name, "size": MIN_BLOCK_DEVICE_SIZE - 1}
     form = CreateLogicalVolumeForm(volume_group, data=data)
     self.assertFalse(form.is_valid(),
                      "Should be invalid because of an invalid size.")
     self.assertEqual(
         {
             "size": [
                 "Ensure this value is greater than or equal to %s." %
                 MIN_BLOCK_DEVICE_SIZE
             ]
         },
         form._errors,
     )
Esempio n. 21
0
 def test_get_parents_handles_cache_set(self):
     # Regression test for lp1519397
     node = factory.make_Node(with_boot_disk=False)
     volume_group = factory.make_VolumeGroup(node=node)
     name = factory.make_name()
     vguuid = "%s" % uuid4()
     size = random.randint(MIN_BLOCK_DEVICE_SIZE, volume_group.get_size())
     logical_volume = volume_group.create_logical_volume(name=name,
                                                         uuid=vguuid,
                                                         size=size)
     logical_volume = reload_object(logical_volume)
     sdb = factory.make_PhysicalBlockDevice(node=node)
     factory.make_CacheSet(block_device=sdb, node=node)
     self.assertItemsEqual(
         [fs.block_device_id for fs in volume_group.filesystems.all()],
         [parent.id for parent in logical_volume.get_parents()])
Esempio n. 22
0
 def test_removes_partition(self):
     node = factory.make_Node()
     volume_group = factory.make_VolumeGroup(node=node)
     block_device = factory.make_PhysicalBlockDevice(node=node)
     partition_table = factory.make_PartitionTable(
         block_device=block_device)
     partition = factory.make_Partition(partition_table=partition_table)
     factory.make_Filesystem(fstype=FILESYSTEM_TYPE.LVM_PV,
                             partition=partition,
                             filesystem_group=volume_group)
     data = {
         'remove_partitions': [partition.id],
     }
     form = UpdateVolumeGroupForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     volume_group = form.save()
     self.assertIsNone(partition.get_effective_filesystem())
Esempio n. 23
0
 def test_creates_logical_volume(self):
     volume_group = factory.make_VolumeGroup()
     name = factory.make_name("lv")
     vguuid = "%s" % uuid.uuid4()
     size = random.randint(MIN_BLOCK_DEVICE_SIZE, volume_group.get_size())
     data = {"name": name, "uuid": vguuid, "size": size}
     form = CreateLogicalVolumeForm(volume_group, data=data)
     self.assertTrue(form.is_valid(), form._errors)
     logical_volume = form.save()
     expected_size = round_size_to_nearest_block(
         size, PARTITION_ALIGNMENT_SIZE, False
     )
     self.assertThat(
         logical_volume,
         MatchesStructure.byEquality(
             name=name, uuid=vguuid, size=expected_size
         ),
     )
Esempio n. 24
0
 def test_is_not_valid_if_free_space_less_than_min_size(self):
     volume_group = factory.make_VolumeGroup()
     volume_group.create_logical_volume(factory.make_name("lv"),
                                        size=volume_group.get_size())
     name = factory.make_name("lv")
     data = {"name": name, "size": MIN_BLOCK_DEVICE_SIZE}
     form = CreateLogicalVolumeForm(volume_group, data=data)
     self.assertFalse(form.is_valid(),
                      "Should be invalid because of an no free space.")
     self.assertEqual(
         {
             "__all__": [
                 "Volume group (%s) cannot hold any more logical volumes, "
                 "because it doesn't have enough free space." %
                 (volume_group.name)
             ]
         },
         form._errors,
     )
Esempio n. 25
0
 def test_is_not_valid_if_size_greater_than_free_space(self):
     volume_group = factory.make_VolumeGroup()
     volume_group.create_logical_volume(factory.make_name("lv"),
                                        size=volume_group.get_size() -
                                        MIN_BLOCK_DEVICE_SIZE - 1)
     name = factory.make_name("lv")
     free_space = volume_group.get_lvm_free_space()
     data = {
         'name': name,
         'size': free_space + 2,
     }
     form = CreateLogicalVolumeForm(volume_group, data=data)
     self.assertFalse(form.is_valid(),
                      "Should be invalid because of an invalid size.")
     self.assertEqual(
         {
             'size': [
                 "Ensure this value is less than or equal to %s." %
                 (volume_group.get_lvm_free_space()),
             ]
         }, form._errors)
Esempio n. 26
0
 def test_requires_no_fields(self):
     volume_group = factory.make_VolumeGroup()
     form = CreateLogicalVolumeForm(volume_group, data={})
     self.assertFalse(form.is_valid(), form.errors)
     self.assertItemsEqual(['name', 'size'], form.errors.keys())
Esempio n. 27
0
 def test_requires_no_fields(self):
     volume_group = factory.make_VolumeGroup()
     form = UpdateVolumeGroupForm(volume_group, data={})
     self.assertTrue(form.is_valid(), form.errors)