def test_update_request_status_for_job_exceptions(self): """ Tests updating a job to an 'inprogress' status """ utc_now_exp = "2019-07-31 21:07:15.234362+00:00" requests_db.get_utc_now_iso = Mock(return_value=utc_now_exp) request_id = REQUEST_ID3 job_status = "inprogress" exp_err = 'A new status must be provided' try: requests_db.update_request_status_for_job(request_id, None) self.fail("expected BadRequestError") except requests_db.BadRequestError as err: self.assertEqual(exp_err, str(err)) exp_err = 'No request_id provided' try: requests_db.update_request_status_for_job(None, job_status) self.fail("expected BadRequestError") except requests_db.BadRequestError as err: self.assertEqual(exp_err, str(err)) exp_err = 'Database Error. Internal database error, please contact LP DAAC User Services' database.single_query = Mock(side_effect=[DbError(exp_err)]) mock_ssm_get_parameter(1) try: requests_db.update_request_status_for_job(request_id, job_status) self.fail("expected DatabaseError") except requests_db.DatabaseError as err: self.assertEqual(exp_err, str(err)) database.single_query.assert_called_once()
def test_get_jobs_by_request_group_id(self): """ Tests reading a job by request_group_id """ mock_ssm_get_parameter(2) exp_request_ids = [REQUEST_ID5, REQUEST_ID6] _, exp_result = create_select_requests(exp_request_ids) database.single_query = Mock(side_effect=[exp_result]) expected = result_to_json(exp_result) try: result = requests_db.get_jobs_by_request_group_id(None) self.fail("expected BadRequestError") except requests_db.BadRequestError as err: self.assertEqual("A request_group_id must be provided", str(err)) try: result = requests_db.get_jobs_by_request_group_id(REQUEST_GROUP_ID_EXP_3) except requests_db.BadRequestError as err: self.fail(str(err)) self.assertEqual(expected, result) database.single_query.assert_called_once() database.single_query = Mock(side_effect=[DbError("database error")]) try: result = requests_db.get_jobs_by_request_group_id(REQUEST_GROUP_ID_EXP_3) self.fail("expected DatabaseError") except requests_db.DatabaseError as err: self.assertEqual("database error", str(err))
def test_get_jobs_by_status_exceptions(self): """ Tests getting a DatabaseError reading a job by status """ mock_ssm_get_parameter(2) database.single_query = Mock(side_effect=[requests_db.BadRequestError( 'A status must be provided')]) status = None try: requests_db.get_jobs_by_status(status) self.fail("expected BadRequestError") except requests_db.BadRequestError as err: self.assertEqual('A status must be provided', str(err)) status = "error" err_msg = 'Database Error. could not connect to server' database.single_query = Mock(side_effect=[DbError( err_msg)]) os.environ["DATABASE_HOST"] = "unknown.cr.usgs.gov" try: requests_db.get_jobs_by_status(status) self.fail("expected DatabaseError") except requests_db.DatabaseError as err: database.single_query.assert_called_once() self.assertEqual(err_msg, str(err))
def test_get_all_requests(self): """ Tests reading all requests """ exp_request_ids = [REQUEST_ID1, REQUEST_ID2, REQUEST_ID3, REQUEST_ID4, REQUEST_ID5, REQUEST_ID6, REQUEST_ID7, REQUEST_ID8, REQUEST_ID9, REQUEST_ID10, REQUEST_ID11] qresult, exp_result = create_select_requests(exp_request_ids) mock_ssm_get_parameter(1) database.single_query = Mock(side_effect=[qresult]) expected = result_to_json(exp_result) result = requests_db.get_all_requests() database.single_query.assert_called_once() self.assertEqual(expected, result) mock_ssm_get_parameter(1) err_msg = 'Database Error. could not connect to server' database.single_query = Mock(side_effect=[DbError( err_msg)]) try: requests_db.get_all_requests() self.fail("expected DatabaseError") except requests_db.DatabaseError as err: database.single_query.assert_called_once() self.assertEqual(err_msg, str(err))
def test_get_jobs_by_object_key_dberror(self): """ Tests db error reading by object_key """ mock_ssm_get_parameter(1) database.single_query = Mock(side_effect=[DbError("DbError reading requests")]) try: requests_db.get_jobs_by_object_key("file_1.h5") self.fail("expected DbError") except requests_db.DatabaseError as err: self.assertEqual("DbError reading requests", str(err)) database.single_query.assert_called_once()
def test_delete_request_database_error(self): """ Tests database error while deleting a job by request_id """ exp_err = 'Database Error. Internal database error, please contact LP DAAC User Services' try: mock_ssm_get_parameter(1) database.single_query = Mock(side_effect=[DbError(exp_err)]) requests_db.delete_request('x') self.fail("expected DatabaseError") except requests_db.DatabaseError as err: self.assertEqual(exp_err, str(err)) database.single_query.assert_called_once()
def test_delete_all_requests_dberror(self): """ Tests db error deleting all requests from the request_status table """ exp_err = 'Database Error. Internal database error, please contact LP DAAC User Services' try: mock_secretsmanager_get_parameter(1) database.single_query = Mock(side_effect=[DbError(exp_err)]) requests_db.delete_all_requests() self.fail("expected DatabaseError") except requests_db.DatabaseError as err: self.assertEqual(exp_err, str(err)) database.single_query.assert_called_once()
def test_get_jobs_by_granule_id_dberror(self): """ Tests db error reading by granule_id """ mock_secretsmanager_get_parameter(1) database.single_query = Mock( side_effect=[DbError("DbError reading requests")]) try: requests_db.get_jobs_by_granule_id("gran_1") self.fail("expected DbError") except requests_db.DatabaseError as err: self.assertEqual("DbError reading requests", str(err)) database.single_query.assert_called_once()
def test_get_job_by_request_id_dberror(self): """ Tests getting a DatabaseError reading a job by request_id """ mock_ssm_get_parameter(1) exp_msg = 'Database Error. could not connect to server' database.single_query = Mock(side_effect=[DbError(exp_msg)]) os.environ["DATABASE_HOST"] = "unknown.cr.usgs.gov" try: requests_db.get_job_by_request_id('x') self.fail("expected DatabaseError") except requests_db.DatabaseError as err: self.assertEqual(exp_msg, str(err)) database.single_query.assert_called_once()
def test_task_one_granule_1_file_db_error(self): """ Test one file for one granule - db error inserting status """ granule_id = "MOD09GQ.A0219114.N5aUCG.006.0656338553321" input_event = { "input": { "granules": [{ "granuleId": granule_id, "keys": [KEY1] }] }, "config": { "glacier-bucket": "my-dr-fake-glacier-bucket" } } boto3.client = Mock() s3_cli = boto3.client('s3') s3_cli.restore_object = Mock(side_effect=[None]) s3_cli.head_object = Mock() CumulusLogger.info = Mock() CumulusLogger.error = Mock() requests_db.request_id_generator = Mock( side_effect=[REQUEST_GROUP_ID_EXP_1, REQUEST_ID1]) database.single_query = Mock( side_effect=[DbError("mock insert failed error")]) mock_ssm_get_parameter(1) exp_result = { 'granuleId': granule_id, 'files': [{ 'key': FILE1, 'dest_bucket': PROTECTED_BUCKET, 'success': True, 'err_msg': '' }] } try: result = request_files.task(input_event, self.context) self.assertEqual(exp_result, result) except requests_db.DatabaseError as err: self.fail(f"failed insert does not throw exception. {str(err)}") boto3.client.assert_called_with('ssm') s3_cli.head_object.assert_any_call(Bucket='my-dr-fake-glacier-bucket', Key=FILE1) restore_req_exp = { 'Days': 5, 'GlacierJobParameters': { 'Tier': 'Standard' } } s3_cli.restore_object.assert_any_call( Bucket='my-dr-fake-glacier-bucket', Key=FILE1, RestoreRequest=restore_req_exp) exp_gran = {} exp_gran['granuleId'] = granule_id exp_files = [] exp_file = {} exp_file['key'] = FILE1 exp_file['dest_bucket'] = PROTECTED_BUCKET exp_file['success'] = True exp_file['err_msg'] = '' exp_files.append(exp_file) exp_gran['files'] = exp_files self.assertEqual(exp_gran, result) database.single_query.assert_called() #called 1 times