def oid_utc(oid): """Converts an ObjectId to a non-tz-aware datetime. :raises: TypeError if oid isn't an ObjectId """ try: return timeutils.normalize_time(oid.generation_time) except AttributeError: raise TypeError(u'Expected ObjectId and got %s' % type(oid))
def oid_ts(oid): """ Creates a non-tz-aware timestamp based on the incoming object id datetime information. """ try: norm_time = timeutils.normalize_time(oid.generation_time) return calendar.timegm(norm_time.timetuple()) except AttributeError: raise TypeError(_("Expected ObjectId and got %s") % type(oid))
def verify_message_stats(self, message): """Verifies the oldest & newest message stats :param message: oldest (or) newest message returned by queue_name/stats. """ expected_keys = ['age', 'created', 'href'] response_keys = message.keys() response_keys.sort() self.assertEqual(response_keys, expected_keys) # Verify that age has valid values age = message['age'] self.assertTrue(0 <= age <= self.limits.max_message_ttl, msg='Invalid Age {0}'.format(age)) # Verify that GET on href returns 200 path = message['href'] result = self.client.get(path) self.assertEqual(result.status_code, 200) # Verify that created time falls within the last 10 minutes # NOTE(malini): The messages are created during the test. created_time = message['created'] created_time = timeutils.normalize_time( timeutils.parse_isotime(created_time)) now = timeutils.utcnow() delta = timeutils.delta_seconds(before=created_time, after=now) # NOTE(malini): The 'int()' below is a work around for the small time # difference between julianday & UTC. # (needed to pass this test on sqlite driver) delta = int(delta) msg = 'Invalid Time Delta {0}, Created time {1}, Now {2}' \ .format(delta, created_time, now) self.assertTrue(0 <= delta <= 6000, msg)
def test_queue_lifecycle(self): # Test queue creation created = self.controller.create('test', project=self.project) self.assertTrue(created) # Test queue existence self.assertTrue(self.controller.exists('test', project=self.project)) # Test queue retrieval interaction = self.controller.list(project=self.project) queue = list(next(interaction))[0] self.assertEqual(queue['name'], 'test') # Test queue metadata retrieval metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata, {}) # Test queue update created = self.controller.set_metadata('test', project=self.project, metadata=dict(meta='test_meta')) metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata['meta'], 'test_meta') # Touching an existing queue does not affect metadata created = self.controller.create('test', project=self.project) self.assertFalse(created) metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata['meta'], 'test_meta') client_uuid = uuid.uuid4() # Test queue statistic _insert_fixtures(self.message_controller, 'test', project=self.project, client_uuid=client_uuid, num=6) # NOTE(kgriffs): We can't get around doing this, because # we don't know how the storage drive may be calculating # message timestamps (and may not be monkey-patchable). time.sleep(1.2) _insert_fixtures(self.message_controller, 'test', project=self.project, client_uuid=client_uuid, num=6) stats = self.controller.stats('test', project=self.project) message_stats = stats['messages'] self.assertEqual(message_stats['free'], 12) self.assertEqual(message_stats['claimed'], 0) self.assertEqual(message_stats['total'], 12) oldest = message_stats['oldest'] newest = message_stats['newest'] self.assertNotEqual(oldest, newest) age = oldest['age'] self.assertThat(age, matchers.GreaterThan(0)) # NOTE(kgriffs): Ensure is different enough # for the next comparison to work. soon = timeutils.utcnow() + datetime.timedelta(seconds=60) for message_stat in (oldest, newest): created_iso = message_stat['created'] created = timeutils.parse_isotime(created_iso) self.assertThat(timeutils.normalize_time(created), matchers.LessThan(soon)) self.assertIn('id', message_stat) self.assertThat(oldest['created'], matchers.LessThan(newest['created'])) # Test queue deletion self.controller.delete('test', project=self.project) # Test queue existence self.assertFalse(self.controller.exists('test', project=self.project)) # Test DoesNotExist exception with testing.expect(storage.exceptions.DoesNotExist): self.controller.get_metadata('test', project=self.project) with testing.expect(storage.exceptions.DoesNotExist): self.controller.set_metadata('test', '{}', project=self.project)
def test_queue_lifecycle(self): # Test Queue Creation created = self.controller.create('test', project=self.project) self.assertTrue(created) # Test Queue Existence self.assertTrue(self.controller.exists('test', project=self.project)) # Test Queue retrieval metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata, {}) # Test Queue Update created = self.controller.set_metadata('test', project=self.project, metadata=dict(meta='test_meta')) metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata['meta'], 'test_meta') # Touching an existing queue does not affect metadata created = self.controller.create('test', project=self.project) self.assertFalse(created) metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata['meta'], 'test_meta') # Test Queue Statistic _insert_fixtures(self.message_controller, 'test', project=self.project, client_uuid='my_uuid', num=6) # NOTE(kgriffs): We can't get around doing this, because # we don't know how the storage drive may be calculating # message timestamps (and may not be monkey-patchable). time.sleep(1) _insert_fixtures(self.message_controller, 'test', project=self.project, client_uuid='my_uuid', num=6) stats = self.controller.stats('test', project=self.project) message_stats = stats['messages'] self.assertEqual(message_stats['free'], 12) self.assertEqual(message_stats['claimed'], 0) self.assertEqual(message_stats['total'], 12) oldest = message_stats['oldest'] newest = message_stats['newest'] self.assertNotEqual(oldest, newest) # NOTE(kgriffs): Ensure "now" is different enough # for the next comparison to work. timeutils.set_time_override() timeutils.advance_time_seconds(10) for message_stat in (oldest, newest): created_iso = message_stat['created'] created = timeutils.parse_isotime(created_iso) self.assertThat(timeutils.normalize_time(created), matchers.LessThan(timeutils.utcnow())) self.assertIn('id', message_stat) self.assertThat(oldest['created'], matchers.LessThan(newest['created'])) # Test Queue Deletion self.controller.delete('test', project=self.project) # Test Queue Existence self.assertFalse(self.controller.exists('test', project=self.project)) # Test DoesNotExist Exception with testing.expect(storage.exceptions.DoesNotExist): self.controller.get_metadata('test', project=self.project) with testing.expect(storage.exceptions.DoesNotExist): self.controller.set_metadata('test', '{}', project=self.project)
def test_queue_lifecycle(self): # Test queue creation created = self.controller.create('test', project=self.project) self.assertTrue(created) # Test queue existence self.assertTrue(self.controller.exists('test', project=self.project)) # Test queue retrieval interaction = self.controller.list(project=self.project) queue = list(next(interaction))[0] self.assertEqual(queue['name'], 'test') # Test queue metadata retrieval metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata, {}) # Test queue update created = self.controller.set_metadata('test', project=self.project, metadata=dict(meta='test_meta')) metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata['meta'], 'test_meta') # Touching an existing queue does not affect metadata created = self.controller.create('test', project=self.project) self.assertFalse(created) metadata = self.controller.get_metadata('test', project=self.project) self.assertEqual(metadata['meta'], 'test_meta') client_uuid = uuid.uuid4() # Test queue statistic _insert_fixtures(self.message_controller, 'test', project=self.project, client_uuid=client_uuid, num=6) # NOTE(kgriffs): We can't get around doing this, because # we don't know how the storage drive may be calculating # message timestamps (and may not be monkey-patchable). time.sleep(1.2) _insert_fixtures(self.message_controller, 'test', project=self.project, client_uuid=client_uuid, num=6) stats = self.controller.stats('test', project=self.project) message_stats = stats['messages'] self.assertEqual(message_stats['free'], 12) self.assertEqual(message_stats['claimed'], 0) self.assertEqual(message_stats['total'], 12) oldest = message_stats['oldest'] newest = message_stats['newest'] self.assertNotEqual(oldest, newest) age = oldest['age'] self.assertThat(age, matchers.GreaterThan(0)) # NOTE(kgriffs): Ensure is different enough # for the next comparison to work. soon = timeutils.utcnow() + datetime.timedelta(seconds=60) for message_stat in (oldest, newest): created_iso = message_stat['created'] created = timeutils.parse_isotime(created_iso) self.assertThat(timeutils.normalize_time(created), matchers.LessThan(soon)) self.assertIn('id', message_stat) self.assertThat(oldest['created'], matchers.LessThan(newest['created'])) # Test queue deletion self.controller.delete('test', project=self.project) # Test queue existence self.assertFalse(self.controller.exists('test', project=self.project)) # Test DoesNotExist exception with testing.expect(storage.errors.DoesNotExist): self.controller.get_metadata('test', project=self.project) with testing.expect(storage.errors.DoesNotExist): self.controller.set_metadata('test', '{}', project=self.project)