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_submit_request_error_status(self): """ Tests that an error job is written to the db """ utc_now_exp = UTC_NOW_EXP_4 requests_db.get_utc_now_iso = Mock(return_value=utc_now_exp) requests_db.request_id_generator = Mock(side_effect=[REQUEST_ID4]) data = {} data["request_id"] = REQUEST_ID4 data["err_msg"] = "Error message goes here" data["request_group_id"] = REQUEST_GROUP_ID_EXP_2 data["granule_id"] = "granule_4" data["object_key"] = "objectkey_4" data["job_type"] = "restore" data["job_status"] = "error" data["request_time"] = utc_now_exp qresult, exp_result = create_insert_request( REQUEST_ID4, data["request_group_id"], data["granule_id"], data["object_key"], data["job_type"], None, None, data["job_status"], data["request_time"], None, data["err_msg"]) database.single_query = Mock(side_effect=[qresult, exp_result, None, None]) mock_ssm_get_parameter(4) try: requests_db.submit_request(data) database.single_query.assert_called_once() except requests_db.DatabaseError as err: self.fail(f"submit_request. {str(err)}") try: result = requests_db.get_job_by_request_id(REQUEST_ID4) expected = result_to_json(exp_result) self.assertEqual(expected, result) except requests_db.DatabaseError as err: self.fail(f"get_job_by_request_id. {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_all_requests(self): """ Tests reading all requests """ qresult = self.create_test_requests() boto3.client = Mock() mock_ssm_get_parameter(1) expected = result_to_json(qresult) result = requests_db.get_all_requests() self.assertEqual(expected, result)
def test_get_jobs_by_object_key(self): """ Tests reading by object_key """ mock_ssm_get_parameter(1) exp_request_ids = [REQUEST_ID1, REQUEST_ID2, REQUEST_ID3] _, exp_result_1 = create_select_requests(exp_request_ids) object_key = " " expected = result_to_json(exp_result_1) database.single_query = Mock(side_effect=[exp_result_1]) result = requests_db.get_jobs_by_object_key(object_key) self.assertEqual(expected, result) database.single_query.assert_called_once()
def test_get_jobs_by_status_max_days(self): """ Tests reading by status for limited days """ exp_request_ids = [REQUEST_ID1, REQUEST_ID2, REQUEST_ID3] _, exp_result = create_select_requests(exp_request_ids) status = "noexist" mock_ssm_get_parameter(2) database.single_query = Mock(side_effect=[[], exp_result]) result = requests_db.get_jobs_by_status(status) self.assertEqual([], result) database.single_query.assert_called_once() status = "complete" expected = result_to_json(exp_result) result = requests_db.get_jobs_by_status(status, 5) self.assertEqual(expected, result) database.single_query.assert_called()
def test_task_query_object_key(self): """ Test query by object_key. """ handler_input_event = {} object_key = "objectkey_2" handler_input_event["object_key"] = object_key handler_input_event["function"] = "query" exp_request_ids = [REQUEST_ID4, REQUEST_ID7] _, exp_result = create_select_requests(exp_request_ids) expected = result_to_json(exp_result) database.single_query = Mock(side_effect=[exp_result]) self.mock_ssm_get_parameter(1) try: result = request_status.task(handler_input_event, None) self.assertEqual(expected, result) except requests_db.NotFound as err: self.assertEqual(f"Unknown object_key: {object_key}", str(err))
def test_task_query_request_id(self): """ Test query by request_id. """ handler_input_event = {} request_id = 1 handler_input_event["request_id"] = request_id handler_input_event["function"] = "query" exp_request_ids = [REQUEST_ID1] _, exp_result = create_select_requests(exp_request_ids) expected = result_to_json(exp_result) database.single_query = Mock(side_effect=[exp_result]) self.mock_ssm_get_parameter(1) try: result = request_status.task(handler_input_event, None) self.assertEqual(expected, result) except requests_db.NotFound as err: self.assertEqual(f"Unknown request_id: {request_id}", str(err))
def test_task_query_all(self): """ Test query all. """ 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) handler_input_event = {} handler_input_event["function"] = "query" expected = result_to_json(exp_result) database.single_query = Mock(side_effect=[qresult]) self.mock_secretsmanager_get_parameter(1) try: result = request_status.task(handler_input_event, None) self.assertEqual(expected, result) database.single_query.assert_called() except requests_db.NotFound as err: self.fail(str(err))
def test_get_jobs_by_status(self): """ Tests reading by status """ exp_request_ids = [REQUEST_ID1, REQUEST_ID2, REQUEST_ID3] _, exp_result_2 = create_select_requests(exp_request_ids) status = "noexist" exp_result_1 = [] mock_secretsmanager_get_parameter(2) database.single_query = Mock(side_effect=[exp_result_1, exp_result_2]) result = requests_db.get_jobs_by_status(status) self.assertEqual(exp_result_1, result) database.single_query.assert_called_once() status = "complete" expected = result_to_json(exp_result_2) result = requests_db.get_jobs_by_status(status) self.assertEqual(expected, result) database.single_query.assert_called()
def test_handler_add(self): """ Test successful with four keys returned. """ handler_input_event = {} utc_now_exp = UTC_NOW_EXP_1 requests_db.get_utc_now_iso = Mock(return_value=utc_now_exp) requests_db.request_id_generator = Mock(return_value=REQUEST_ID1) granule_id = 'granule_1' status = "error" req_err = "error submitting restore request" handler_input_event["function"] = "add" handler_input_event["error"] = req_err qresult, ins_result = create_insert_request( REQUEST_ID1, REQUEST_GROUP_ID_EXP_1, granule_id, "object_key", "restore", "my_s3_bucket", status, utc_now_exp, None, req_err) database.single_query = Mock(side_effect=[qresult, ins_result]) self.mock_ssm_get_parameter(2) try: result = request_status.handler(handler_input_event, None) self.fail("expected BadRequestError") except request_status.BadRequestError as err: self.assertEqual("Missing 'granule_id' in input data", str(err)) handler_input_event["granule_id"] = granule_id try: result = request_status.handler(handler_input_event, None) self.fail("expected BadRequestError") except request_status.BadRequestError as err: self.assertEqual("Missing 'request_group_id' in input data", str(err)) handler_input_event["request_group_id"] = REQUEST_GROUP_ID_EXP_1 try: result = request_status.handler(handler_input_event, None) expected = result_to_json(ins_result) self.assertEqual(expected, result) database.single_query.assert_called() except request_status.BadRequestError as err: self.fail(err) except requests_db.DbError as err: self.fail(err)
def test_submit_request_inprogress_status(self): """ Tests that an inprogress job is written to the db """ utc_now_exp = UTC_NOW_EXP_1 requests_db.get_utc_now_iso = Mock(return_value=utc_now_exp) requests_db.request_id_generator = Mock(side_effect=[REQUEST_ID1]) data = {} data["request_id"] = REQUEST_ID1 data["request_group_id"] = REQUEST_GROUP_ID_EXP_1 data["granule_id"] = "granule_1" data["object_key"] = "thisisanobjectkey" data["job_type"] = "restore" data["restore_bucket_dest"] = "my_s3_bucket" data["archive_bucket_dest"] = "your_s3_bucket" data["job_status"] = "inprogress" data["request_time"] = utc_now_exp qresult, exp_result = create_insert_request( REQUEST_ID1, data["request_group_id"], data["granule_id"], data["object_key"], data["job_type"], data["restore_bucket_dest"], data["job_status"], data["archive_bucket_dest"], data["request_time"], None, None) database.single_query = Mock(side_effect=[qresult, exp_result, None, None]) mock_ssm_get_parameter(4) try: requests_db.submit_request(data) database.single_query.assert_called_once() except requests_db.DatabaseError as err: self.fail(f"submit_request. {str(err)}") try: result = requests_db.get_job_by_request_id(REQUEST_ID1) expected = result_to_json(exp_result) self.assertEqual(expected, result) except requests_db.DatabaseError as err: self.fail(f"get_job_by_request_id. {str(err)}")