Changeset 1511:ce5c6ccebd47


Ignore:
Timestamp:
Jun 7, 2014, 11:32:31 PM (7 years ago)
Author:
Stefan Schwarzer <sschwarzer@…>
Branch:
default
Message:
Expect time shift in 15-minute units, not hour units (ticket #81).
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ftputil/host.py

    r1506 r1511  
    303303        absolute_time_shift = abs(time_shift)
    304304        signum = time_shift / absolute_time_shift
    305         # Round it to hours. This code should also work for later Python
    306         # versions because of the explicit `int`.
    307         absolute_rounded_time_shift = \
    308           int( (absolute_time_shift + 30*minute) / hour ) * hour
     305        # Round absolute time shift to 15-minute units.
     306        absolute_rounded_time_shift = (
     307          int( (absolute_time_shift + (7.5*minute)) / (15.0*minute) ) *
     308          (15.0*minute))
    309309        # Return with correct sign.
    310310        return signum * absolute_rounded_time_shift
     
    326326                  "time shift abs({0:.2f} s) > 1 day".format(time_shift))
    327327        # Test 2: Fail if the deviation between given time shift and
    328         #         full hours is greater than a certain limit.
     328        #         15-minute units is greater than a certain limit.
    329329        maximum_deviation = 5 * minute
    330330        if abs(time_shift - self.__rounded_time_shift(time_shift)) > \
     
    332332            raise ftputil.error.TimeShiftError(
    333333                    "time shift ({0:.2f} s) deviates more than {1:d} s "
    334                     "from full hours".format(
     334                    "from 15-minute units".format(
    335335                      time_shift, int(maximum_deviation)))
    336336
  • test/test_host.py

    r1502 r1511  
    1313import time
    1414import unittest
     15import warnings
    1516
    1617import ftputil
     
    381382          (      0.1,         0),
    382383          (     -0.1,         0),
    383           (   1500,           0),
    384           (  -1500,           0),
    385           (   1800,        3600),
    386           (  -1800,       -3600),
    387           (   2000,        3600),
    388           (  -2000,       -3600),
     384          (   1500,        1800),
     385          (  -1500,       -1800),
     386          (   1800,        1800),
     387          (  -1800,       -1800),
     388          (   2000,        1800),
     389          (  -2000,       -1800),
    389390          ( 5*3600-100,  5*3600),
    390391          (-5*3600+100, -5*3600)]
     
    407408        self.assertRaises(ftputil.error.TimeShiftError, assert_time_shift,
    408409                          -25*3600)
    409         # Invalid time shift (too large deviation from full hours unacceptable)
     410        # Invalid time shift (too large deviation from 15-minute units
     411        # is unacceptable)
    410412        self.assertRaises(ftputil.error.TimeShiftError, assert_time_shift,
    411                           10*60)
     413                          8*60)
    412414        self.assertRaises(ftputil.error.TimeShiftError, assert_time_shift,
    413                           -3600-10*60)
     415                          -3600-8*60)
    414416
    415417    def test_synchronize_times(self):
     
    417419        host = test_base.ftp_host_factory(ftp_host_class=TimeShiftFTPHost,
    418420                                          session_factory=TimeShiftMockSession)
    419         # Valid time shift
    420         host.path.set_mtime(time.time() + 3630)
    421         host.synchronize_times()
    422         self.assertEqual(host.time_shift(), 3600)
    423         # Invalid time shift
    424         host.path.set_mtime(time.time() + 3600+10*60)
    425         self.assertRaises(ftputil.error.TimeShiftError, host.synchronize_times)
     421        # Valid time shifts
     422        test_data = [
     423          (60*60+30,  60*60),
     424          (60*60-100, 60*60),
     425          (30*60+100, 30*60),
     426          (45*60-100, 45*60),
     427        ]
     428        for measured_time_shift, expected_time_shift in test_data:
     429            host.path.set_mtime(time.time() + measured_time_shift)
     430            host.synchronize_times()
     431            self.assertEqual(host.time_shift(), expected_time_shift)
     432        # Invalid time shifts
     433        measured_time_shifts = [60*60+8*60, 45*60-6*60]
     434        for measured_time_shift in measured_time_shifts:
     435            host.path.set_mtime(time.time() + measured_time_shift)
     436            self.assertRaises(ftputil.error.TimeShiftError,
     437                              host.synchronize_times)
    426438
    427439    def test_synchronize_times_for_server_in_east(self):
Note: See TracChangeset for help on using the changeset viewer.