From 6cd1dcebc0801dc16db5f64c81baf1fe17165c88 Mon Sep 17 00:00:00 2001 From: "Davanum Srinivas (dims)" Date: Sun, 29 Nov 2015 02:21:46 +0000 Subject: [PATCH] Revert "serializer: remove deprecated RequestContextSerializer" This reverts commit fb2037bcb492137ee7de5488c30ef8941b914e13. Change-Id: I9b32708340c232369940738ade14cb6cbb02b331 --- oslo_messaging/serializer.py | 28 ++++++++- oslo_messaging/tests/test_serializer.py | 75 +++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 oslo_messaging/tests/test_serializer.py diff --git a/oslo_messaging/serializer.py b/oslo_messaging/serializer.py index 78bf983b6..8b7c0a7a3 100644 --- a/oslo_messaging/serializer.py +++ b/oslo_messaging/serializer.py @@ -12,12 +12,15 @@ # License for the specific language governing permissions and limitations # under the License. -__all__ = ['Serializer', 'NoOpSerializer', 'JsonPayloadSerializer'] +__all__ = ['Serializer', 'NoOpSerializer', 'JsonPayloadSerializer', + 'RequestContextSerializer'] """Provides the definition of a message serialization handler""" import abc +from debtcollector import removals +from oslo_context import context as common_context from oslo_serialization import jsonutils import six @@ -61,6 +64,29 @@ class Serializer(object): """ +@removals.remove(version="2.9", removal_version="3.0") +class RequestContextSerializer(Serializer): + + def __init__(self, base): + self._base = base + + def serialize_entity(self, context, entity): + if not self._base: + return entity + return self._base.serialize_entity(context, entity) + + def deserialize_entity(self, context, entity): + if not self._base: + return entity + return self._base.deserialize_entity(context, entity) + + def serialize_context(self, context): + return context.to_dict() + + def deserialize_context(self, context): + return common_context.RequestContext.from_dict(context) + + class NoOpSerializer(Serializer): """A serializer that does nothing.""" diff --git a/oslo_messaging/tests/test_serializer.py b/oslo_messaging/tests/test_serializer.py new file mode 100644 index 000000000..329d9de71 --- /dev/null +++ b/oslo_messaging/tests/test_serializer.py @@ -0,0 +1,75 @@ +# Copyright 2015 Mirantis Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_context import context as common_context +from six.moves import mock + +from oslo_messaging import serializer +from oslo_messaging.tests import utils as test_utils + + +class TestRequestContextSerializer(test_utils.BaseTestCase): + + def setUp(self): + super(TestRequestContextSerializer, self).setUp() + + self.serializer = serializer.RequestContextSerializer(mock.MagicMock()) + self.context = common_context.RequestContext() + self.entity = {'foo': 'bar'} + + def test_serialize_entity(self): + self.serializer.serialize_entity(self.context, self.entity) + self.serializer._base.serialize_entity.assert_called_with( + self.context, self.entity) + + def test_serialize_entity_empty_base(self): + # NOTE(viktors): Return False for check `if self.serializer._base:` + bool_args = {'__bool__': lambda *args: False, + '__nonzero__': lambda *args: False} + self.serializer._base.configure_mock(**bool_args) + + entity = self.serializer.serialize_entity(self.context, self.entity) + self.assertFalse(self.serializer._base.serialize_entity.called) + self.assertEqual(entity, self.entity) + + def test_deserialize_entity(self): + self.serializer.deserialize_entity(self.context, self.entity) + self.serializer._base.deserialize_entity.assert_called_with( + self.context, self.entity) + + def test_deserialize_entity_empty_base(self): + # NOTE(viktors): Return False for check `if self.serializer._base:` + bool_args = {'__bool__': lambda *args: False, + '__nonzero__': lambda *args: False} + self.serializer._base.configure_mock(**bool_args) + + entity = self.serializer.deserialize_entity(self.context, self.entity) + self.assertFalse(self.serializer._base.serialize_entity.called) + self.assertEqual(entity, self.entity) + + def test_serialize_context(self): + new_context = self.serializer.serialize_context(self.context) + + self.assertEqual(new_context, self.context.to_dict()) + + @mock.patch.object(common_context.RequestContext, 'from_dict', + return_value='foobar') + def test_deserialize_context(self, mock_to_dict): + new_context = self.serializer.deserialize_context(self.context) + + mock_to_dict.assert_called_with(self.context) + self.assertEqual( + new_context, + common_context.RequestContext.from_dict(self.context) + ) diff --git a/requirements.txt b/requirements.txt index c93f35eda..f7a5c87f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,7 @@ pbr>=1.6 futurist>=0.1.2 # Apache-2.0 oslo.config>=2.7.0 # Apache-2.0 +oslo.context>=0.2.0 # Apache-2.0 oslo.log>=1.12.0 # Apache-2.0 oslo.utils>=2.8.0 # Apache-2.0 oslo.serialization>=1.10.0 # Apache-2.0