summaryrefslogtreecommitdiff
path: root/tests/test_serializers.py
blob: 1e3e671d7637aff304ca4431cc3d32645fe2938a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import json
import pickle
import pickletools
import queue
import unittest

from rq.serializers import DefaultSerializer, resolve_serializer


class TestSerializers(unittest.TestCase):
    def test_resolve_serializer(self):
        """Ensure function resolve_serializer works correctly"""
        serializer = resolve_serializer(None)
        self.assertIsNotNone(serializer)
        self.assertEqual(serializer, DefaultSerializer)

        # Test round trip with default serializer
        test_data = {'test': 'data'}
        serialized_data = serializer.dumps(test_data)
        self.assertEqual(serializer.loads(serialized_data), test_data)
        self.assertEqual(
            next(pickletools.genops(serialized_data))[1],
            pickle.HIGHEST_PROTOCOL
        )

        # Test using json serializer
        serializer = resolve_serializer(json)
        self.assertIsNotNone(serializer)

        self.assertTrue(hasattr(serializer, 'dumps'))
        self.assertTrue(hasattr(serializer, 'loads'))

        # Test raise NotImplmentedError
        with self.assertRaises(NotImplementedError):
            resolve_serializer(object)

        # Test raise Exception
        with self.assertRaises(Exception):
            resolve_serializer(queue.Queue())

        # Test using path.to.serializer string
        serializer = resolve_serializer('tests.fixtures.Serializer')
        self.assertIsNotNone(serializer)