1414import pytest
1515from traitlets .config import Config
1616
17+ from .. import orm
1718from .mocking import MockHub
19+ from .utils import add_user
20+ from .utils import api_request
21+ from jupyterhub .utils import eventlogging_schema_fqn
1822
1923
2024# To test new schemas, add them to the `valid_events`
2428# { ( '<schema id>', <version> ) : { <event_data> } }
2529valid_events = [
2630 (
27- 'hub.jupyter.org/ server-action' ,
31+ eventlogging_schema_fqn ( ' server-action') ,
2832 1 ,
2933 dict (action = 'start' , username = 'test-username' , servername = 'test-servername' ),
3034 )
3438# { ( '<schema id>', <version> ) : { <event_data> } }
3539invalid_events = [
3640 # Missing required keys
37- ('hub.jupyter.org/ server-action' , 1 , dict (action = 'start' ))
41+ (eventlogging_schema_fqn ( ' server-action') , 1 , dict (action = 'start' ))
3842]
3943
4044
@@ -50,15 +54,17 @@ def eventlog_sink(app):
5054 with mock .patch .object (app .config , 'EventLog' , cfg .EventLog ):
5155 # recreate the eventlog object with our config
5256 app .init_eventlog ()
57+ app .tornado_settings ['eventlog' ] = app .eventlog
5358 # return the sink from the fixture
54- yield app . eventlog , sink
59+ yield app , sink
5560 # reset eventlog with original config
5661 app .init_eventlog ()
5762
5863
5964@pytest .mark .parametrize ('schema, version, event' , valid_events )
6065def test_valid_events (eventlog_sink , schema , version , event ):
61- eventlog , sink = eventlog_sink
66+ app , sink = eventlog_sink
67+ eventlog = app .eventlog
6268 eventlog .allowed_schemas = [schema ]
6369 # Record event
6470 eventlog .record_event (schema , version , event )
@@ -72,9 +78,46 @@ def test_valid_events(eventlog_sink, schema, version, event):
7278
7379@pytest .mark .parametrize ('schema, version, event' , invalid_events )
7480def test_invalid_events (eventlog_sink , schema , version , event ):
75- eventlog , sink = eventlog_sink
81+ app , sink = eventlog_sink
82+ eventlog = app .eventlog
7683 eventlog .allowed_schemas = [schema ]
7784
7885 # Make sure an error is thrown when bad events are recorded
7986 with pytest .raises (jsonschema .ValidationError ):
8087 recorded_event = eventlog .record_event (schema , version , event )
88+
89+
90+ def remove_event_capsule (data ):
91+ return {
92+ k : v for k , v in data .items () if not (k .startswith ('__' ) and k .endswith ('__' ))
93+ }
94+
95+
96+ async def test_server_event (eventlog_sink ):
97+ schema , version = (eventlogging_schema_fqn ('server-action' ), 1 )
98+
99+ app , sink = eventlog_sink
100+ app .eventlog .allowed_schemas = [schema ]
101+
102+ db = app .db
103+ name = 'user'
104+ user = add_user (db , app = app , name = name )
105+
106+ # test user server starting event
107+ r = await api_request (app , 'users' , name , 'server' , method = 'post' )
108+ output = sink .getvalue ()
109+ assert output
110+ data = remove_event_capsule (json .loads (output ))
111+ jsonschema .validate (data , app .eventlog .schemas [(schema , version )])
112+ expected = {'action' : 'start' , 'username' : name }
113+ assert expected .items () <= data .items ()
114+
115+ # test user server stopping event
116+ r = await api_request (app , 'users' , name , 'server' , method = 'delete' )
117+ offset = len (output )
118+ output = sink .getvalue ()[offset :]
119+ assert output
120+ data = remove_event_capsule (json .loads (output ))
121+ jsonschema .validate (data , app .eventlog .schemas [(schema , version )])
122+ expected = {'action' : 'stop' , 'username' : name }
123+ assert expected .items () <= data .items ()
0 commit comments