def test_session_limit(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.WORKSTATIONS_MAXIMUM_SESSIONS = 1 settings.task_eager_propagates = (True, ) settings.task_always_eager = (True, ) try: with capture_on_commit_callbacks(execute=True): s1 = SessionFactory(workstation_image=wsi) s1.refresh_from_db() assert s1.status == s1.STARTED with capture_on_commit_callbacks(execute=True): s2 = SessionFactory(workstation_image=wsi) s2.refresh_from_db() assert s2.status == s2.FAILED s1.stop() with capture_on_commit_callbacks(execute=True): s3 = SessionFactory(workstation_image=wsi) s3.refresh_from_db() assert s3.status == s3.STARTED finally: stop_all_sessions()
def test_session_limit(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,) settings.WORKSTATIONS_MAXIMUM_SESSIONS = 1 try: s1 = SessionFactory(workstation_image=wsi) s1.refresh_from_db() assert s1.status == s1.STARTED s2 = SessionFactory(workstation_image=wsi) s2.refresh_from_db() assert s2.status == s2.FAILED s1.stop() s3 = SessionFactory(workstation_image=wsi) s3.refresh_from_db() assert s3.status == s3.STARTED 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, ) 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: s.stop()
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()