コード例 #1
0
    def test_downloadResults_partialResults(self, s3):
        client, bucket, bucket_name = s3
        target = "infosec.mozilla.org"
        # We only have some (partial) results in the S3 bucket
        client.put_object(ACL='authenticated-read',
                          Bucket=bucket_name,
                          Body=b'ABCD',
                          Key='{}_direnum.json'.format(target))
        client.put_object(ACL='authenticated-read',
                          Bucket=bucket_name,
                          Body=b'ABCD',
                          Key='{}_websearch.json'.format(target))
        client.put_object(ACL='authenticated-read',
                          Bucket=bucket_name,
                          Body=b'ABCD',
                          Key='{}_tcpscan.json'.format(target))

        test_apigw_event = {"body": '{"target": "' + target + '"}'}
        test_context = None
        results_handler = ResultsHandler(
            s3_client=client,
            bucket=bucket_name,
            results_path=TEST_SCAN_RESULTS_BASE_PATH)
        response = results_handler.downloadResults(test_apigw_event,
                                                   test_context)
        assert response['statusCode'] == 202
        assert response['isBase64Encoded'] is True
        assert 'Content-Disposition' in response['headers']
        assert response['headers']['Content-Type'] == "application/gzip"
コード例 #2
0
    def test_downloadResults_unableToDownload(self, s3):
        client, bucket, bucket_name = s3
        target = "infosec.mozilla.org"
        path = "/abc/def"  # A path that does not exist

        # Ensure we have matching objects in the test S3 bucket to rule out other failure scenario
        client.put_object(Bucket=bucket_name,
                          Body=b'ABCD',
                          Key='{}_direnum.json'.format(target))
        client.put_object(Bucket=bucket_name,
                          Body=b'ABCD',
                          Key='{}_websearch.json'.format(target))
        test_apigw_event = {"body": '{"target": "' + target + '"}'}
        test_context = None
        results_handler = ResultsHandler(client,
                                         bucket_name,
                                         results_path=path)
        response = results_handler.downloadResults(test_apigw_event,
                                                   test_context)

        assert type(response) is dict
        assert response['statusCode'] == 500
        assert 'isBase64Encoded' not in response
        assert 'Content-Disposition' not in response['headers']
        assert response['headers']['Content-Type'] == "application/json"
        assert 'unable' in response['body'].lower()
コード例 #3
0
    def test_downloadResults_invalidEvent(self, s3):
        client, bucket, bucket_name = s3
        invalid_event = {"TEST": "TEST"}
        test_context = None
        results_handler = ResultsHandler(
            client, bucket_name, results_path=TEST_SCAN_RESULTS_BASE_PATH)
        response = results_handler.downloadResults(invalid_event, test_context)

        assert type(response) is dict
        assert response['statusCode'] == 400
        assert 'unrecognized' in response['body'].lower()
コード例 #4
0
    def test_downloadResults_noResults(self, s3):
        client, bucket, bucket_name = s3
        target = "infosec.mozilla.org"
        # No objects in the S3 bucket, should return no results
        test_apigw_event = {"body": '{"target": "' + target + '"}'}
        test_context = None
        results_handler = ResultsHandler(
            client, bucket_name, results_path=TEST_SCAN_RESULTS_BASE_PATH)
        response = results_handler.downloadResults(test_apigw_event,
                                                   test_context)

        assert type(response) is dict
        assert response['statusCode'] == 404
        assert 'isBase64Encoded' not in response
        assert 'Content-Disposition' not in response['headers']
        assert response['headers']['Content-Type'] == "application/json"
        assert 'no' in response['body'].lower()
コード例 #5
0
def download_results(event, context):
    results_handler = ResultsHandler(s3_client=S3_CLIENT, logger=logger)
    response = results_handler.downloadResults(event, context)
    return response