def test_session_auth_token(): s = SessionFactory() # Calling environment should generate an auth token for the creator assert s.auth_token is None _ = s.environment assert s.auth_token.user == s.creator assert s.auth_token.expiry == s.expires_at + timedelta( minutes=WORKSTATIONS_GRACE_MINUTES) # old tokens should be deleted old_pk = s.auth_token.pk _ = s.environment assert s.auth_token.pk != old_pk # expiry should stay in sync s.maximum_duration = timedelta(days=1) s.save() assert s.auth_token.expiry == s.expires_at + timedelta( minutes=WORKSTATIONS_GRACE_MINUTES)
def test_session_start(http_image, docker_client, settings): path, sha256 = http_image wsi = WorkstationImageFactory(image__from_path=path, image_sha256=sha256, ready=True) # Execute the celery in place settings.task_eager_propagates = (True, ) settings.task_always_eager = (True, ) with capture_on_commit_callbacks(execute=True): s = SessionFactory(workstation_image=wsi) try: assert s.service.container s.refresh_from_db() assert s.status == s.STARTED container = s.service.container assert container.labels["traefik.enable"] == "true" assert container.labels[ f"traefik.http.services.{s.hostname}-http.loadbalancer.server.port"] == str( s.workstation_image.http_port) assert container.labels[ f"traefik.http.services.{s.hostname}-websocket.loadbalancer.server.port"] == str( s.workstation_image.websocket_port) networks = container.attrs.get("NetworkSettings")["Networks"] assert len(networks) == 1 assert settings.WORKSTATIONS_NETWORK_NAME in networks with capture_on_commit_callbacks(execute=True): s.user_finished = True s.save() with pytest.raises(NotFound): # noinspection PyStatementEffect s.service.container finally: stop_all_sessions()
def test_session_start(http_image, docker_client, settings): path, sha256 = http_image wsi = WorkstationImageFactory( image__from_path=path, image_sha256=sha256, ready=True ) # Execute the celery in place settings.task_eager_propagates = (True,) settings.task_always_eager = (True,) s = SessionFactory(workstation_image=wsi) try: assert s.service.container s.refresh_from_db() assert s.status == s.STARTED container = s.service.container assert container.labels["traefik.enable"] == "true" assert container.labels["traefik.http.port"] == str( s.workstation_image.http_port ) assert container.labels["traefik.websocket.port"] == str( s.workstation_image.websocket_port ) networks = container.attrs.get("NetworkSettings")["Networks"] assert len(networks) == 1 assert settings.WORKSTATIONS_NETWORK_NAME in networks s.user_finished = True s.save() with pytest.raises(NotFound): # noinspection PyStatementEffect s.service.container finally: s.stop()
def test_session_keep_alive_limit(client, settings): user = UserFactory() s = SessionFactory(creator=user) assert s.maximum_duration == timedelta(minutes=10) s.created = now() - timedelta(days=1) s.save() response = get_view_for_user( client=client, method=client.patch, viewname="api:session-keep-alive", reverse_kwargs={"pk": s.pk}, user=user, content_type="application/json", ) assert response.status_code == 400 s.refresh_from_db() assert s.maximum_duration == timedelta( seconds=settings.WORKSTATIONS_SESSION_DURATION_LIMIT)