Skip to content

Commit b008e58

Browse files
committed
Update the tests to provide the JupyterHub _xsrf token as required post JupyterHub 4.0
1 parent 74a0a20 commit b008e58

File tree

2 files changed

+50
-27
lines changed

2 files changed

+50
-27
lines changed

tests/test_ldap_hooks.py

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,15 @@ def test_ldap_person_hook(build_image, network, containers):
132132
auth_headers = {"Remote-User": username}
133133
assert wait_for_site(JHUB_URL, valid_status_code=401) is True
134134
with requests.Session() as session:
135+
# Refresh cookies
136+
session.get(JHUB_URL)
137+
135138
# Login
136-
login_response = session.post(JHUB_URL + "/hub/login", headers=auth_headers)
139+
login_response = session.post(
140+
JHUB_URL + "/hub/login",
141+
headers=auth_headers,
142+
params={'_xsrf': session.cookies['_xsrf']}
143+
)
137144
assert login_response.status_code == 200
138145

139146
resp = session.get(JHUB_URL + "/hub/home")
@@ -142,20 +149,25 @@ def test_ldap_person_hook(build_image, network, containers):
142149
dn_str = "/telephoneNumber=23012303403/SN=My Surname/CN=" + username
143150
# Pass LDAP DN for creation on spawn
144151
post_dn = session.post(
145-
JHUB_URL + "/hub/user-data", json={"data": {"PersonDN": dn_str}}
152+
JHUB_URL + "/hub/user-data",
153+
json={"data": {"PersonDN": dn_str}},
154+
params={'_xsrf': session.cookies['_xsrf']},
146155
)
147156
assert post_dn.status_code == 200
148157

149158
# Spawn notebook
150-
spawn_response = session.post(JHUB_URL + "/hub/spawn")
159+
spawn_response = session.post(
160+
JHUB_URL + "/hub/spawn",
161+
params={'_xsrf': session.cookies['_xsrf']}
162+
)
151163
assert spawn_response.status_code == 200
152164

153165
container_name = "{}-{}".format("jupyter", username)
154166
wait_min = 5
155167
if not wait_for_container(client, container_name, minutes=wait_min):
156168
raise RuntimeError(
157169
"No container with name: {} appeared within: {} minutes".format(
158-
service_name, wait_min
170+
container_name, wait_min
159171
)
160172
)
161173

@@ -191,14 +203,12 @@ def test_ldap_person_hook(build_image, network, containers):
191203

192204
# Shutdown the container
193205
# Delete the spawned service
194-
delete_headers = {"Referer": urljoin(JHUB_URL, "/hub/"), "Origin": JHUB_URL}
195-
196206
jhub_user = get_container_user(spawned_container)
197207
assert jhub_user is not None
198208
assert username == jhub_user
199209
delete_url = urljoin(JHUB_URL, "/hub/api/users/{}/server".format(jhub_user))
200210

201-
deleted = delete(session, delete_url, headers=delete_headers)
211+
deleted = delete(session, delete_url)
202212
assert deleted
203213

204214
# Remove the stopped container
@@ -247,8 +257,14 @@ def test_ldap_person_dynamic_attr_hook(build_image, network, containers):
247257
auth_headers = {"Remote-User": username}
248258
assert wait_for_site(JHUB_URL, valid_status_code=401) is True
249259
with requests.Session() as session:
260+
# Refresh cookies
261+
session.get(JHUB_URL)
250262
# Login
251-
login_response = session.post(JHUB_URL + "/hub/login", headers=auth_headers)
263+
login_response = session.post(
264+
JHUB_URL + "/hub/login",
265+
headers=auth_headers,
266+
params={'_xsrf': session.cookies['_xsrf']},
267+
)
252268
assert login_response.status_code == 200
253269

254270
resp = session.get(JHUB_URL + "/hub/home")
@@ -263,20 +279,25 @@ def test_ldap_person_dynamic_attr_hook(build_image, network, containers):
263279
)
264280
# Pass LDAP DN for creation on spawn
265281
post_dn = session.post(
266-
JHUB_URL + "/hub/user-data", json={"data": {"PersonDN": dn_str}}
282+
JHUB_URL + "/hub/user-data",
283+
json={"data": {"PersonDN": dn_str}},
284+
params={'_xsrf': session.cookies['_xsrf']},
267285
)
268286
assert post_dn.status_code == 200
269287

270288
# Spawn notebook
271-
spawn_response = session.post(JHUB_URL + "/hub/spawn")
289+
spawn_response = session.post(
290+
JHUB_URL + "/hub/spawn"
291+
params={'_xsrf': session.cookies['_xsrf']}
292+
)
272293
assert spawn_response.status_code == 200
273294

274295
container_name = "{}-{}".format("jupyter", username)
275296
wait_min = 5
276297
if not wait_for_container(client, container_name, minutes=wait_min):
277298
raise RuntimeError(
278299
"No container with name: {} appeared within: {} minutes".format(
279-
service_name, wait_min
300+
container_name, wait_min
280301
)
281302
)
282303

@@ -324,14 +345,12 @@ def test_ldap_person_dynamic_attr_hook(build_image, network, containers):
324345
assert "Static description" == container_static_desc
325346

326347
# Shutdown the container
327-
delete_headers = {"Referer": urljoin(JHUB_URL, "/hub/"), "Origin": JHUB_URL}
328-
329348
jhub_user = get_container_user(spawned_container)
330349
assert jhub_user is not None
331350
assert username == jhub_user
332351
delete_url = urljoin(JHUB_URL, "/hub/api/users/{}/server".format(jhub_user))
333352

334-
deleted = delete(session, delete_url, headers=delete_headers)
353+
deleted = delete(session, delete_url)
335354
assert deleted
336355

337356
# Remove the stopped container
@@ -380,8 +399,14 @@ def test_dynamic_object_spawner_attributes(build_image, network, containers):
380399
auth_headers = {"Remote-User": username}
381400
assert wait_for_site(JHUB_URL, valid_status_code=401) is True
382401
with requests.Session() as session:
402+
# Refresh cookies
403+
session.get(JHUB_URL)
383404
# Login
384-
login_response = session.post(JHUB_URL + "/hub/login", headers=auth_headers)
405+
login_response = session.post(
406+
JHUB_URL + "/hub/login",
407+
headers=auth_headers,
408+
params={'_xsrf': session.cookies['_xsrf']}
409+
)
385410
assert login_response.status_code == 200
386411

387412
resp = session.get(JHUB_URL + "/hub/home")
@@ -396,7 +421,9 @@ def test_dynamic_object_spawner_attributes(build_image, network, containers):
396421
)
397422
# Pass LDAP DN for creation on spawn
398423
post_dn = session.post(
399-
JHUB_URL + "/hub/user-data", json={"data": {"PersonDN": dn_str}}
424+
JHUB_URL + "/hub/user-data",
425+
json={"data": {"PersonDN": dn_str}},
426+
params={'_xsrf': session.cookies['_xsrf']},
400427
)
401428
assert post_dn.status_code == 200
402429

@@ -409,22 +436,20 @@ def test_dynamic_object_spawner_attributes(build_image, network, containers):
409436
if not wait_for_container(client, container_name, minutes=wait_min):
410437
raise RuntimeError(
411438
"No container with name: {} appeared within: {} minutes".format(
412-
service_name, wait_min
439+
container_name, wait_min
413440
)
414441
)
415442

416443
spawned_container = get_container(client, container_name)
417444
assert spawned_container is not None
418445

419446
# Shutdown the container
420-
delete_headers = {"Referer": urljoin(JHUB_URL, "/hub/"), "Origin": JHUB_URL}
421-
422447
jhub_user = get_container_user(spawned_container)
423448
assert jhub_user is not None
424449
assert username == jhub_user
425450
delete_url = urljoin(JHUB_URL, "/hub/api/users/{}/server".format(jhub_user))
426451

427-
deleted = delete(session, delete_url, headers=delete_headers)
452+
deleted = delete(session, delete_url)
428453
assert deleted
429454

430455
# Remove the stopped container
@@ -483,13 +508,11 @@ def test_dynamic_object_spawner_attributes(build_image, network, containers):
483508

484509
# Shutdown the container
485510
# Delete the spawned service
486-
delete_headers = {"Referer": urljoin(JHUB_URL, "/hub/"), "Origin": JHUB_URL}
487-
488511
jhub_user = get_container_user(spawned_container)
489512
assert jhub_user is not None
490513
delete_url = urljoin(JHUB_URL, "/hub/api/users/{}/server".format(jhub_user))
491514

492-
deleted = delete(session, delete_url, headers=delete_headers)
515+
deleted = delete(session, delete_url)
493516
assert deleted
494517

495518
# Remove the stopped container

tests/util.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@ def wait_for_site(
5858
return False
5959

6060

61-
def delete(session, url, timeout=60, headers=None, valid_status_code=204):
62-
if not headers:
63-
headers = {}
61+
def delete(session, url, timeout=60, params=None, valid_status_code=204, **kwargs):
62+
if not params:
63+
params = {'_xsrf': session.cookies['_xsrf']}
6464

6565
attempts = 0
6666
while attempts < timeout:
67-
resp = session.delete(url, headers=headers)
67+
resp = session.delete(url, params=params, **kwargs)
6868
if resp.status_code == valid_status_code:
6969
return True
7070
attempts += 1

0 commit comments

Comments
 (0)