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()
Example #10
0
    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