예제 #1
0
    async def test_jobs_get_by_id_job_exist(self, chronos_job_fixture):

        chronos_job_fixture["name"] = f"{self.account.namespace}-my-job"
        async with http_client as client:
            await client.post(
                f"{settings.SCHEDULED_JOBS_SERVICE_ADDRESS}/v1/scheduler/iso8601",
                json=chronos_job_fixture,
            )

        # Para dar tempo do chronos registra e responder no request log abaixo
        await asyncio.sleep(1)
        asgard_job = ChronosScheduledJobConverter.to_asgard_model(
            ChronosJob(**chronos_job_fixture))
        # A busca deve ser feita sempre *sem* o namespace
        asgard_job.remove_namespace(self.account)
        resp = await self.client.get(
            f"/jobs/{asgard_job.id}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        self.assertEqual(HTTPStatus.OK, resp.status)
        resp_data = await resp.json()
        self.assertEqual(
            ScheduledJobResource(job=asgard_job).dict(), resp_data)
예제 #2
0
    async def test_delete_job_job_exist(self, dev_job_fixture):
        await _load_jobs_into_chronos(dev_job_fixture)
        asgard_job = ChronosScheduledJobConverter.to_asgard_model(
            ChronosJob(**dev_job_fixture)).remove_namespace(self.account)

        resp = await self.client.delete(
            f"/jobs/{asgard_job.id}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        self.assertEqual(HTTPStatus.OK, resp.status)
        resp_data = await resp.json()
        self.assertEqual(
            ScheduledJobResource(job=asgard_job).dict(), resp_data)

        resp = await self.client.get(
            f"/jobs/{asgard_job.id}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        self.assertEqual(HTTPStatus.NOT_FOUND, resp.status)
예제 #3
0
async def index_jobs(job_id: str, user: User, account: Account):

    scheduled_job = await ScheduledJobsService.get_job_by_id(
        job_id, user, account, ChronosScheduledJobsBackend())
    status_code = HTTPStatus.OK if scheduled_job else HTTPStatus.NOT_FOUND
    return json_response(ScheduledJobResource(job=scheduled_job).dict(),
                         status=status_code)
예제 #4
0
파일: jobs.py 프로젝트: pabrrs/asgard-api
async def index_jobs(request: web.Request):
    user = await User.from_alchemy_obj(request["user"])
    account = await Account.from_alchemy_obj(request["user"].current_account)
    job_id = request.match_info["job_id"]

    scheduled_job = await ScheduledJobsService.get_job_by_id(
        job_id, user, account, ChronosScheduledJobsBackend())
    status_code = HTTPStatus.OK if scheduled_job else HTTPStatus.NOT_FOUND
    return web.json_response(ScheduledJobResource(job=scheduled_job).dict(),
                             status=status_code)
예제 #5
0
async def index_jobs(request: web.Request, user: User, account: Account):
    job_id = request.match_info["job_id"]

    scheduled_job = await ScheduledJobsService.get_job_by_id(
        job_id, user, account, ChronosScheduledJobsBackend()
    )
    status_code = HTTPStatus.OK if scheduled_job else HTTPStatus.NOT_FOUND
    return web.json_response(
        ScheduledJobResource(job=scheduled_job).dict(), status=status_code
    )
예제 #6
0
 async def test_jobs_get_by_by_id_jobs_does_not_exist(self):
     resp = await self.client.get(
         "/jobs/job-does-not-exist",
         headers={
             "Authorization":
             f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
         },
     )
     self.assertEqual(HTTPStatus.NOT_FOUND, resp.status)
     resp_data = await resp.json()
     self.assertEqual(ScheduledJobResource().dict(), resp_data)
예제 #7
0
    async def test_create_job_add_internal_field_values(self, dev_job_fixture):
        """
        Conferimos que quando um job é criado adicionamos os valores obrigatórios
        de alguns campos
        """
        await _cleanup_chronos()

        account = Account(**ACCOUNT_DEV_DICT)

        asgard_job_no_namespace = ChronosScheduledJobConverter.to_asgard_model(
            ChronosJob(**dev_job_fixture)).remove_namespace(account)

        resp = await self.client.post(
            "/jobs",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
            json=asgard_job_no_namespace.dict(),
        )
        self.assertEqual(HTTPStatus.CREATED, resp.status)
        resp_data = await resp.json()
        self.assertEqual(
            f"{asgard_job_no_namespace.id}",
            CreateScheduledJobResource(**resp_data).job.id,
        )

        await asyncio.sleep(0.5)
        resp_created_job = await self.client.get(
            f"/jobs/{asgard_job_no_namespace.id}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        created_job_resource = ScheduledJobResource(
            **await resp_created_job.json())
        self.assertEqual(HTTPStatus.OK, resp_created_job.status)

        expected_constraints = asgard_job_no_namespace.constraints + [
            f"owner:LIKE:{account.owner}"
        ]
        self.assertEqual(created_job_resource.job.constraints,
                         expected_constraints)

        expected_fetch_uris = asgard_job_no_namespace.fetch + [
            FetchURLSpec(
                uri=settings.SCHEDULED_JOBS_DEFAULT_FETCH_URIS[0].uri),
            FetchURLSpec(
                uri=settings.SCHEDULED_JOBS_DEFAULT_FETCH_URIS[1].uri),
        ]
        self.assertEqual(created_job_resource.job.fetch, expected_fetch_uris)
예제 #8
0
    async def test_jobs_get_by_id_job_exist(self, chronos_job_fixture):

        await _load_jobs_into_chronos(chronos_job_fixture)

        asgard_job = ChronosScheduledJobConverter.to_asgard_model(
            ChronosJob(**chronos_job_fixture))
        # A busca deve ser feita sempre *sem* o namespace
        asgard_job.remove_namespace(self.account)
        resp = await self.client.get(
            f"/jobs/{asgard_job.id}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        self.assertEqual(HTTPStatus.OK, resp.status)
        resp_data = await resp.json()
        self.assertEqual(
            ScheduledJobResource(job=asgard_job).dict(), resp_data)