Пример #1
0
 def test_get_all(self):
     obj1 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj1 = self.access.add_or_update(obj1)
     obj2 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj2 = self.access.add_or_update(obj2)
     objs = self.access.get_all()
     self.assertIsNotNone(objs)
     self.assertEqual(len(objs), 2)
     self.assertListEqual(list(objs), [obj1, obj2])
Пример #2
0
 def test_query_filter(self):
     obj1 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj1 = self.access.add_or_update(obj1)
     obj2 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj2 = self.access.add_or_update(obj2)
     objs = self.access.query(context__user="******")
     self.assertIsNotNone(objs)
     self.assertGreater(len(objs), 0)
     self.assertEqual(obj1.id, objs[0].id)
     self.assertEqual(obj1.name, objs[0].name)
     self.assertDictEqual(obj1.context, objs[0].context)
Пример #3
0
    def test_query_exclude_fields(self):
        count = 5
        ts = date_utils.add_utc_tz(datetime.datetime(2014, 12, 25, 0, 0, 0))
        for i in range(count):
            category = 'type1'
            obj = FakeModelDB(name='test-2-%s' % (i),
                              timestamp=ts,
                              category=category)
            self.access.add_or_update(obj)

        model_dbs = FakeModel.query()
        self.assertEqual(model_dbs[0].name, 'test-2-0')
        self.assertEqual(model_dbs[0].timestamp, ts)
        self.assertEqual(model_dbs[0].category, 'type1')

        model_dbs = FakeModel.query(exclude_fields=['name'])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, ts)
        self.assertEqual(model_dbs[0].category, 'type1')

        model_dbs = FakeModel.query(exclude_fields=['name', 'timestamp'])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, None)
        self.assertEqual(model_dbs[0].category, 'type1')

        model_dbs = FakeModel.query(
            exclude_fields=['name', 'timestamp', 'category'])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, None)
        self.assertEqual(model_dbs[0].category, None)
Пример #4
0
    def test_pagination(self):
        count = 100
        page_size = 25
        pages = count / page_size
        users = ['Peter', 'Susan', 'Edmund', 'Lucy']

        for user in users:
            context = {'user': user}
            for i in range(count):
                self.access.add_or_update(
                    FakeModelDB(name=uuid.uuid4().hex,
                                context=context,
                                index=i))

        self.assertEqual(self.access.count(), len(users) * count)

        for user in users:
            for i in range(pages):
                offset = i * page_size
                objs = self.access.query(context__user=user,
                                         order_by=['index'],
                                         offset=offset,
                                         limit=page_size)
                self.assertEqual(len(objs), page_size)
                for j in range(page_size):
                    self.assertEqual(objs[j].context['user'], user)
                    self.assertEqual(objs[j].index, (i * page_size) + j)
Пример #5
0
    def test_pagination(self):
        count = 100
        page_size = 25
        pages = int(count / page_size)
        users = ["Peter", "Susan", "Edmund", "Lucy"]

        for user in users:
            context = {"user": user}
            for i in range(count):
                self.access.add_or_update(
                    FakeModelDB(name=uuid.uuid4().hex, context=context, index=i)
                )

        self.assertEqual(self.access.count(), len(users) * count)

        for user in users:
            for i in range(pages):
                offset = i * page_size
                objs = self.access.query(
                    context__user=user,
                    order_by=["index"],
                    offset=offset,
                    limit=page_size,
                )
                self.assertEqual(len(objs), page_size)
                for j in range(page_size):
                    self.assertEqual(objs[j].context["user"], user)
                    self.assertEqual(objs[j].index, (i * page_size) + j)
Пример #6
0
    def test_query_only_fields(self):
        count = 5
        ts = date_utils.add_utc_tz(datetime.datetime(2014, 12, 25, 0, 0, 0))
        for i in range(count):
            category = "type1"
            obj = FakeModelDB(name="test-%s" % (i), timestamp=ts, category=category)
            self.access.add_or_update(obj)

        model_dbs = FakeModel.query()
        self.assertEqual(model_dbs[0].name, "test-0")
        self.assertEqual(model_dbs[0].timestamp, ts)
        self.assertEqual(model_dbs[0].category, "type1")

        # only id
        model_dbs = FakeModel.query(only_fields=["id"])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, None)
        self.assertEqual(model_dbs[0].category, None)

        # only name - note: id is always included
        model_dbs = FakeModel.query(only_fields=["name"])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, "test-0")
        self.assertEqual(model_dbs[0].timestamp, None)
        self.assertEqual(model_dbs[0].category, None)
Пример #7
0
    def test_query_exclude_fields(self):
        count = 5
        ts = date_utils.add_utc_tz(datetime.datetime(2014, 12, 25, 0, 0, 0))
        for i in range(count):
            category = "type1"
            obj = FakeModelDB(name="test-2-%s" % (i), timestamp=ts, category=category)
            self.access.add_or_update(obj)

        model_dbs = FakeModel.query()
        self.assertEqual(model_dbs[0].name, "test-2-0")
        self.assertEqual(model_dbs[0].timestamp, ts)
        self.assertEqual(model_dbs[0].category, "type1")

        model_dbs = FakeModel.query(exclude_fields=["name"])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, ts)
        self.assertEqual(model_dbs[0].category, "type1")

        model_dbs = FakeModel.query(exclude_fields=["name", "timestamp"])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, None)
        self.assertEqual(model_dbs[0].category, "type1")

        model_dbs = FakeModel.query(exclude_fields=["name", "timestamp", "category"])
        self.assertTrue(model_dbs[0].id)
        self.assertEqual(model_dbs[0].name, None)
        self.assertEqual(model_dbs[0].timestamp, None)
        self.assertEqual(model_dbs[0].category, None)
 def test_process_message_pre_ack(self):
     payload = FakeModelDB()
     handler = get_staged_handler()
     mock_message = mock.MagicMock()
     handler._queue_consumer.process(payload, mock_message)
     FakeStagedMessageHandler.pre_ack_process.assert_called_once_with(payload)
     self.assertTrue(mock_message.ack.called)
Пример #9
0
 def test_process_message(self):
     payload = FakeModelDB()
     handler = get_staged_handler()
     mock_message = mock.MagicMock()
     handler._queue_consumer.process(payload, mock_message)
     BufferedDispatcher.dispatch.assert_called_once_with(
         handler._queue_consumer._process_message, payload)
     handler._queue_consumer._process_message(payload)
     FakeStagedMessageHandler.process.assert_called_once_with(payload)
     self.assertTrue(mock_message.ack.called)
Пример #10
0
 def test_query_by_id(self):
     obj1 = FakeModelDB(name=uuid.uuid4().hex, context={'user': '******'})
     obj1 = self.access.add_or_update(obj1)
     obj2 = self.access.get_by_id(str(obj1.id))
     self.assertIsNotNone(obj2)
     self.assertEqual(obj1.id, obj2.id)
     self.assertEqual(obj1.name, obj2.name)
     self.assertDictEqual(obj1.context, obj2.context)
     self.assertRaises(StackStormDBObjectNotFoundError,
                       self.access.get_by_id, str(bson.ObjectId()))
Пример #11
0
 def test_query_by_name(self):
     obj1 = FakeModelDB(name=uuid.uuid4().hex, context={'user': '******'})
     obj1 = self.access.add_or_update(obj1)
     obj2 = self.access.get_by_name(obj1.name)
     self.assertIsNotNone(obj2)
     self.assertEqual(obj1.id, obj2.id)
     self.assertEqual(obj1.name, obj2.name)
     self.assertDictEqual(obj1.context, obj2.context)
     self.assertRaises(ValueError, self.access.get_by_name,
                       uuid.uuid4().hex)
Пример #12
0
 def test_query_by_name(self):
     obj1 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj1 = self.access.add_or_update(obj1)
     obj2 = self.access.get_by_name(obj1.name)
     self.assertIsNotNone(obj2)
     self.assertEqual(obj1.id, obj2.id)
     self.assertEqual(obj1.name, obj2.name)
     self.assertDictEqual(obj1.context, obj2.context)
     self.assertRaises(
         StackStormDBObjectNotFoundError, self.access.get_by_name, uuid.uuid4().hex
     )
Пример #13
0
    def test_crud(self):
        obj1 = FakeModelDB(name=uuid.uuid4().hex, context={'a': 1})
        obj1 = self.access.add_or_update(obj1)
        obj2 = self.access.get(name=obj1.name)
        self.assertIsNotNone(obj2)
        self.assertEqual(obj1.id, obj2.id)
        self.assertEqual(obj1.name, obj2.name)
        self.assertDictEqual(obj1.context, obj2.context)

        obj1.name = uuid.uuid4().hex
        obj1 = self.access.add_or_update(obj1)
        obj2 = self.access.get(name=obj1.name)
        self.assertIsNotNone(obj2)
        self.assertEqual(obj1.id, obj2.id)
        self.assertEqual(obj1.name, obj2.name)
        self.assertDictEqual(obj1.context, obj2.context)

        self.access.delete(obj1)
        obj2 = self.access.get(name=obj1.name)
        self.assertIsNone(obj2)
Пример #14
0
    def test_crud(self):
        obj1 = FakeModelDB(name=uuid.uuid4().hex, context={"a": 1})
        obj1 = self.access.add_or_update(obj1)
        obj2 = self.access.get(name=obj1.name)
        self.assertIsNotNone(obj2)
        self.assertEqual(obj1.id, obj2.id)
        self.assertEqual(obj1.name, obj2.name)
        self.assertDictEqual(obj1.context, obj2.context)

        obj1.name = uuid.uuid4().hex
        obj1 = self.access.add_or_update(obj1)
        obj2 = self.access.get(name=obj1.name)
        self.assertIsNotNone(obj2)
        self.assertEqual(obj1.id, obj2.id)
        self.assertEqual(obj1.name, obj2.name)
        self.assertDictEqual(obj1.context, obj2.context)

        self.access.delete(obj1)
        obj2 = self.access.get(name=obj1.name)
        self.assertIsNone(obj2)
Пример #15
0
    def test_null_filter(self):
        obj1 = FakeModelDB(name=uuid.uuid4().hex)
        obj1 = self.access.add_or_update(obj1)

        objs = self.access.query(index="null")
        self.assertEqual(len(objs), 1)
        self.assertEqual(obj1.id, objs[0].id)
        self.assertEqual(obj1.name, objs[0].name)
        self.assertIsNone(getattr(obj1, "index", None))

        objs = self.access.query(index=None)
        self.assertEqual(len(objs), 1)
        self.assertEqual(obj1.id, objs[0].id)
        self.assertEqual(obj1.name, objs[0].name)
        self.assertIsNone(getattr(obj1, "index", None))
Пример #16
0
    def test_datetime_range(self):
        base = date_utils.add_utc_tz(datetime.datetime(2014, 12, 25, 0, 0, 0))
        for i in range(60):
            timestamp = base + datetime.timedelta(seconds=i)
            obj = FakeModelDB(name=uuid.uuid4().hex, timestamp=timestamp)
            self.access.add_or_update(obj)

        dt_range = "2014-12-25T00:00:10Z..2014-12-25T00:00:19Z"
        objs = self.access.query(timestamp=dt_range)
        self.assertEqual(len(objs), 10)
        self.assertLess(objs[0].timestamp, objs[9].timestamp)

        dt_range = "2014-12-25T00:00:19Z..2014-12-25T00:00:10Z"
        objs = self.access.query(timestamp=dt_range)
        self.assertEqual(len(objs), 10)
        self.assertLess(objs[9].timestamp, objs[0].timestamp)
Пример #17
0
    def test_escaped_field(self):
        context = {"a.b.c": "abc"}
        obj1 = FakeModelDB(name=uuid.uuid4().hex, context=context)
        obj2 = self.access.add_or_update(obj1)

        # Check that the original dict has not been altered.
        self.assertIn("a.b.c", list(context.keys()))
        self.assertNotIn("a\uff0eb\uff0ec", list(context.keys()))

        # Check to_python has run and context is not left escaped.
        self.assertDictEqual(obj2.context, context)

        # Check field is not escaped when retrieving from persistence.
        obj3 = self.access.get(name=obj2.name)
        self.assertIsNotNone(obj3)
        self.assertEqual(obj3.id, obj2.id)
        self.assertDictEqual(obj3.context, context)
Пример #18
0
    def test_sort_multiple(self):
        count = 60
        base = date_utils.add_utc_tz(datetime.datetime(2014, 12, 25, 0, 0, 0))
        for i in range(count):
            category = 'type1' if i % 2 else 'type2'
            timestamp = base + datetime.timedelta(seconds=i)
            obj = FakeModelDB(name=uuid.uuid4().hex, timestamp=timestamp, category=category)
            self.access.add_or_update(obj)

        objs = self.access.query(order_by=['category', 'timestamp'])
        self.assertEqual(len(objs), count)
        for i in range(count):
            category = 'type1' if i < count / 2 else 'type2'
            self.assertEqual(objs[i].category, category)
        self.assertLess(objs[0].timestamp, objs[(count / 2) - 1].timestamp)
        self.assertLess(objs[count / 2].timestamp, objs[(count / 2) - 1].timestamp)
        self.assertLess(objs[count / 2].timestamp, objs[count - 1].timestamp)
Пример #19
0
 def tearDown(self):
     FakeModelDB.drop_collection()
     super(TestPersistence, self).tearDown()
Пример #20
0
 def test_count(self):
     obj1 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj1 = self.access.add_or_update(obj1)
     obj2 = FakeModelDB(name=uuid.uuid4().hex, context={"user": "******"})
     obj2 = self.access.add_or_update(obj2)
     self.assertEqual(self.access.count(), 2)
Пример #21
0
 def tearDown(self):
     FakeModelDB.drop_collection()
     super(TestPersistence, self).tearDown()
Пример #22
0
 def test_process_message(self):
     payload = FakeModelDB()
     handler = get_variable_messages_handler()
     handler._queue_consumer._process_message(payload)
     FakeVariableMessageHandler.handle_fake_model.assert_called_once_with(
         payload)
Пример #23
0
 def test_process_message(self):
     payload = FakeModelDB()
     handler = get_handler()
     handler._queue_consumer._process_message(payload)
     FakeMessageHandler.process.assert_called_once_with(payload)