Skip to content

Commit

Permalink
Update standalone tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jwindgassen committed Dec 7, 2024
1 parent 7ed8974 commit 1ff6051
Showing 1 changed file with 50 additions and 51 deletions.
101 changes: 50 additions & 51 deletions tests/test_standalone.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import logging
import sys
from pathlib import Path

import pytest
from tornado import testing

from jupyter_server_proxy.standalone import _default_address_and_port, make_proxy_app
from jupyter_server_proxy.standalone import StandaloneProxyServer

"""
Test if address and port are identified correctly
Expand All @@ -13,68 +14,70 @@

def test_address_and_port_with_http_address(monkeypatch):
monkeypatch.setenv("JUPYTERHUB_SERVICE_URL", "http://localhost/")
address, port = _default_address_and_port()
proxy_server = StandaloneProxyServer()

assert address == "localhost"
assert port == 80
assert proxy_server.address == "localhost"
assert proxy_server.port == 80


def test_address_and_port_with_https_address(monkeypatch):
monkeypatch.setenv("JUPYTERHUB_SERVICE_URL", "https://localhost/")
address, port = _default_address_and_port()
proxy_server = StandaloneProxyServer()

assert address == "localhost"
assert port == 443
assert proxy_server.address == "localhost"
assert proxy_server.port == 443


def test_address_and_port_with_address_and_port(monkeypatch):
monkeypatch.setenv("JUPYTERHUB_SERVICE_URL", "http://localhost:7777/")
address, port = _default_address_and_port()

assert address == "localhost"
assert port == 7777


def make_app(unix_socket: bool, skip_authentication: bool):
command = [
sys.executable,
str(Path(__file__).parent / "resources" / "httpinfo.py"),
"--port={port}",
"--unix-socket={unix_socket}",
]

return make_proxy_app(
command=command,
prefix="/some/prefix",
port=0,
unix_socket=unix_socket,
environment={},
mappath={},
timeout=60,
skip_authentication=skip_authentication,
debug=True,
websocket_max_message_size=0,
)


class TestStandaloneProxyRedirect(testing.AsyncHTTPTestCase):
proxy_server = StandaloneProxyServer()

assert proxy_server.address == "localhost"
assert proxy_server.port == 7777


class _TestStandaloneBase(testing.AsyncHTTPTestCase):
runTest = None # Required for Tornado 6.1

unix_socket: bool
skip_authentication: bool

def get_app(self):
command = [
sys.executable,
str(Path(__file__).parent / "resources" / "httpinfo.py"),
"--port={port}",
"--unix-socket={unix_socket}",
]

proxy_server = StandaloneProxyServer(
command=command,
base_url="/some/prefix",
unix_socket=self.unix_socket,
timeout=60,
skip_authentication=self.skip_authentication,
log_level=logging.DEBUG,
)

return proxy_server.create_app()


class TestStandaloneProxyRedirect(_TestStandaloneBase):
"""
Ensure requests are proxied to the application. We need to disable authentication here,
as we do not want to be redirected to the JupyterHub Login.
"""

runTest = None # Required for Tornado 6.1

def get_app(self):
return make_app(False, True)
unix_socket = False
skip_authentication = True

def test_add_slash(self):
response = self.fetch("/some/prefix", follow_redirects=False)

assert response.code == 301
assert response.headers.get("Location") == "/some/prefix/"

def test_without_prefix(self):
def test_wrong_prefix(self):
response = self.fetch("/some/other/prefix")

assert response.code == 404
Expand All @@ -92,11 +95,9 @@ def test_on_prefix(self):
@pytest.mark.skipif(
sys.platform == "win32", reason="Unix socket not supported on Windows"
)
class TestStandaloneProxyWithUnixSocket(testing.AsyncHTTPTestCase):
runTest = None # Required for Tornado 6.1

def get_app(self):
return make_app(True, True)
class TestStandaloneProxyWithUnixSocket(_TestStandaloneBase):
unix_socket = True
skip_authentication = True

def test_with_unix_socket(self):
response = self.fetch("/some/prefix/")
Expand All @@ -108,15 +109,13 @@ def test_with_unix_socket(self):
assert "X-Proxycontextpath: /some/prefix/" in body


class TestStandaloneProxyLogin(testing.AsyncHTTPTestCase):
class TestStandaloneProxyLogin(_TestStandaloneBase):
"""
Ensure we redirect to JupyterHub login when authentication is enabled
"""

runTest = None # Required for Tornado 6.1

def get_app(self):
return make_app(False, False)
unix_socket = False
skip_authentication = False

def test_redirect_to_login_url(self):
response = self.fetch("/some/prefix/", follow_redirects=False)
Expand Down

0 comments on commit 1ff6051

Please sign in to comment.