diff options
| author | Alex Meade <alex.meade@rackspace.com> | 2012-08-06 17:03:43 -0400 |
|---|---|---|
| committer | Alex Meade <alex.meade@rackspace.com> | 2012-08-07 15:02:09 -0400 |
| commit | 56a6fa2bb68a8738f8d02f41f92983ee3115a19d (patch) | |
| tree | 3539f893e61ac5c774b33213e425fe37a55e206c /nova/tests | |
| parent | 9d753f18e1c5e4eaa4021f64ac9fe14ef1103b71 (diff) | |
Move results filtering to db.
This patch moves exact filter and regex filter matching on the listing of
instances to the database query. This is important so that we can eventually do
all pagination through the database.
If the db backend does not support regex matching then the SQL 'LIKE' operator
will be used instead.
Change-Id: If9dd644066787f0f3667992f23e5c33b1dc90286
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/compute/test_compute.py | 35 | ||||
| -rw-r--r-- | nova/tests/test_db_api.py | 28 |
2 files changed, 31 insertions, 32 deletions
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 0b0316e26..827374f37 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -3146,14 +3146,14 @@ class ComputeAPITestCase(BaseTestCase): 'display_name': 'not-woot'}) instances = self.compute_api.get_all(c, - search_opts={'name': 'woo.*'}) + search_opts={'name': '^woo.*'}) self.assertEqual(len(instances), 2) instance_uuids = [instance['uuid'] for instance in instances] self.assertTrue(instance1['uuid'] in instance_uuids) self.assertTrue(instance2['uuid'] in instance_uuids) instances = self.compute_api.get_all(c, - search_opts={'name': 'woot.*'}) + search_opts={'name': '^woot.*'}) instance_uuids = [instance['uuid'] for instance in instances] self.assertEqual(len(instances), 1) self.assertTrue(instance1['uuid'] in instance_uuids) @@ -3166,7 +3166,7 @@ class ComputeAPITestCase(BaseTestCase): self.assertTrue(instance3['uuid'] in instance_uuids) instances = self.compute_api.get_all(c, - search_opts={'name': 'n.*'}) + search_opts={'name': '^n.*'}) self.assertEqual(len(instances), 1) instance_uuids = [instance['uuid'] for instance in instances] self.assertTrue(instance3['uuid'] in instance_uuids) @@ -3179,35 +3179,6 @@ class ComputeAPITestCase(BaseTestCase): db.instance_destroy(c, instance2['uuid']) db.instance_destroy(c, instance3['uuid']) - def test_get_all_by_instance_name_regexp(self): - """Test searching instances by name""" - self.flags(instance_name_template='instance-%d') - - c = context.get_admin_context() - instance1 = self._create_fake_instance() - instance2 = self._create_fake_instance({'id': 2}) - instance3 = self._create_fake_instance({'id': 10}) - - instances = self.compute_api.get_all(c, - search_opts={'instance_name': 'instance.*'}) - self.assertEqual(len(instances), 3) - - instances = self.compute_api.get_all(c, - search_opts={'instance_name': '.*\-\d$'}) - self.assertEqual(len(instances), 2) - instance_uuids = [instance['uuid'] for instance in instances] - self.assertTrue(instance1['uuid'] in instance_uuids) - self.assertTrue(instance2['uuid'] in instance_uuids) - - instances = self.compute_api.get_all(c, - search_opts={'instance_name': 'i.*2'}) - self.assertEqual(len(instances), 1) - self.assertEqual(instances[0]['uuid'], instance2['uuid']) - - db.instance_destroy(c, instance1['uuid']) - db.instance_destroy(c, instance2['uuid']) - db.instance_destroy(c, instance3['uuid']) - def test_get_all_by_multiple_options_at_once(self): """Test searching by multiple options at once""" c = context.get_admin_context() diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index b2b1cf9e2..89b6480d6 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -51,6 +51,34 @@ class DbApiTestCase(test.TestCase): result = db.instance_get_all_by_filters(self.context, {}) self.assertEqual(2, len(result)) + def test_instance_get_all_by_filters_regex(self): + self.create_instances_with_args(display_name='test1') + self.create_instances_with_args(display_name='teeeest2') + self.create_instances_with_args(display_name='diff') + result = db.instance_get_all_by_filters(self.context, + {'display_name': 't.*st.'}) + self.assertEqual(2, len(result)) + + def test_instance_get_all_by_filters_regex_unsupported_db(self): + """Ensure that the 'LIKE' operator is used for unsupported dbs.""" + self.flags(sql_connection="notdb://") + self.create_instances_with_args(display_name='test1') + self.create_instances_with_args(display_name='test.*') + self.create_instances_with_args(display_name='diff') + result = db.instance_get_all_by_filters(self.context, + {'display_name': 'test.*'}) + self.assertEqual(1, len(result)) + result = db.instance_get_all_by_filters(self.context, + {'display_name': '%test%'}) + self.assertEqual(2, len(result)) + + def test_instance_get_all_by_filters_metadata(self): + self.create_instances_with_args(metadata={'foo': 'bar'}) + self.create_instances_with_args() + result = db.instance_get_all_by_filters(self.context, + {'metadata': {'foo': 'bar'}}) + self.assertEqual(1, len(result)) + def test_instance_get_all_by_filters_unicode_value(self): self.create_instances_with_args(display_name=u'test♥') result = db.instance_get_all_by_filters(self.context, |
