Various testing fixes:
- Tests involving large (5GB+) bodies are mocked, but on 32-bit python,
len() is limited to returning a ssize_t, which can represent 2GB.
- Solaris doesn't yet support syslog logging to /dev/log.
- Solaris exclusive file locks don't fail when applied multiple times
from a single process (it has to happen in a separate process).
- Uncomment portions of test/sample.conf to match what we ship in
/etc/swift/swift.conf, since the latter can't be read without
sufficient privileges. This allows us to set SWIFT_TEST_CONFIG_FILE
and run the functional tests.
The first, while potentially useful elsewhere, is really only an issue on
Solaris because Linux runs almost exclusively 64-bit, which makes this a
non-issue. The second is Solaris-only -- though clearly a similar problem
exists on MacOS -- and we will want to fix this in our Python. The third
is not in a form that is worth sending upstream. To test this properly,
the test should fork a separate process to test the lock, which should work
regardless of the OS.
--- swift-2.3.0/test/sample.conf.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/test/sample.conf 2016-02-08 01:24:17.841343735 -0800
@@ -87,17 +87,17 @@ fake_syslog = False
# Note that the cluster must have "sane" values for the test suite to pass
# (for some definition of sane).
#
-#max_file_size = 5368709122
-#max_meta_name_length = 128
-#max_meta_value_length = 256
-#max_meta_count = 90
-#max_meta_overall_size = 4096
-#max_header_size = 8192
-#max_object_name_length = 1024
-#container_listing_limit = 10000
-#account_listing_limit = 10000
-#max_account_name_length = 256
-#max_container_name_length = 256
+max_file_size = 5368709122
+max_meta_name_length = 128
+max_meta_value_length = 256
+max_meta_count = 90
+max_meta_overall_size = 4096
+max_header_size = 8192
+max_object_name_length = 1024
+container_listing_limit = 10000
+account_listing_limit = 10000
+max_account_name_length = 256
+max_container_name_length = 256
# Newer swift versions default to strict cors mode, but older ones were the
# opposite.
--- swift-2.3.0/test/unit/__init__.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/test/unit/__init__.py 2016-02-08 01:24:17.842339594 -0800
@@ -817,7 +817,7 @@ def fake_http_connect(*code_iter, **kwar
etag = '"68b329da9893e34099c7d8ad5cb9c940"'
headers = swob.HeaderKeyDict({
- 'content-length': len(self.body),
+ 'content-length': self.body.__len__(),
'content-type': 'x-application/test',
'x-timestamp': self.timestamp,
'x-backend-timestamp': self.timestamp,
--- swift-2.3.0/test/unit/common/test_utils.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/test/unit/common/test_utils.py 2016-02-08 01:24:17.844724978 -0800
@@ -53,6 +53,7 @@ from functools import partial
from tempfile import TemporaryFile, NamedTemporaryFile, mkdtemp
from netifaces import AF_INET6
from mock import MagicMock, patch
+from nose import SkipTest
from swift.common.exceptions import (Timeout, MessageTimeout,
ConnectionTimeout, LockTimeout,
@@ -748,6 +749,8 @@ class TestUtils(unittest.TestCase):
utils.HASH_PATH_PREFIX = 'startcap'
def test_lock_path(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
tmpdir = mkdtemp()
try:
with utils.lock_path(tmpdir, 0.1):
@@ -764,6 +767,8 @@ class TestUtils(unittest.TestCase):
shutil.rmtree(tmpdir)
def test_lock_path_num_sleeps(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
tmpdir = mkdtemp()
num_short_calls = [0]
exception_raised = [False]
@@ -788,6 +793,8 @@ class TestUtils(unittest.TestCase):
self.assertTrue(exception_raised[0])
def test_lock_path_class(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
tmpdir = mkdtemp()
try:
with utils.lock_path(tmpdir, 0.1, ReplicationLockTimeout):
@@ -1214,7 +1221,8 @@ class TestUtils(unittest.TestCase):
}, 'server', log_route='server')
expected_args = [((), {'address': '/dev/log',
'facility': orig_sysloghandler.LOG_LOCAL3})]
- if not os.path.exists('/dev/log') or \
+ if sys.platform == 'sunos5' or \
+ not os.path.exists('/dev/log') or \
os.path.isfile('/dev/log') or \
os.path.isdir('/dev/log'):
# Since socket on OSX is in /var/run/syslog, there will be
@@ -2402,6 +2410,8 @@ cluster_dfw1 = http://dfw1.host/v1/
MagicMock(side_effect=BaseException('test3')))
def test_lock_file(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
flags = os.O_CREAT | os.O_RDWR
with NamedTemporaryFile(delete=False) as nt:
nt.write("test string")
@@ -2480,6 +2490,8 @@ cluster_dfw1 = http://dfw1.host/v1/
os.fstat(f.fileno()).st_ino)
def test_lock_file_held_on_unlink(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
os_unlink = os.unlink
def flocking_unlink(filename):
@@ -2496,6 +2508,8 @@ cluster_dfw1 = http://dfw1.host/v1/
pass
def test_lock_file_no_unlink_if_fail(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
os_open = os.open
with NamedTemporaryFile(delete=True) as nt:
--- swift-2.3.0/test/unit/obj/test_diskfile.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/test/unit/obj/test_diskfile.py 2016-02-08 01:24:17.846568734 -0800
@@ -18,6 +18,7 @@
import cPickle as pickle
import os
+import sys
import errno
import itertools
import mock
@@ -608,6 +609,8 @@ class DiskFileManagerMixin(BaseDiskFileT
self.assertEqual(locations, [])
def test_replication_lock_on(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
# Double check settings
self.df_mgr.replication_one_per_device = True
self.df_mgr.replication_lock_timeout = 0.1
--- swift-2.3.0/test/unit/proxy/test_server.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/test/unit/proxy/test_server.py 2016-02-08 01:24:17.849738022 -0800
@@ -4263,6 +4263,9 @@ class TestObjectController(unittest.Test
class LargeResponseBody(object):
+ def __nonzero__(self):
+ return True
+
def __len__(self):
return constraints.MAX_FILE_SIZE + 1
@@ -4510,6 +4513,9 @@ class TestObjectController(unittest.Test
class LargeResponseBody(object):
+ def __nonzero__(self):
+ return True
+
def __len__(self):
return constraints.MAX_FILE_SIZE + 1
@@ -4537,6 +4543,9 @@ class TestObjectController(unittest.Test
class LargeResponseBody(object):
+ def __nonzero__(self):
+ return True
+
def __len__(self):
return constraints.MAX_FILE_SIZE + 1