mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
Fixed #29708 -- Deprecated PickleSerializer.
This commit is contained in:
committed by
Mariusz Felisiak
parent
c920387fab
commit
45a42aabfa
@@ -4,7 +4,8 @@ from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.sessions.backends.db import SessionStore
|
||||
from django.db import models
|
||||
from django.db.models import Count
|
||||
from django.test import TestCase, override_settings
|
||||
from django.test import TestCase, ignore_warnings, override_settings
|
||||
from django.utils.deprecation import RemovedInDjango50Warning
|
||||
|
||||
from .models import (
|
||||
Base, Child, Derived, Feature, Item, ItemAndSimpleItem, Leaf, Location,
|
||||
@@ -91,6 +92,7 @@ class DeferRegressionTest(TestCase):
|
||||
list(SimpleItem.objects.annotate(Count('feature')).only('name')),
|
||||
list)
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango50Warning)
|
||||
@override_settings(SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer')
|
||||
def test_ticket_12163(self):
|
||||
# Test for #12163 - Pickling error saving session with unsaved model
|
||||
|
||||
@@ -10,7 +10,8 @@ from django.core.serializers.base import PickleSerializer, ProgressBar
|
||||
from django.db import connection, transaction
|
||||
from django.http import HttpResponse
|
||||
from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature
|
||||
from django.test.utils import Approximate
|
||||
from django.test.utils import Approximate, ignore_warnings
|
||||
from django.utils.deprecation import RemovedInDjango50Warning
|
||||
|
||||
from .models import (
|
||||
Actor, Article, Author, AuthorProfile, BaseModel, Category, Child,
|
||||
@@ -420,6 +421,7 @@ class SerializersTransactionTestBase:
|
||||
|
||||
|
||||
class PickleSerializerTests(SimpleTestCase):
|
||||
@ignore_warnings(category=RemovedInDjango50Warning)
|
||||
def test_serializer_protocol(self):
|
||||
serializer = PickleSerializer(protocol=3)
|
||||
self.assertEqual(serializer.protocol, 3)
|
||||
@@ -427,12 +429,21 @@ class PickleSerializerTests(SimpleTestCase):
|
||||
serializer = PickleSerializer()
|
||||
self.assertEqual(serializer.protocol, pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango50Warning)
|
||||
def test_serializer_loads_dumps(self):
|
||||
serializer = PickleSerializer()
|
||||
test_data = 'test data'
|
||||
dump = serializer.dumps(test_data)
|
||||
self.assertEqual(serializer.loads(dump), test_data)
|
||||
|
||||
def test_serializer_warning(self):
|
||||
msg = (
|
||||
'PickleSerializer is deprecated due to its security risk. Use '
|
||||
'JSONSerializer instead.'
|
||||
)
|
||||
with self.assertRaisesMessage(RemovedInDjango50Warning, msg):
|
||||
PickleSerializer()
|
||||
|
||||
|
||||
def register_tests(test_class, method_name, test_func, exclude=()):
|
||||
"""
|
||||
|
||||
@@ -7,6 +7,7 @@ import unittest
|
||||
from datetime import timedelta
|
||||
from http import cookies
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.sessions.backends.base import UpdateError
|
||||
@@ -24,9 +25,7 @@ from django.contrib.sessions.exceptions import (
|
||||
)
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
from django.contrib.sessions.models import Session
|
||||
from django.contrib.sessions.serializers import (
|
||||
JSONSerializer, PickleSerializer,
|
||||
)
|
||||
from django.contrib.sessions.serializers import JSONSerializer
|
||||
from django.core import management
|
||||
from django.core.cache import caches
|
||||
from django.core.cache.backends.base import InvalidCacheBackendError
|
||||
@@ -880,9 +879,8 @@ class CookieSessionTests(SessionTestsMixin, SimpleTestCase):
|
||||
# by creating a new session
|
||||
self.assertEqual(self.session.serializer, JSONSerializer)
|
||||
self.session.save()
|
||||
|
||||
self.session.serializer = PickleSerializer
|
||||
self.session.load()
|
||||
with mock.patch('django.core.signing.loads', side_effect=ValueError):
|
||||
self.session.load()
|
||||
|
||||
@unittest.skip("Cookie backend doesn't have an external store to create records in.")
|
||||
def test_session_load_does_not_create_record(self):
|
||||
|
||||
Reference in New Issue
Block a user