"""Configuration file for pytest. This file gets picked up when running py.test tests: http://pytest.org/latest/writing_plugins.html#conftest """ import os from queue import Queue import random import string from moto import mock_sqs import pytest from sales.connectors.loggly import app_logger from sales.logic import queue PREFETCH_NUMBER = 2 VISIBILITY_TIMEOUT = 60 WAIT_TIME_SECONDS = 2 NUM_MESSAGES = 2 RETURN_TO_QUEUE_TIMEOUT = 1 MAX_RETRIES = 10 STOP_TIMEOUT = 5 SQS_QUEUE_NAME = 'test-q' READERS_COUNT = 1 EXECUTORS_COUNT = 1 @pytest.fixture(autouse=True) def aws_credentials(): """Mocked AWS Credentials for moto.""" os.environ['AWS_ACCESS_KEY_ID'] = 'testing' os.environ['AWS_SECRET_ACCESS_KEY'] = 'testing' os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' @pytest.fixture(scope='session') def prefetch_queue(): """Prefetch queue with this function.""" pref_queue = Queue(PREFETCH_NUMBER) yield pref_queue @pytest.fixture(scope='function') def sqs(aws_credentials): """Return moto sqs resource.""" with mock_sqs(): import boto3 boto3.setup_default_session() yield boto3.resource('sqs') @pytest.fixture def sqs_queue(sqs): """Connect to SQS queue.""" name = ''.join( random.choice(string.ascii_lowercase) for i in range(18)) response = sqs.create_queue(QueueName=name) mock_queue = sqs.Queue(response.url) yield mock_queue mock_queue.delete() @pytest.fixture def queue_reader_worker(prefetch_queue, sqs_queue): """Create queue reader worker.""" worker = queue.QueueReaderWorker( 'test-worker', prefetch_queue, sqs_queue, VISIBILITY_TIMEOUT, WAIT_TIME_SECONDS, NUM_MESSAGES, RETURN_TO_QUEUE_TIMEOUT, MAX_RETRIES, app_logger ) worker.debug = True yield worker worker.stop(STOP_TIMEOUT) @pytest.fixture def app_execution_worker(prefetch_queue, sqs_queue): """Create queue executive worker.""" worker = queue.AppProcessingWorker( 'test-worker', prefetch_queue, sqs_queue, RETURN_TO_QUEUE_TIMEOUT, app_logger ) worker.debug = True yield worker worker.stop(STOP_TIMEOUT) @pytest.fixture def worker_manager(): """Create queue worker manager.""" manager = queue.QueueWorkerManager( READERS_COUNT, EXECUTORS_COUNT, SQS_QUEUE_NAME, PREFETCH_NUMBER, VISIBILITY_TIMEOUT, WAIT_TIME_SECONDS, NUM_MESSAGES, app_logger ) manager.debug = True yield manager manager.stop(STOP_TIMEOUT) @pytest.fixture def valid_message_body(): """Return a valid message body.""" return { 'source_table_name': 'baz', 'destination_s3_bucket': 'foo', 'destination_s3_path': 'bar.txt', 'sales_file_id': 1, 'callback_url': 'endpoint' }