def test_float_input(client, tables): login(client) job = make_job(parameters={'resolution': 30.0}) response = submit_batch(client, batch=[job]) assert response.status_code == status.HTTP_200_OK assert isinstance(response.json['jobs'][0]['job_parameters']['resolution'], float) job = make_job(parameters={'resolution': 30}) response = submit_batch(client, batch=[job]) assert response.status_code == status.HTTP_200_OK assert isinstance(response.json['jobs'][0]['job_parameters']['resolution'], int)
def test_submit_multiple_job_types(client, tables): login(client) rtc_gamma_job = make_job() insar_gamma_job = make_job([ 'S1A_IW_SLC__1SDV_20200720T172109_20200720T172128_033541_03E2FB_341F', 'S1A_IW_SLC__1SDV_20200813T172110_20200813T172129_033891_03EE3F_2C3E' ], job_type='INSAR_GAMMA') autorift_job = make_job([ 'S1A_IW_SLC__1SDV_20200720T172109_20200720T172128_033541_03E2FB_341F', 'S1A_IW_SLC__1SDV_20200813T172110_20200813T172129_033891_03EE3F_2C3E' ], job_type='AUTORIFT') response = submit_batch( client, batch=[rtc_gamma_job, insar_gamma_job, autorift_job]) assert response.status_code == status.HTTP_200_OK
def test_submit_bad_granule_names(client): login(client) bad_granule_names = [ 'foo', 'S1B_IW_SLC__1SDV_20200604T082207_20200604T082234_021881_029874_5E3', 'S1B_IW_SLC__1SDV_20200604T082207_20200604T082234_021881_029874_5E38_', # bad mission 'S1C_IW_SLC__1SDV_20200604T082207_20200604T082234_021881_029874_5E38', # bad beam modes 'S1B_S3_SLC__1SDV_20200604T091417_20200604T091430_021882_029879_5765', 'S1B_WV_SLC__1SSV_20200519T140110_20200519T140719_021651_0291AA_2A86', 'S1B_EW_SLC__1SDH_20200605T065551_20200605T065654_021895_0298DC_EFB5', 'S1A_EW_GRDH_1SDH_20171121T103939_20171121T104044_019362_020D26_CF9A', 'S1B_S1_GRDH_1SDH_20171024T121032_20171024T121101_007971_00E153_F8F2', # bad product types 'S1B_IW_OCN__2SDV_20200518T220815_20200518T220851_021642_02915F_B404', 'S1B_IW_RAW__0SDV_20200605T145138_20200605T145210_021900_029903_AFF4', 'S1A_IW_GRDM_1SDH_20190624T101121_20190624T101221_027820_0323FF_79E4', ] for granule in bad_granule_names: batch = [ make_job(granule), ] setup_requests_mock(batch) response = submit_batch(client, batch) assert response.status_code == status.HTTP_400_BAD_REQUEST
def test_submit_job_without_name(client, tables): login(client) batch = [make_job(name=None)] setup_requests_mock(batch) response = submit_batch(client, batch) assert response.status_code == status.HTTP_200_OK
def test_submit_many_jobs(client, tables): max_jobs = 25 login(client) batch = [make_job() for ii in range(max_jobs)] setup_requests_mock(batch) response = submit_batch(client, batch) assert response.status_code == status.HTTP_200_OK jobs = response.json['jobs'] distinct_request_times = {job['request_time'] for job in jobs} assert len(jobs) == max_jobs assert len(distinct_request_times) == 1 batch.append(make_job()) response = submit_batch(client, batch) assert response.status_code == status.HTTP_400_BAD_REQUEST
def test_submit_autorift(client, tables): login(client) job = make_job([ 'S1A_IW_SLC__1SDV_20200720T172109_20200720T172128_033541_03E2FB_341F', 'S1A_IW_SLC__1SDV_20200813T172110_20200813T172129_033891_03EE3F_2C3E' ], job_type='AUTORIFT') response = submit_batch(client, batch=[job]) assert response.status_code == status.HTTP_200_OK
def test_submit_job_granule_does_not_exist(client, tables): batch = [ make_job([ 'S1B_IW_SLC__1SDV_20200604T082207_20200604T082234_021881_029874_5E38' ]), make_job([ 'S1A_IW_SLC__1SDV_20200610T173646_20200610T173704_032958_03D14C_5F2B' ]) ] setup_requests_mock(batch) batch.append( make_job([ 'S1A_IW_SLC__1SDV_20200610T173646_20200610T173704_032958_03D14C_5F2A' ])) login(client) response = submit_batch(client, batch) assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.json['title'] == 'Bad Request' assert response.json['detail'] == 'Some requested scenes could not be found: ' \ 'S1A_IW_SLC__1SDV_20200610T173646_20200610T173704_032958_03D14C_5F2A'
def test_submit_good_granule_names(client, tables): login(client) good_granule_names = [ 'S1B_IW_SLC__1SDV_20200604T082207_20200604T082234_021881_029874_5E38', 'S1A_IW_SLC__1SSH_20150608T205059_20150608T205126_006287_0083E8_C4F0', 'S1A_IW_GRDH_1SDV_20200604T190627_20200604T190652_032871_03CEB7_56F3', 'S1A_IW_GRDH_1SSH_20171122T184459_20171122T184524_019381_020DD8_B825', ] for granule in good_granule_names: batch = [ make_job([granule]), ] setup_requests_mock(batch) response = submit_batch(client, batch) assert response.status_code == status.HTTP_200_OK
def test_submit_exceeds_quota(client, tables, monkeypatch): login(client) time_for_previous_month = format_time( datetime.now(timezone.utc) - timedelta(days=32)) job_from_previous_month = make_db_record( '0ddaeb98-7636-494d-9496-03ea4a7df266', request_time=time_for_previous_month) tables['jobs_table'].put_item(Item=job_from_previous_month) monkeypatch.setenv('MONTHLY_JOB_QUOTA_PER_USER', '25') batch = [make_job() for ii in range(25)] setup_requests_mock(batch) response = submit_batch(client, batch) assert response.status_code == status.HTTP_200_OK response = submit_batch(client) assert response.status_code == status.HTTP_400_BAD_REQUEST assert '25 jobs' in response.json['detail'] assert '0 jobs' in response.json['detail']
def test_submit_job_with_long_name(client): login(client) batch = [make_job(name='X' * 21)] setup_requests_mock(batch) response = submit_batch(client, batch) assert response.status_code == status.HTTP_400_BAD_REQUEST