Ejemplo n.º 1
0
    def test_update_volume(self):
        return_value = {"volume": fakes.FakeVolume()}
        self.cinder.volumes.update.return_value = return_value

        self.assertEqual(return_value["volume"], self.service.update_volume(1))
        self.cinder.volumes.update.assert_called_once_with(1)
        self._test_atomic_action_timer(self.atomic_actions(),
                                       "cinder_v2.update_volume")
Ejemplo n.º 2
0
    def test_delete_metadata_not_enough_keys(self):
        volume = fakes.FakeVolume()

        keys = ["a", "b", "c", "d", "e"]
        self.assertRaises(exceptions.InvalidArgumentsException,
                          self.service.delete_metadata,
                          volume,
                          keys,
                          deletes=2,
                          delete_size=3)
Ejemplo n.º 3
0
    def test_extend_volume(self, mock_create_volume):
        volume = mock_create_volume.return_value
        self.service._wait_available_volume = mock.MagicMock()
        self.service._wait_available_volume.return_value = fakes.FakeVolume()

        self.assertEqual(self.service._wait_available_volume.return_value,
                         self.service.extend_volume(volume, 1))

        self.cinder.volumes.extend.assert_called_once_with(volume, 1)
        self.service._wait_available_volume.assert_called_once_with(volume)
Ejemplo n.º 4
0
    def test_set_metadata(self):
        volume = fakes.FakeVolume()

        self.service.set_metadata(volume, sets=2, set_size=4)
        calls = self.cinder.volumes.set_metadata.call_args_list
        self.assertEqual(2, len(calls))
        for call in calls:
            call_volume, metadata = call[0]
            self.assertEqual(volume, call_volume)
            self.assertEqual(4, len(metadata))
Ejemplo n.º 5
0
    def test__wait_available_volume(self):
        volume = fakes.FakeVolume()
        self.assertEqual(self.mock_wait_for_status.mock.return_value,
                         self.service._wait_available_volume(volume))

        self.mock_wait_for_status.mock.assert_called_once_with(
            volume,
            ready_statuses=["available"],
            update_resource=self.service._update_resource,
            timeout=CONF.benchmark.cinder_volume_create_timeout,
            check_interval=CONF.benchmark.cinder_volume_create_poll_interval)
Ejemplo n.º 6
0
    def test_update_volume_with_name_description(self):
        return_value = {"volume": fakes.FakeVolume()}
        self.cinder.volumes.update.return_value = return_value

        return_volume = self.service.update_volume(
            1, name="volume", description="fake")

        self.cinder.volumes.update.assert_called_once_with(
            1, name="volume", description="fake")
        self.assertEqual(return_value["volume"], return_volume)
        self._test_atomic_action_timer(self.atomic_actions(),
                                       "cinder_v2.update_volume")
Ejemplo n.º 7
0
    def test__set_metadata(self):
        volume = fakes.FakeVolume()

        self.scenario._set_metadata(volume, sets=2, set_size=4)
        calls = self.clients("cinder").volumes.set_metadata.call_args_list
        self.assertEqual(len(calls), 2)
        for call in calls:
            call_volume, metadata = call[0]
            self.assertEqual(call_volume, volume)
            self.assertEqual(len(metadata), 4)

        self._test_atomic_action_timer(self.scenario.atomic_actions(),
                                       "cinder.set_4_metadatas_2_times")
Ejemplo n.º 8
0
    def test_create_snapshot_with_name(self):
        self.service._wait_available_volume = mock.MagicMock()
        self.service._wait_available_volume.return_value = fakes.FakeVolume()

        return_snapshot = self.service.create_snapshot(1, name="snapshot")

        self.cinder.volume_snapshots.create.assert_called_once_with(
            1, name="snapshot", description=None, force=False, metadata=None)
        self.service._wait_available_volume.assert_called_once_with(
            self.cinder.volume_snapshots.create.return_value)
        self.assertEqual(self.service._wait_available_volume.return_value,
                         return_snapshot)
        self._test_atomic_action_timer(self.atomic_actions(),
                                       "cinder_v2.create_snapshot")
Ejemplo n.º 9
0
    def test_create_backup_with_name(self):
        self.service._wait_available_volume = mock.MagicMock()
        self.service._wait_available_volume.return_value = fakes.FakeVolume()

        return_backup = self.service.create_backup(1, name="backup")

        self.cinder.backups.create.assert_called_once_with(
            1, name="backup", description=None, container=None,
            incremental=False, force=False, snapshot_id=None)
        self.service._wait_available_volume.assert_called_once_with(
            self.cinder.backups.create.return_value)
        self.assertEqual(self.service._wait_available_volume.return_value,
                         return_backup)
        self._test_atomic_action_timer(self.atomic_actions(),
                                       "cinder_v2.create_backup")
Ejemplo n.º 10
0
    def test_create_snapshot(self):
        self.service._wait_available_volume = mock.MagicMock()
        self.service._wait_available_volume.return_value = fakes.FakeVolume()
        self.service.generate_random_name = mock.MagicMock(
            return_value="snapshot")

        return_snapshot = self.service.create_snapshot(1)

        self.cinder.volume_snapshots.create.assert_called_once_with(
            1, display_name="snapshot", display_description=None, force=False)
        self.service._wait_available_volume.assert_called_once_with(
            self.cinder.volume_snapshots.create.return_value)
        self.assertEqual(self.service._wait_available_volume.return_value,
                         return_snapshot)
        self._test_atomic_action_timer(self.atomic_actions(),
                                       "cinder_v1.create_snapshot")
Ejemplo n.º 11
0
    def test_delete_metadata(self):
        volume = fakes.FakeVolume()

        keys = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"]
        self.service.delete_metadata(volume, keys, deletes=3, delete_size=4)
        calls = self.cinder.volumes.delete_metadata.call_args_list
        self.assertEqual(3, len(calls))
        all_deleted = []
        for call in calls:
            call_volume, del_keys = call[0]
            self.assertEqual(volume, call_volume)
            self.assertEqual(4, len(del_keys))
            for key in del_keys:
                self.assertIn(key, keys)
                self.assertNotIn(key, all_deleted)
                all_deleted.append(key)
Ejemplo n.º 12
0
    def test_create_backup(self):
        self.service._wait_available_volume = mock.MagicMock()
        self.service._wait_available_volume.return_value = fakes.FakeVolume()
        self.service.generate_random_name = mock.MagicMock(
            return_value="backup")

        return_backup = self.service.create_backup(1)

        self.cinder.backups.create.assert_called_once_with(1,
                                                           name="backup",
                                                           description=None,
                                                           container=None)
        self.service._wait_available_volume.assert_called_once_with(
            self.cinder.backups.create.return_value)
        self.assertEqual(self.service._wait_available_volume.return_value,
                         return_backup)
        self._test_atomic_action_timer(self.atomic_actions(),
                                       "cinder_v1.create_backup")
Ejemplo n.º 13
0
    def test__delete_metadata(self):
        volume = fakes.FakeVolume()

        keys = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"]
        self.scenario._delete_metadata(volume, keys, deletes=3, delete_size=4)
        calls = self.clients("cinder").volumes.delete_metadata.call_args_list
        self.assertEqual(len(calls), 3)
        all_deleted = []
        for call in calls:
            call_volume, del_keys = call[0]
            self.assertEqual(call_volume, volume)
            self.assertEqual(len(del_keys), 4)
            for key in del_keys:
                self.assertIn(key, keys)
                self.assertNotIn(key, all_deleted)
                all_deleted.append(key)

        self._test_atomic_action_timer(self.scenario.atomic_actions(),
                                       "cinder.delete_4_metadatas_3_times")
Ejemplo n.º 14
0
    def test_create_volume_with_size_range(self, mock_random):
        mock_random.randint.return_value = 3
        self.service._wait_available_volume = mock.MagicMock()
        self.service._wait_available_volume.return_value = fakes.FakeVolume()

        return_volume = self.service.create_volume(
            size={"min": 1, "max": 5}, name="volume")

        kwargs = {"name": "volume",
                  "description": None,
                  "consistencygroup_id": None,
                  "snapshot_id": None,
                  "source_volid": None,
                  "volume_type": None,
                  "availability_zone": None,
                  "metadata": None,
                  "imageRef": None,
                  "scheduler_hints": None}
        self.cinder.volumes.create.assert_called_once_with(
            3, **kwargs)
        self.service._wait_available_volume.assert_called_once_with(
            self.cinder.volumes.create.return_value)
        self.assertEqual(self.service._wait_available_volume.return_value,
                         return_volume)
Ejemplo n.º 15
0
class VolumeGeneratorTestCase(test.TestCase):
    def test_init(self):
        context = {}
        context["task"] = mock.MagicMock()
        context["config"] = {
            "volumes": {
                "size": 1,
            }
        }

        new_context = copy.deepcopy(context)
        new_context["volumes"] = []
        volumes.VolumeGenerator(context)
        self.assertEqual(new_context, context)

    @mock.patch("%s.cinder.utils.CinderScenario._create_volume" % SCN,
                return_value=fakes.FakeVolume(id="uuid"))
    @mock.patch("%s.volumes.osclients" % CTX)
    def test_setup(self, mock_osclients, mock_volume_create):
        fc = fakes.FakeClients()
        mock_osclients.Clients.return_value = fc

        ctx_volumes = [{
            'volume_id': 'uuid',
            'endpoint': 'endpoint',
            'tenant_id': i
        } for i in range(2)]
        user_key = [{
            'id': i,
            'tenant_id': j,
            'endpoint': 'endpoint'
        } for j in range(2) for i in range(5)]

        real_context = {
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                }
            },
            "admin": {
                "endpoint": mock.MagicMock()
            },
            "task": mock.MagicMock(),
            "users": user_key,
        }

        new_context = copy.deepcopy(real_context)
        new_context["volumes"] = ctx_volumes

        volumes_ctx = volumes.VolumeGenerator(real_context)
        volumes_ctx.setup()
        self.assertEqual(new_context, real_context)

    @mock.patch("%s.volumes.osclients" % CTX)
    @mock.patch("%s.cleanup.utils.delete_cinder_resources" % CTX)
    def test_cleanup(self, mock_cinder_remover, mock_osclients):
        ctx_volumes = [{
            'volume_id': 'uuid',
            'endpoint': mock.MagicMock(),
            'tenant_id': i
        } for i in range(2)]
        user_key = [{
            'id': i,
            'tenant_id': j,
            'endpoint': 'endpoint'
        } for j in range(2) for i in range(5)]

        context = {
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                }
            },
            "admin": {
                "endpoint": mock.MagicMock()
            },
            "task": mock.MagicMock(),
            "users": user_key,
            "volumes": ctx_volumes,
        }

        volumes_ctx = volumes.VolumeGenerator(context)
        volumes_ctx.cleanup()

        self.assertEqual(2, len(mock_cinder_remover.mock_calls))

    @mock.patch("%s.volumes.osclients" % CTX)
    @mock.patch("%s.cleanup.utils.delete_cinder_resources" % CTX)
    def test_cleanup_exception(self, mock_cinder_remover, mock_osclients):
        ctx_volumes = [{
            'volume_id': 'uuid',
            'endpoint': mock.MagicMock(),
            'tenant_id': i
        } for i in range(2)]
        user_key = [{
            'id': i,
            'tenant_id': j,
            'endpoint': 'endpoint'
        } for j in range(2) for i in range(5)]

        context = {
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                }
            },
            "admin": {
                "endpoint": mock.MagicMock()
            },
            "task": mock.MagicMock(),
            "users": user_key,
            "volumes": ctx_volumes,
        }

        mock_cinder_remover.side_effect = Exception()
        volumes_ctx = volumes.VolumeGenerator(context)
        volumes_ctx.cleanup()
        self.assertEqual(2, len(mock_cinder_remover.mock_calls))
Ejemplo n.º 16
0
 def test__get_volume(self):
     volume = fakes.FakeVolume()
     self.assertEqual(self.clients("cinder").volumes.get.return_value,
                      self.scenario._get_volume(volume.id))
     self._test_atomic_action_timer(self.scenario.atomic_actions(),
                                    "cinder.get_volume")
Ejemplo n.º 17
0
class VolumeGeneratorTestCase(test.ScenarioTestCase):
    def _gen_tenants(self, count):
        tenants = {}
        for id_ in range(count):
            tenants[str(id_)] = {"name": str(id_)}
        return tenants

    def test_init(self):
        self.context.update(
            {"config": {
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": 5,
                }
            }})

        inst = volumes.VolumeGenerator(self.context)
        self.assertEqual(inst.config, self.context["config"]["volumes"])

    @ddt.data({"config": {
        "size": 1,
        "volumes_per_tenant": 5
    }}, {"config": {
        "size": 1,
        "type": None,
        "volumes_per_tenant": 5
    }}, {
        "config": {
            "size": 1,
            "type": -1,
            "volumes_per_tenant": 5
        },
        "validation_raises": jsonschema.exceptions.ValidationError
    })
    @ddt.unpack
    @mock.patch("%s.cinder.utils.CinderScenario._create_volume" % SCN,
                return_value=fakes.FakeVolume(id="uuid"))
    def test_setup(self,
                   mock_cinder_scenario__create_volume,
                   config,
                   validation_raises=None):
        try:
            volumes.VolumeGenerator.validate(config)
        except Exception as e:
            if not isinstance(e, validation_raises):
                raise

        users_per_tenant = 5
        volumes_per_tenant = config.get("volumes_per_tenant", 5)
        tenants = self._gen_tenants(2)
        users = []
        for id_ in tenants:
            for i in range(users_per_tenant):
                users.append({
                    "id": i,
                    "tenant_id": id_,
                    "credential": mock.MagicMock()
                })

        self.context.update({
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": config
            },
            "admin": {
                "credential": mock.MagicMock()
            },
            "users": users,
            "tenants": tenants
        })

        new_context = copy.deepcopy(self.context)
        for id_ in tenants.keys():
            new_context["tenants"][id_].setdefault("volumes", [])
            for i in range(volumes_per_tenant):
                new_context["tenants"][id_]["volumes"].append({"id": "uuid"})

        volumes_ctx = volumes.VolumeGenerator(self.context)
        volumes_ctx.setup()
        self.assertEqual(new_context, self.context)

    @mock.patch("%s.cinder.volumes.resource_manager.cleanup" % CTX)
    def test_cleanup(self, mock_cleanup):
        tenants_count = 2
        users_per_tenant = 5
        volumes_per_tenant = 5

        tenants = self._gen_tenants(tenants_count)
        users = []
        for id_ in tenants.keys():
            for i in range(users_per_tenant):
                users.append({
                    "id": i,
                    "tenant_id": id_,
                    "credential": "credential"
                })
            tenants[id_].setdefault("volumes", [])
            for j in range(volumes_per_tenant):
                tenants[id_]["volumes"].append({"id": "uuid"})

        self.context.update({
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": 5,
                }
            },
            "admin": {
                "credential": mock.MagicMock()
            },
            "users": users,
            "tenants": tenants
        })

        volumes_ctx = volumes.VolumeGenerator(self.context)
        volumes_ctx.cleanup()

        mock_cleanup.assert_called_once_with(names=["cinder.volumes"],
                                             users=self.context["users"],
                                             api_versions=None)

    @mock.patch("%s.cinder.volumes.resource_manager.cleanup" % CTX)
    def test_cleanup_api_versions(self, mock_cleanup):

        tenants_count = 2
        users_per_tenant = 5
        volumes_per_tenant = 5

        tenants = self._gen_tenants(tenants_count)
        users = []
        for id_ in tenants.keys():
            for i in range(users_per_tenant):
                users.append({
                    "id": i,
                    "tenant_id": id_,
                    "credential": "credential"
                })
            tenants[id_].setdefault("volumes", [])
            for j in range(volumes_per_tenant):
                tenants[id_]["volumes"].append({"id": "uuid"})

        api_version = {"cinder": {"version": 1, "service_type": "volume"}}
        self.context.update({
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                    "type": "volume_type",
                    "volumes_per_tenant": 5,
                },
                "api_versions": api_version
            },
            "admin": {
                "credential": mock.MagicMock()
            },
            "users": users,
            "tenants": tenants
        })

        volumes_ctx = volumes.VolumeGenerator(self.context)
        volumes_ctx.cleanup()

        mock_cleanup.assert_called_once_with(names=["cinder.volumes"],
                                             users=self.context["users"],
                                             api_versions=api_version)
Ejemplo n.º 18
0
class VolumeGeneratorTestCase(test.ScenarioTestCase):
    def _gen_tenants(self, count):
        tenants = {}
        for id_ in range(count):
            tenants[str(id_)] = {"name": str(id_)}
        return tenants

    def test_init(self):
        self.context.update(
            {"config": {
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": 5,
                }
            }})

        inst = volumes.VolumeGenerator(self.context)
        self.assertEqual(inst.config, self.context["config"]["volumes"])

    @mock.patch("%s.cinder.utils.CinderScenario._create_volume" % SCN,
                return_value=fakes.FakeVolume(id="uuid"))
    def test_setup(self, mock_cinder_scenario__create_volume):
        tenants_count = 2
        users_per_tenant = 5
        volumes_per_tenant = 5

        tenants = self._gen_tenants(tenants_count)
        users = []
        for id_ in tenants.keys():
            for i in range(users_per_tenant):
                users.append({
                    "id": i,
                    "tenant_id": id_,
                    "credential": mock.MagicMock()
                })

        self.context.update({
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": volumes_per_tenant,
                }
            },
            "admin": {
                "credential": mock.MagicMock()
            },
            "users": users,
            "tenants": tenants
        })

        new_context = copy.deepcopy(self.context)
        for id_ in tenants.keys():
            new_context["tenants"][id_].setdefault("volumes", [])
            for i in range(volumes_per_tenant):
                new_context["tenants"][id_]["volumes"].append({"id": "uuid"})

        volumes_ctx = volumes.VolumeGenerator(self.context)
        volumes_ctx.setup()
        self.assertEqual(new_context, self.context)

    @mock.patch("%s.cinder.volumes.resource_manager.cleanup" % CTX)
    def test_cleanup(self, mock_cleanup):

        tenants_count = 2
        users_per_tenant = 5
        volumes_per_tenant = 5

        tenants = self._gen_tenants(tenants_count)
        users = []
        for id_ in tenants.keys():
            for i in range(users_per_tenant):
                users.append({
                    "id": i,
                    "tenant_id": id_,
                    "credential": "credential"
                })
            tenants[id_].setdefault("volumes", [])
            for j in range(volumes_per_tenant):
                tenants[id_]["volumes"].append({"id": "uuid"})

        self.context.update({
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": 5,
                }
            },
            "admin": {
                "credential": mock.MagicMock()
            },
            "users": users,
            "tenants": tenants
        })

        volumes_ctx = volumes.VolumeGenerator(self.context)
        volumes_ctx.cleanup()

        mock_cleanup.assert_called_once_with(names=["cinder.volumes"],
                                             users=self.context["users"])
Ejemplo n.º 19
0
class VolumeGeneratorTestCase(test.TestCase):

    def _gen_tenants(self, count):
        tenants = dict()
        for id in range(count):
            tenants[str(id)] = dict(name=str(id))
        return tenants

    def test_init(self):
        context = {}
        context["task"] = mock.MagicMock()
        context["config"] = {
            "volumes": {
                "size": 1,
                "volumes_per_tenant": 5,
            }
        }

        inst = volumes.VolumeGenerator(context)
        self.assertEqual(inst.config, context["config"]["volumes"])

    @mock.patch("%s.cinder.utils.CinderScenario._create_volume" % SCN,
                return_value=fakes.FakeVolume(id="uuid"))
    @mock.patch("%s.volumes.osclients" % CTX)
    def test_setup(self, mock_osclients, mock_volume_create):
        fc = fakes.FakeClients()
        mock_osclients.Clients.return_value = fc

        tenants_count = 2
        users_per_tenant = 5
        volumes_per_tenant = 5

        tenants = self._gen_tenants(tenants_count)
        users = list()
        for id in tenants.keys():
            for i in range(users_per_tenant):
                users.append({"id": i, "tenant_id": id,
                              "endpoint": "endpoint"})

        real_context = {
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": 5,
                }
            },
            "admin": {
                "endpoint": mock.MagicMock()
            },
            "task": mock.MagicMock(),
            "users": users,
            "tenants": tenants
        }

        new_context = copy.deepcopy(real_context)
        for id in tenants.keys():
            new_context["tenants"][id].setdefault("volumes", list())
            for i in range(volumes_per_tenant):
                new_context["tenants"][id]["volumes"].append({"id": "uuid"})

        volumes_ctx = volumes.VolumeGenerator(real_context)
        volumes_ctx.setup()
        self.assertEqual(new_context, real_context)

    @mock.patch("%s.volumes.osclients" % CTX)
    @mock.patch("%s.volumes.resource_manager.cleanup" % CTX)
    def test_cleanup(self, mock_cleanup, mock_osclients):

        tenants_count = 2
        users_per_tenant = 5
        volumes_per_tenant = 5

        tenants = self._gen_tenants(tenants_count)
        users = list()
        for id in tenants.keys():
            for i in range(users_per_tenant):
                users.append({"id": i, "tenant_id": id,
                              "endpoint": "endpoint"})
            tenants[id].setdefault("volumes", list())
            for j in range(volumes_per_tenant):
                tenants[id]["volumes"].append({"id": "uuid"})

        context = {
            "config": {
                "users": {
                    "tenants": 2,
                    "users_per_tenant": 5,
                    "concurrent": 10,
                },
                "volumes": {
                    "size": 1,
                    "volumes_per_tenant": 5,
                }
            },
            "admin": {
                "endpoint": mock.MagicMock()
            },
            "task": mock.MagicMock(),
            "users": users,
            "tenants": tenants
        }

        volumes_ctx = volumes.VolumeGenerator(context)
        volumes_ctx.cleanup()

        mock_cleanup.assert_called_once_with(names=["cinder.volumes"],
                                             users=context["users"])