Skip to content

Commit f9ce3b9

Browse files
prepare 6.13.3 release (#154)
1 parent 881d1c3 commit f9ce3b9

File tree

6 files changed

+36
-7
lines changed

6 files changed

+36
-7
lines changed

.circleci/config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ jobs:
6666
- run:
6767
name: install requirements
6868
command: |
69-
sudo pip install --upgrade pip virtualenv;
69+
sudo pip install --upgrade pip;
70+
sudo pip install 'virtualenv~=16.0';
7071
sudo pip install -r test-requirements.txt;
7172
if [[ "<<parameters.filesource-supported>>" == "true" ]]; then
7273
sudo pip install -r test-filesource-optional-requirements.txt;

ldclient/event_processor.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44
# currently excluded from documentation - see docs/README.md
55

6+
from calendar import timegm
67
from collections import namedtuple
78
from email.utils import parsedate
89
import errno
@@ -368,7 +369,7 @@ def _handle_response(self, r):
368369
if server_date_str is not None:
369370
server_date = parsedate(server_date_str)
370371
if server_date is not None:
371-
timestamp = int(time.mktime(server_date) * 1000)
372+
timestamp = int(timegm(server_date) * 1000)
372373
self._last_known_past_time = timestamp
373374
if r.status > 299 and not is_http_error_recoverable(r.status):
374375
self._disabled = True

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ certifi>=2018.4.16
22
expiringdict>=1.1.4,<1.2.0
33
six>=1.10.0
44
pyRFC3339>=1.0
5-
semver>=2.7.9
5+
semver>=2.7.9,<3.0.0
66
urllib3>=1.22.0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
pyyaml>=3.0,<5.2
2-
watchdog>=0.9
2+
watchdog>=0.9,<1.0

test-requirements.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
mock>=2.0.0
22
pytest>=2.8
3-
redis>=2.10.5
4-
boto3>=1.9.71
3+
redis>=2.10.5,<3.0.0
4+
boto3>=1.9.71,<1.11.0
55
coverage>=4.4
66
jsonpickle==0.9.3
7-
pytest-capturelog>=0.7
7+
pytest-catchlog
88
pytest-cov>=2.4.0
99
codeclimate-test-reporter>=0.2.1

testing/test_event_processor.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,33 @@ def test_event_can_be_both_tracked_and_debugged():
278278
check_feature_event(output[2], e, True, user)
279279
check_summary_event(output[3])
280280

281+
def test_debug_mode_does_not_expire_if_both_client_time_and_server_time_are_before_expiration_time():
282+
with DefaultTestProcessor() as ep:
283+
# Pick a server time that slightly different from client time
284+
server_time = now() + 1000
285+
286+
# Send and flush an event we don't care about, just to set the last server time
287+
mock_http.set_server_time(server_time)
288+
ep.send_event({ 'kind': 'identify', 'user': { 'key': 'otherUser' }})
289+
flush_and_get_events(ep)
290+
291+
# Now send an event with debug mode on, with a "debug until" time that is further in
292+
# the future than both the client time and the server time
293+
debug_until = server_time + 10000
294+
e = {
295+
'kind': 'feature', 'key': 'flagkey', 'version': 11, 'user': user,
296+
'variation': 1, 'value': 'value', 'default': 'default',
297+
'trackEvents': False, 'debugEventsUntilDate': debug_until
298+
}
299+
ep.send_event(e)
300+
301+
# Should get a summary event only, not a full feature event
302+
output = flush_and_get_events(ep)
303+
assert len(output) == 3
304+
check_index_event(output[0], e, user)
305+
check_feature_event(output[1], e, True, user) # debug event
306+
check_summary_event(output[2])
307+
281308
def test_debug_mode_expires_based_on_client_time_if_client_time_is_later_than_server_time():
282309
with DefaultTestProcessor() as ep:
283310
# Pick a server time that is somewhat behind the client time

0 commit comments

Comments
 (0)