mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-15 05:53:00 +00:00
add API endpoint for services
This commit is contained in:
@@ -6,6 +6,7 @@ from queue import Queue
|
||||
import sys
|
||||
from urllib.parse import urlparse, quote
|
||||
|
||||
from pytest import mark
|
||||
import requests
|
||||
|
||||
from tornado import gen
|
||||
@@ -155,6 +156,7 @@ def test_referer_check(app, io_loop):
|
||||
|
||||
# user API tests
|
||||
|
||||
@mark.user
|
||||
def test_get_users(app):
|
||||
db = app.db
|
||||
r = api_request(app, 'users')
|
||||
@@ -185,6 +187,8 @@ def test_get_users(app):
|
||||
)
|
||||
assert r.status_code == 403
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_user(app):
|
||||
db = app.db
|
||||
name = 'newuser'
|
||||
@@ -196,6 +200,7 @@ def test_add_user(app):
|
||||
assert not user.admin
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_get_user(app):
|
||||
name = 'user'
|
||||
r = api_request(app, 'users', name)
|
||||
@@ -211,6 +216,7 @@ def test_get_user(app):
|
||||
}
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_multi_user_bad(app):
|
||||
r = api_request(app, 'users', method='post')
|
||||
assert r.status_code == 400
|
||||
@@ -220,6 +226,7 @@ def test_add_multi_user_bad(app):
|
||||
assert r.status_code == 400
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_multi_user_invalid(app):
|
||||
app.authenticator.username_pattern = r'w.*'
|
||||
r = api_request(app, 'users', method='post',
|
||||
@@ -230,6 +237,7 @@ def test_add_multi_user_invalid(app):
|
||||
assert r.json()['message'] == 'Invalid usernames: andrew, tara'
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_multi_user(app):
|
||||
db = app.db
|
||||
names = ['a', 'b']
|
||||
@@ -265,6 +273,7 @@ def test_add_multi_user(app):
|
||||
assert r_names == ['ab']
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_multi_user_admin(app):
|
||||
db = app.db
|
||||
names = ['c', 'd']
|
||||
@@ -283,6 +292,7 @@ def test_add_multi_user_admin(app):
|
||||
assert user.admin
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_user_bad(app):
|
||||
db = app.db
|
||||
name = 'dne_newuser'
|
||||
@@ -291,6 +301,8 @@ def test_add_user_bad(app):
|
||||
user = find_user(db, name)
|
||||
assert user is None
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_add_admin(app):
|
||||
db = app.db
|
||||
name = 'newadmin'
|
||||
@@ -304,6 +316,7 @@ def test_add_admin(app):
|
||||
assert user.admin
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_delete_user(app):
|
||||
db = app.db
|
||||
mal = add_user(db, name='mal')
|
||||
@@ -311,6 +324,7 @@ def test_delete_user(app):
|
||||
assert r.status_code == 204
|
||||
|
||||
|
||||
@mark.user
|
||||
def test_make_admin(app):
|
||||
db = app.db
|
||||
name = 'admin2'
|
||||
@@ -542,6 +556,7 @@ def test_bad_get_token(app):
|
||||
|
||||
# group API tests
|
||||
|
||||
@mark.group
|
||||
def test_groups_list(app):
|
||||
r = api_request(app, 'groups')
|
||||
r.raise_for_status()
|
||||
@@ -562,6 +577,7 @@ def test_groups_list(app):
|
||||
}]
|
||||
|
||||
|
||||
@mark.group
|
||||
def test_group_get(app):
|
||||
group = orm.Group.find(app.db, name='alphaflight')
|
||||
user = add_user(app.db, app=app, name='sasquatch')
|
||||
@@ -580,6 +596,7 @@ def test_group_get(app):
|
||||
}
|
||||
|
||||
|
||||
@mark.group
|
||||
def test_group_create_delete(app):
|
||||
db = app.db
|
||||
r = api_request(app, 'groups/runaways', method='delete')
|
||||
@@ -613,9 +630,9 @@ def test_group_create_delete(app):
|
||||
# delete nonexistant gives 404
|
||||
r = api_request(app, 'groups/omegaflight', method='delete')
|
||||
assert r.status_code == 404
|
||||
|
||||
|
||||
|
||||
@mark.group
|
||||
def test_group_add_users(app):
|
||||
db = app.db
|
||||
# must specify users
|
||||
@@ -637,6 +654,7 @@ def test_group_add_users(app):
|
||||
assert sorted([ u.name for u in group.users ]) == sorted(names)
|
||||
|
||||
|
||||
@mark.group
|
||||
def test_group_delete_users(app):
|
||||
db = app.db
|
||||
# must specify users
|
||||
@@ -659,6 +677,61 @@ def test_group_delete_users(app):
|
||||
assert sorted([ u.name for u in group.users ]) == sorted(names[2:])
|
||||
|
||||
|
||||
# service API
|
||||
@mark.services
|
||||
def test_get_services(app, mockservice):
|
||||
db = app.db
|
||||
r = api_request(app, 'services')
|
||||
r.raise_for_status()
|
||||
assert r.status_code == 200
|
||||
|
||||
services = r.json()
|
||||
assert services == {
|
||||
'mock-service': {
|
||||
'name': 'mock-service',
|
||||
'admin': True,
|
||||
'command': mockservice.command,
|
||||
'pid': mockservice.proc.pid,
|
||||
'prefix': mockservice.server.base_url,
|
||||
'url': mockservice.url,
|
||||
}
|
||||
}
|
||||
|
||||
r = api_request(app, 'services',
|
||||
headers=auth_header(db, 'user'),
|
||||
)
|
||||
assert r.status_code == 403
|
||||
|
||||
|
||||
@mark.services
|
||||
def test_get_service(app, mockservice):
|
||||
db = app.db
|
||||
r = api_request(app, 'services/%s' % mockservice.name)
|
||||
r.raise_for_status()
|
||||
assert r.status_code == 200
|
||||
|
||||
service = r.json()
|
||||
assert service == {
|
||||
'name': 'mock-service',
|
||||
'admin': True,
|
||||
'command': mockservice.command,
|
||||
'pid': mockservice.proc.pid,
|
||||
'prefix': mockservice.server.base_url,
|
||||
'url': mockservice.url,
|
||||
}
|
||||
|
||||
r = api_request(app, 'services/%s' % mockservice.name,
|
||||
headers={
|
||||
'Authorization': 'token %s' % mockservice.api_token
|
||||
}
|
||||
)
|
||||
r.raise_for_status()
|
||||
r = api_request(app, 'services/%s' % mockservice.name,
|
||||
headers=auth_header(db, 'user'),
|
||||
)
|
||||
assert r.status_code == 403
|
||||
|
||||
|
||||
def test_root_api(app):
|
||||
base_url = app.hub.server.url
|
||||
url = ujoin(base_url, 'api')
|
||||
|
Reference in New Issue
Block a user