mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-17 23:13:00 +00:00
Add test for special chars in named servers
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
from urllib.parse import urlencode, urlparse
|
from urllib.parse import unquote, urlencode, urlparse
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from tornado.httputil import url_concat
|
from tornado.httputil import url_concat
|
||||||
@@ -83,25 +83,35 @@ async def test_default_server(app, named_servers):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_create_named_server(app, named_servers):
|
@pytest.mark.parametrize(
|
||||||
|
'servername,escapedname',
|
||||||
|
[
|
||||||
|
('trevor', 'trevor'),
|
||||||
|
('$p~c|a! ch@rs', '%24p~c%7Ca%21%20ch@rs'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_create_named_server(app, named_servers, servername, escapedname):
|
||||||
username = 'walnut'
|
username = 'walnut'
|
||||||
user = add_user(app.db, app, name=username)
|
user = add_user(app.db, app, name=username)
|
||||||
# assert user.allow_named_servers == True
|
# assert user.allow_named_servers == True
|
||||||
cookies = await app.login_user(username)
|
cookies = await app.login_user(username)
|
||||||
servername = 'trevor'
|
|
||||||
r = await api_request(app, 'users', username, 'servers', servername, method='post')
|
r = await api_request(app, 'users', username, 'servers', servername, method='post')
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
assert r.status_code == 201
|
assert r.status_code == 201
|
||||||
assert r.text == ''
|
assert r.text == ''
|
||||||
|
|
||||||
url = url_path_join(public_url(app, user), servername, 'env')
|
url = url_path_join(public_url(app, user), servername, 'env')
|
||||||
|
expected_url = url_path_join(public_url(app, user), escapedname, 'env')
|
||||||
r = await async_requests.get(url, cookies=cookies)
|
r = await async_requests.get(url, cookies=cookies)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
assert r.url == url
|
# requests doesn't fully encode the servername: "$p~c%7Ca!%20ch@rs".
|
||||||
|
# Since this is the internal requests representation and not the JupyterHub
|
||||||
|
# representation it just needs to be equivalent.
|
||||||
|
assert unquote(r.url) == unquote(expected_url)
|
||||||
env = r.json()
|
env = r.json()
|
||||||
prefix = env.get('JUPYTERHUB_SERVICE_PREFIX')
|
prefix = env.get('JUPYTERHUB_SERVICE_PREFIX')
|
||||||
assert prefix == user.spawners[servername].server.base_url
|
assert prefix == user.spawners[servername].server.base_url
|
||||||
assert prefix.endswith(f'/user/{username}/{servername}/')
|
assert prefix.endswith(f'/user/{username}/{escapedname}/')
|
||||||
|
|
||||||
r = await api_request(app, 'users', username)
|
r = await api_request(app, 'users', username)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
@@ -121,7 +131,7 @@ async def test_create_named_server(app, named_servers):
|
|||||||
'pending': None,
|
'pending': None,
|
||||||
'ready': True,
|
'ready': True,
|
||||||
'progress_url': 'PREFIX/hub/api/users/{}/servers/{}/progress'.format(
|
'progress_url': 'PREFIX/hub/api/users/{}/servers/{}/progress'.format(
|
||||||
username, servername
|
username, escapedname
|
||||||
),
|
),
|
||||||
'state': {'pid': 0},
|
'state': {'pid': 0},
|
||||||
'user_options': {},
|
'user_options': {},
|
||||||
|
Reference in New Issue
Block a user