async def nginx_job_async( nmrc_path: Path, loop: asyncio.AbstractEventLoop ) -> AsyncIterator[Tuple[str, str]]: async with api_get(path=nmrc_path) as client: secret = uuid4() command = ( f"bash -c \"echo -n '{secret}' > /usr/share/nginx/html/secret.txt; " f"timeout 15m /usr/sbin/nginx -g 'daemon off;'\"" ) container = Container( image=RemoteImage.new_external_image(name="nginx", tag="latest"), command=command, resources=Resources(20, 0.1, None, None, True, None, None), ) job = await client.jobs.run( container, is_preemptible=False, description="test NGINX job" ) try: for i in range(60): status = await client.jobs.status(job.id) if status.status == JobStatus.RUNNING: break await asyncio.sleep(1) else: raise AssertionError("Cannot start NGINX job") yield job.id, str(secret) finally: with suppress(Exception): await client.jobs.kill(job.id)
def test_quiet_save(self, capfd: Any) -> None: formatter = DockerImageProgress.create(tty=True, quiet=True) formatter.save( ImageProgressSave("job-id", RemoteImage.new_external_image(name="output"))) formatter.close() out, err = capfd.readouterr() assert err == "" assert out == ""
def test_quiet_commit_started(self, capfd: Any) -> None: formatter = DockerImageProgress.create(tty=True, quiet=True) formatter.commit_started( ImageCommitStarted( job_id="job-id", target_image=RemoteImage.new_external_image("img"))) formatter.close() out, err = capfd.readouterr() assert err == "" assert out == ""
def test_quiet_push(self, capfd: Any) -> None: formatter = DockerImageProgress.create(tty=True, quiet=True) formatter.push( ImageProgressPush(LocalImage("output"), RemoteImage.new_external_image(name="input"))) formatter.step(ImageProgressStep("message1", "layer1")) formatter.close() out, err = capfd.readouterr() assert err == "" assert out == ""
def test_tty_commit_started(self, capfd: Any, click_tty_emulation: Any) -> None: formatter = DockerImageProgress.create(tty=True, quiet=False) formatter.commit_started( ImageCommitStarted( job_id="job-id", target_image=RemoteImage.new_external_image(name="img"))) formatter.close() out, err = capfd.readouterr() assert err == "" assert "img" in out assert CSI in out
def test_parse_remote__registry_has_port__image_in_other_repo( self) -> None: my_parser = _ImageNameParser( default_user="******", default_cluster="test-cluster", registry_url=URL("http://localhost:5000"), ) image = "example.com:9999/bob/library/ubuntu:v10.04" parsed = my_parser.parse_remote(image) # NOTE: "owner" is parsed only for images in neuromation registry assert parsed == RemoteImage.new_external_image( name="bob/library/ubuntu", tag="v10.04", registry="example.com:9999", )
async def test_parse_remote_public(make_client: _MakeClient) -> None: async with make_client("https://api.localhost.localdomain", registry_url="http://localhost:5000") as client: result = client.parse.remote_image("ubuntu:latest") assert result == RemoteImage.new_external_image(name="ubuntu", tag="latest")
def test_as_str_not_in_neuro_registry_tag_yes(self) -> None: image = RemoteImage.new_external_image(name="ubuntu", tag="v10.04") assert str(image) == "ubuntu:v10.04" assert _as_repo_str(image) == "ubuntu:v10.04"