Skip to content

Commit b7f618b

Browse files
author
Roland Hedberg
committed
All tests now pass in 2.7 and 3.4 .
1 parent 00cdcad commit b7f618b

10 files changed

+64
-48
lines changed

.travis.yml

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
language: python
22

3+
env:
4+
- TOX_ENV=py27
5+
- TOX_ENV=py34
6+
37
services:
48
- mongodb
59

setup.py

-6
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,6 @@ def run_tests(self):
4545
#'pytest-coverage',
4646
]
4747

48-
49-
# only for Python 2.6
50-
if sys.version_info < (2, 7):
51-
install_requires.append('argparse')
52-
install_requires.append('importlib')
53-
5448
setup(
5549
name='pysaml2',
5650
version='3.0.0',

src/saml2/attribute_converter.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -480,10 +480,10 @@ def to_(self, attrvals):
480480
"""
481481
attributes = []
482482
for key, value in attrvals.items():
483-
key = key.lower()
483+
lkey = key.lower()
484484
try:
485485
attributes.append(factory(saml.Attribute,
486-
name=self._to[key],
486+
name=self._to[lkey],
487487
name_format=self.name_format,
488488
friendly_name=key,
489489
attribute_value=do_ava(value)))

src/saml2/config.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ def load_metadata(self, metadata_conf):
399399
disable_validation = False
400400

401401
mds = MetadataStore(
402-
ONTS.values(), acs, self, ca_certs,
402+
list(ONTS.values()), acs, self, ca_certs,
403403
disable_ssl_certificate_validation=disable_validation)
404404

405405
mds.imp(metadata_conf)

src/saml2/httpbase.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ def set_cookie(self, kaka, request):
199199
name=std_attr["name"])
200200
except ValueError:
201201
pass
202-
elif morsel["expires"] < utc_now():
202+
elif morsel["expires"] and morsel["expires"] < utc_now():
203203
try:
204204
self.cookiejar.clear(domain=std_attr["domain"],
205205
path=std_attr["path"],

tests/test_19_attribute_converter.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def test_to_attrstat_1(self):
8080
assert a1.friendly_name == "givenName"
8181
assert a1.name == 'urn:mace:dir:attribute-def:givenName'
8282
assert a1.name_format == BASIC_NF
83-
elif a0.friendly_name == 'givenname':
83+
elif a0.friendly_name == 'givenName':
8484
assert a0.name == 'urn:mace:dir:attribute-def:givenName'
8585
assert a0.name_format == BASIC_NF
8686
assert a1.friendly_name == "sn"
@@ -103,13 +103,14 @@ def test_to_attrstat_2(self):
103103
assert a1.friendly_name == "givenName"
104104
assert a1.name == 'urn:oid:2.5.4.42'
105105
assert a1.name_format == URI_NF
106-
elif a0.friendly_name == 'givenname':
106+
elif a0.friendly_name == 'givenName':
107107
assert a0.name == 'urn:oid:2.5.4.42'
108108
assert a0.name_format == URI_NF
109109
assert a1.friendly_name == "surname"
110110
assert a1.name == 'urn:oid:2.5.4.4'
111111
assert a1.name_format == URI_NF
112112
else:
113+
print(a0.friendly_name)
113114
assert False
114115

115116
def test_to_local_name(self):
@@ -227,5 +228,5 @@ def test_schac():
227228
if __name__ == "__main__":
228229
t = TestAC()
229230
t.setup_class()
230-
t.test_to_local_name_from_basic()
231+
t.test_to_attrstat_1()
231232
#test_schac()

tests/test_37_entity_categories.py

+23-16
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535

3636
MDS = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
3737
disable_ssl_certificate_validation=True)
38-
MDS.imp([{"class": "saml2.mdstore.MetaDataMD", "metadata": [(full_path("swamid.md"), )]}])
38+
MDS.imp([{"class": "saml2.mdstore.MetaDataMD",
39+
"metadata": [(full_path("swamid.md"),)]}])
3940

4041

4142
def _eq(l1, l2):
@@ -46,7 +47,7 @@ def test_filter_ava():
4647
policy = Policy({
4748
"default": {
4849
"lifetime": {"minutes": 15},
49-
#"attribute_restrictions": None # means all I have
50+
# "attribute_restrictions": None # means all I have
5051
"entity_categories": ["swamid"]
5152
}
5253
})
@@ -64,7 +65,7 @@ def test_filter_ava2():
6465
policy = Policy({
6566
"default": {
6667
"lifetime": {"minutes": 15},
67-
#"attribute_restrictions": None # means all I have
68+
# "attribute_restrictions": None # means all I have
6869
"entity_categories": ["refeds", "edugain"]
6970
}
7071
})
@@ -84,14 +85,15 @@ def test_filter_ava3():
8485
policy = Policy({
8586
"default": {
8687
"lifetime": {"minutes": 15},
87-
#"attribute_restrictions": None # means all I have
88+
# "attribute_restrictions": None # means all I have
8889
"entity_categories": ["swamid"]
8990
}
9091
})
9192

92-
mds = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
93+
mds = MetadataStore(list(ONTS.values()), ATTRCONV, sec_config,
9394
disable_ssl_certificate_validation=True)
94-
mds.imp([{"class": "saml2.mdstore.MetaDataFile", "metadata": [(full_path("entity_cat_sfs_hei.xml"), )]}])
95+
mds.imp([{"class": "saml2.mdstore.MetaDataFile",
96+
"metadata": [(full_path("entity_cat_sfs_hei.xml"),)]}])
9597

9698
ava = {"givenName": ["Derek"], "sn": ["Jeter"],
9799
"mail": ["[email protected]"], "c": ["USA"],
@@ -107,14 +109,15 @@ def test_filter_ava4():
107109
policy = Policy({
108110
"default": {
109111
"lifetime": {"minutes": 15},
110-
#"attribute_restrictions": None # means all I have
112+
# "attribute_restrictions": None # means all I have
111113
"entity_categories": ["swamid"]
112114
}
113115
})
114116

115-
mds = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
117+
mds = MetadataStore(list(ONTS.values()), ATTRCONV, sec_config,
116118
disable_ssl_certificate_validation=True)
117-
mds.imp([{"class": "saml2.mdstore.MetaDataFile", "metadata": [(full_path("entity_cat_re_nren.xml"), )]}])
119+
mds.imp([{"class": "saml2.mdstore.MetaDataFile",
120+
"metadata": [(full_path("entity_cat_re_nren.xml"),)]}])
118121

119122
ava = {"givenName": ["Derek"], "sn": ["Jeter"],
120123
"mail": ["[email protected]"], "c": ["USA"],
@@ -123,22 +126,24 @@ def test_filter_ava4():
123126

124127
ava = policy.filter(ava, "urn:mace:example.com:saml:roland:sp", mds)
125128

126-
assert _eq(list(ava.keys()), ['eduPersonTargetedID', "givenName", "c", "mail",
127-
"sn"])
129+
assert _eq(list(ava.keys()),
130+
['eduPersonTargetedID', "givenName", "c", "mail",
131+
"sn"])
128132

129133

130134
def test_filter_ava5():
131135
policy = Policy({
132136
"default": {
133137
"lifetime": {"minutes": 15},
134-
#"attribute_restrictions": None # means all I have
138+
# "attribute_restrictions": None # means all I have
135139
"entity_categories": ["swamid"]
136140
}
137141
})
138142

139-
mds = MetadataStore(ONTS.values(), ATTRCONV, sec_config,
143+
mds = MetadataStore(list(ONTS.values()), ATTRCONV, sec_config,
140144
disable_ssl_certificate_validation=True)
141-
mds.imp([{"class": "saml2.mdstore.MetaDataFile", "metadata": [(full_path("entity_cat_re.xml"), )]}])
145+
mds.imp([{"class": "saml2.mdstore.MetaDataFile",
146+
"metadata": [(full_path("entity_cat_re.xml"),)]}])
142147

143148
ava = {"givenName": ["Derek"], "sn": ["Jeter"],
144149
"mail": ["[email protected]"], "c": ["USA"],
@@ -162,7 +167,9 @@ def test_idp_policy_filter():
162167
idp.metadata)
163168

164169
print(ava)
165-
assert list(ava.keys()) == ["eduPersonTargetedID"] # because no entity category
170+
assert list(ava.keys()) == [
171+
"eduPersonTargetedID"] # because no entity category
172+
166173

167174
if __name__ == "__main__":
168-
test_idp_policy_filter()
175+
test_filter_ava3()

tests/test_50_server.py

+18-18
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ def verify_assertion(self, assertion):
107107
ava = ava = get_ava(assertion[0])
108108

109109
assert ava ==\
110-
{'mail': ['[email protected]'], 'givenname': ['Derek'], 'surname': ['Jeter'], 'title': ['The man']}
110+
{'mail': ['[email protected]'], 'givenName': ['Derek'],
111+
'surName': ['Jeter'], 'title': ['The man']}
111112

112113

113114
def verify_encrypted_assertion(self, assertion, decr_text):
@@ -295,7 +296,6 @@ def test_sso_response_with_identity(self):
295296
assert resp.status
296297
assert resp.status.status_code.value == samlp.STATUS_SUCCESS
297298
assert resp.assertion
298-
assert resp.assertion
299299
assertion = resp.assertion
300300
print(assertion)
301301
assert assertion.authn_statement
@@ -307,7 +307,7 @@ def test_sso_response_with_identity(self):
307307
# Pick out one attribute
308308
attr = None
309309
for attr in attribute_statement[0].attribute:
310-
if attr.friendly_name == "givenname":
310+
if attr.friendly_name == "givenName":
311311
break
312312
assert len(attr.attribute_value) == 1
313313
assert attr.name == "urn:oid:2.5.4.42"
@@ -546,31 +546,31 @@ def test_encrypted_signed_response_1(self):
546546

547547
sresponse = response_from_string(signed_resp)
548548

549-
valid = self.server.sec.verify_signature(signed_resp,
550-
self.server.config.cert_file,
551-
node_name='urn:oasis:names:tc:SAML:2.0:protocol:Response',
552-
node_id=sresponse.id,
553-
id_attr="")
549+
valid = self.server.sec.verify_signature(
550+
signed_resp, self.server.config.cert_file,
551+
node_name='urn:oasis:names:tc:SAML:2.0:protocol:Response',
552+
node_id=sresponse.id, id_attr="")
553+
554554
assert valid
555555

556-
valid = self.server.sec.verify_signature(signed_resp,
557-
self.server.config.cert_file,
558-
node_name='urn:oasis:names:tc:SAML:2.0:assertion:Assertion',
559-
node_id=sresponse.assertion[0].id,
560-
id_attr="")
556+
valid = self.server.sec.verify_signature(
557+
signed_resp, self.server.config.cert_file,
558+
node_name='urn:oasis:names:tc:SAML:2.0:assertion:Assertion',
559+
node_id=sresponse.assertion[0].id, id_attr="")
561560

562561
assert valid
563562

564-
_, key_file = make_temp(str(cert_key_str).encode('ascii'), decode=False)
563+
_, key_file = make_temp(cert_key_str, decode=False)
565564

566565
decr_text = self.server.sec.decrypt(signed_resp, key_file)
567566

568567
resp = samlp.response_from_string(decr_text)
569568

570569
assert resp.assertion[0].advice.encrypted_assertion[0].extension_elements
571570

572-
assertion = extension_elements_to_elements(resp.assertion[0].advice.encrypted_assertion[0].extension_elements,
573-
[saml, samlp])
571+
assertion = extension_elements_to_elements(
572+
resp.assertion[0].advice.encrypted_assertion[0].extension_elements,
573+
[saml, samlp])
574574

575575
self.verify_assertion(assertion)
576576

@@ -653,7 +653,7 @@ def test_encrypted_signed_response_3(self):
653653
id_attr="")
654654
assert valid
655655

656-
_, key_file = make_temp(str(cert_key_str).encode('ascii'), decode=False)
656+
_, key_file = make_temp(cert_key_str, decode=False)
657657

658658
decr_text = self.server.sec.decrypt(signed_resp, key_file)
659659

@@ -1266,4 +1266,4 @@ def test_1(self):
12661266
if __name__ == "__main__":
12671267
ts = TestServer1()
12681268
ts.setup_class()
1269-
ts.test_encrypted_signed_response_4()
1269+
ts.test_encrypted_signed_response_1()

tests/test_69_discovery.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,4 @@ def test_construct_deconstruct_response():
6969

7070

7171
if __name__ == "__main__":
72-
test_construct_deconstruct_request()
72+
test_verify()

tox.ini

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[tox]
2+
envlist = py27,py34
3+
4+
[testenv]
5+
basepython =
6+
py27: python2.7
7+
py34: python3.4
8+
9+
deps =
10+
pytest

0 commit comments

Comments
 (0)