Skip to content

Commit e3edc4e

Browse files
author
Roland Hedberg
committed
Fixed bug in duration parsing.
1 parent d10e9e6 commit e3edc4e

File tree

2 files changed

+48
-21
lines changed

2 files changed

+48
-21
lines changed

src/saml2/time_util.py

+2
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ def parse_duration(duration):
9494
raise Exception("Not allowed to end with 'T'")
9595
else:
9696
raise Exception("Missing T")
97+
elif duration[index] == "T":
98+
continue
9799
else:
98100
try:
99101
mod = duration[index:].index(code)

tests/test_10_time_util.py

+46-21
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,43 @@
77
from saml2.time_util import str_to_time, instant, valid, in_a_while
88
from saml2.time_util import before, after, not_before, not_on_or_after
99

10+
1011
def test_f_quotient():
11-
assert f_quotient(-1,3) == -1
12-
assert f_quotient(0,3) == 0
13-
assert f_quotient(1,3) == 0
14-
assert f_quotient(2,3) == 0
15-
assert f_quotient(3,3) == 1
16-
assert f_quotient(3.123,3) == 1
12+
assert f_quotient(-1, 3) == -1
13+
assert f_quotient(0, 3) == 0
14+
assert f_quotient(1, 3) == 0
15+
assert f_quotient(2, 3) == 0
16+
assert f_quotient(3, 3) == 1
17+
assert f_quotient(3.123, 3) == 1
18+
1719

1820
def test_modulo():
19-
assert modulo(-1,3) == 2
20-
assert modulo(0,3) == 0
21-
assert modulo(1,3) == 1
22-
assert modulo(2,3) == 2
23-
assert modulo(3,3) == 0
21+
assert modulo(-1, 3) == 2
22+
assert modulo(0, 3) == 0
23+
assert modulo(1, 3) == 1
24+
assert modulo(2, 3) == 2
25+
assert modulo(3, 3) == 0
2426
x = 3.123
25-
assert modulo(3.123,3) == x - 3
27+
assert modulo(3.123, 3) == x - 3
28+
2629

2730
def test_f_quotient_2():
2831
assert f_quotient(0, 1, 13) == -1
29-
for i in range(1,13):
32+
for i in range(1, 13):
3033
assert f_quotient(i, 1, 13) == 0
3134
assert f_quotient(13, 1, 13) == 1
3235
assert f_quotient(13.123, 1, 13) == 1
3336

37+
3438
def test_modulo_2():
3539
assert modulo(0, 1, 13) == 12
36-
for i in range(1,13):
40+
for i in range(1, 13):
3741
assert modulo(i, 1, 13) == i
3842
assert modulo(13, 1, 13) == 1
3943
#x = 0.123
4044
#assert modulo(13+x, 1, 13) == 1+x
4145

46+
4247
def test_parse_duration():
4348
(sign, d) = parse_duration("P1Y3M5DT7H10M3.3S")
4449
assert sign == "+"
@@ -48,7 +53,19 @@ def test_parse_duration():
4853
assert d['tm_mday'] == 5
4954
assert d['tm_year'] == 1
5055
assert d['tm_min'] == 10
51-
56+
57+
58+
def test_parse_duration2():
59+
(sign, d) = parse_duration("PT30M")
60+
assert sign == "+"
61+
assert d['tm_sec'] == 0
62+
assert d['tm_mon'] == 0
63+
assert d['tm_hour'] == 0
64+
assert d['tm_mday'] == 0
65+
assert d['tm_year'] == 0
66+
assert d['tm_min'] == 30
67+
68+
5269
def test_add_duration_1():
5370
#2000-01-12T12:13:14Z P1Y3M5DT7H10M3S 2001-04-17T19:23:17Z
5471
t = add_duration(str_to_time("2000-01-12T12:13:14Z"), "P1Y3M5DT7H10M3S")
@@ -58,17 +75,19 @@ def test_add_duration_1():
5875
assert t.tm_hour == 19
5976
assert t.tm_min == 23
6077
assert t.tm_sec == 17
61-
78+
79+
6280
def test_add_duration_2():
6381
#2000-01-12 PT33H 2000-01-13
64-
t = add_duration(str_to_time("2000-01-12T00:00:00Z"),"PT33H")
82+
t = add_duration(str_to_time("2000-01-12T00:00:00Z"), "PT33H")
6583
assert t.tm_year == 2000
6684
assert t.tm_mon == 1
6785
assert t.tm_mday == 14
6886
assert t.tm_hour == 9
6987
assert t.tm_min == 0
7088
assert t.tm_sec == 0
71-
89+
90+
7291
def test_str_to_time():
7392
t = calendar.timegm(str_to_time("2000-01-12T00:00:00Z"))
7493
#TODO: Find all instances of time.mktime(.....)
@@ -78,22 +97,25 @@ def test_str_to_time():
7897
# do this as an external method in the
7998
assert t == 947635200
8099

100+
81101
def test_instant():
82102
inst = str_to_time(instant())
83103
now = time.gmtime()
84104

85105
assert now >= inst
86-
106+
107+
87108
def test_valid():
88109
assert valid("2000-01-12T00:00:00Z") == False
89110
current_year = datetime.datetime.today().year
90111
assert valid("%d-01-12T00:00:00Z" % (current_year + 1)) == True
91112
this_instance = instant()
92113
time.sleep(1)
93-
assert valid(this_instance) == False # unless on a very fast machine :-)
114+
assert valid(this_instance) == False # unless on a very fast machine :-)
94115
soon = in_a_while(seconds=10)
95116
assert valid(soon) == True
96-
117+
118+
97119
def test_timeout():
98120
soon = in_a_while(seconds=1)
99121
time.sleep(2)
@@ -122,3 +144,6 @@ def test_not_on_or_after():
122144
current_year = datetime.datetime.today().year
123145
assert not_on_or_after("%d-01-01T00:00:00Z" % (current_year + 1)) == True
124146
assert not_on_or_after("%d-01-01T00:00:00Z" % (current_year - 1)) == False
147+
148+
if __name__ == "__main__":
149+
test_parse_duration2()

0 commit comments

Comments
 (0)