From b36fe03702e76294d530d405ca61f45a7a382057 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 26 Nov 2013 20:21:10 -0500 Subject: Return BadRequest on X-Delete-At/After headers Gluster-swift does not support X-Delete-After or X-Delete-At headers. The code needs to inform the caller with a 400-BadRequest if they use these headers. Change-Id: Ic9d3a1646c0d26bb0204245efce4501f7479fee6 Signed-off-by: Luis Pabon Reviewed-on: http://review.gluster.org/6364 Reviewed-by: Chetan Risbud --- test/unit/common/test_constraints.py | 59 ++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) (limited to 'test/unit/common/test_constraints.py') diff --git a/test/unit/common/test_constraints.py b/test/unit/common/test_constraints.py index 7139094..180721c 100644 --- a/test/unit/common/test_constraints.py +++ b/test/unit/common/test_constraints.py @@ -16,7 +16,7 @@ import unittest import swift.common.constraints from nose import SkipTest -from mock import patch +from mock import Mock, patch from gluster.swift.common import constraints as cnt @@ -75,12 +75,65 @@ class TestConstraints(unittest.TestCase): self.assertTrue(cnt.validate_obj_name_component('..')) self.assertTrue(cnt.validate_obj_name_component('')) + def test_validate_headers(self): + req = Mock() + req.headers = [] + self.assertEqual(cnt.validate_headers(req), '') + req.headers = ['x-some-header'] + self.assertEqual(cnt.validate_headers(req), '') + req.headers = ['x-delete-at', 'x-some-header'] + self.assertNotEqual(cnt.validate_headers(req), '') + req.headers = ['x-delete-after', 'x-some-header'] + self.assertNotEqual(cnt.validate_headers(req), '') + req.headers = ['x-delete-at', 'x-delete-after', 'x-some-header'] + self.assertNotEqual(cnt.validate_headers(req), '') + + def test_validate_headers_ignoring_config_set(self): + with patch('gluster.swift.common.constraints.' + 'Glusterfs._ignore_unsupported_headers', True): + req = Mock() + req.headers = [] + self.assertEqual(cnt.validate_headers(req), '') + req.headers = ['x-some-header'] + self.assertEqual(cnt.validate_headers(req), '') + req.headers = ['x-delete-at', 'x-some-header'] + self.assertEqual(cnt.validate_headers(req), '') + req.headers = ['x-delete-after', 'x-some-header'] + self.assertEqual(cnt.validate_headers(req), '') + req.headers = ['x-delete-at', 'x-delete-after', 'x-some-header'] + self.assertEqual(cnt.validate_headers(req), '') + + def test_gluster_check_metadata(self): + mock_check_metadata = Mock() + with patch('gluster.swift.common.constraints.__check_metadata', + mock_check_metadata): + req = Mock() + req.headers = [] + cnt.gluster_check_metadata(req, 'object') + self.assertTrue(1, mock_check_metadata.call_count) + cnt.gluster_check_metadata(req, 'object', POST=False) + self.assertTrue(1, mock_check_metadata.call_count) + req.headers = ['x-some-header'] + self.assertEqual(cnt.gluster_check_metadata(req, 'object', POST=False), None) + req.headers = ['x-delete-at', 'x-some-header'] + self.assertNotEqual(cnt.gluster_check_metadata(req, 'object', POST=False), None) + req.headers = ['x-delete-after', 'x-some-header'] + self.assertNotEqual(cnt.gluster_check_metadata(req, 'object', POST=False), None) + req.headers = ['x-delete-at', 'x-delete-after', 'x-some-header'] + self.assertNotEqual(cnt.gluster_check_metadata(req, 'object', POST=False), None) + def test_gluster_check_object_creation(self): with patch('gluster.swift.common.constraints.__check_object_creation', mock_check_object_creation): - self.assertFalse(cnt.gluster_check_object_creation(None, 'dir/z')) + req = Mock() + req.headers = [] + self.assertFalse(cnt.gluster_check_object_creation(req, 'dir/z')) def test_gluster_check_object_creation_err(self): with patch('gluster.swift.common.constraints.__check_object_creation', mock_check_object_creation): - self.assertTrue(cnt.gluster_check_object_creation(None, 'dir/.')) + req = Mock() + req.headers = [] + self.assertTrue(cnt.gluster_check_object_creation(req, 'dir/.')) + req.headers = ['x-delete-at'] + self.assertTrue(cnt.gluster_check_object_creation(req, 'dir/z')) -- cgit