Remove Docker-dependency from SQS (#3738)
This commit is contained in:
		
							parent
							
								
									0e302a97cb
								
							
						
					
					
						commit
						31e10e96d7
					
				@ -22,12 +22,7 @@ If you don't care about the number of dependencies, or if you want to mock many
 | 
				
			|||||||
```console
 | 
					```console
 | 
				
			||||||
$ pip install moto[all]
 | 
					$ pip install moto[all]
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Not all services might be covered, in which case you might see a warning:  
 | 
					
 | 
				
			||||||
`moto 1.3.16 does not provide the extra 'service'`.  
 | 
					 | 
				
			||||||
You can ignore the warning, or simply install moto as is:
 | 
					 | 
				
			||||||
```console
 | 
					 | 
				
			||||||
$ pip install moto
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## In a nutshell
 | 
					## In a nutshell
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,13 +17,6 @@ If you don't care about the number of dependencies, or if you want to mock many
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    pip install moto[all]
 | 
					    pip install moto[all]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Not all services might be covered, in which case you might see a warning:
 | 
					 | 
				
			||||||
`moto 1.3.16 does not provide the extra 'service'`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can ignore the warning, or simply install moto as is::
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pip install moto
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you want to install ``moto`` from source::
 | 
					If you want to install ``moto`` from source::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    git clone git://github.com/spulec/moto.git
 | 
					    git clone git://github.com/spulec/moto.git
 | 
				
			||||||
 | 
				
			|||||||
@ -33,7 +33,7 @@ valid_service() {
 | 
				
			|||||||
  # Verify whether this is a valid service
 | 
					  # Verify whether this is a valid service
 | 
				
			||||||
  # We'll ignore metadata folders, and folders that test generic Moto behaviour
 | 
					  # We'll ignore metadata folders, and folders that test generic Moto behaviour
 | 
				
			||||||
  # We'll also ignore CloudFormation, as it will always depend on other services
 | 
					  # We'll also ignore CloudFormation, as it will always depend on other services
 | 
				
			||||||
  local ignore_moto_folders="core instance_metadata __pycache__ templates cloudformation utilities"
 | 
					  local ignore_moto_folders="core instance_metadata __pycache__ templates cloudformation packages utilities s3bucket_path"
 | 
				
			||||||
  if echo $ignore_moto_folders | grep -q "$1"; then
 | 
					  if echo $ignore_moto_folders | grep -q "$1"; then
 | 
				
			||||||
    return 1
 | 
					    return 1
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								setup.py
									
									
									
									
									
								
							@ -4,6 +4,8 @@ from io import open
 | 
				
			|||||||
import os
 | 
					import os
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
from setuptools import setup, find_packages
 | 
					from setuptools import setup, find_packages
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import moto.__init__ as service_list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Borrowed from pip at https://github.com/pypa/pip/blob/62c27dee45625e1b63d1e023b0656310f276e050/setup.py#L11-L15
 | 
					# Borrowed from pip at https://github.com/pypa/pip/blob/62c27dee45625e1b63d1e023b0656310f276e050/setup.py#L11-L15
 | 
				
			||||||
here = os.path.abspath(os.path.dirname(__file__))
 | 
					here = os.path.abspath(os.path.dirname(__file__))
 | 
				
			||||||
@ -69,10 +71,11 @@ all_extra_deps = [
 | 
				
			|||||||
]
 | 
					]
 | 
				
			||||||
all_server_deps = all_extra_deps + ["flask", "flask-cors"]
 | 
					all_server_deps = all_extra_deps + ["flask", "flask-cors"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO: do we want to add ALL services here?
 | 
					extras_per_service = {}
 | 
				
			||||||
# i.e. even those without extra dependencies.
 | 
					for service_name in [service[5:] for service in dir(service_list) if service.startswith("mock_")]:
 | 
				
			||||||
# Would be good for future-compatibility, I guess.
 | 
					    extras_per_service[service_name] = []
 | 
				
			||||||
extras_per_service = {
 | 
					extras_per_service.update(
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    "apigateway": [_dep_python_jose, _dep_python_jose_ecdsa_pin],
 | 
					    "apigateway": [_dep_python_jose, _dep_python_jose_ecdsa_pin],
 | 
				
			||||||
    "awslambda": [_dep_docker],
 | 
					    "awslambda": [_dep_docker],
 | 
				
			||||||
    "batch": [_dep_docker],
 | 
					    "batch": [_dep_docker],
 | 
				
			||||||
@ -88,7 +91,7 @@ extras_per_service = {
 | 
				
			|||||||
    # XRay module uses pkg_resources, but doesn't have an explicit dependency listed
 | 
					    # XRay module uses pkg_resources, but doesn't have an explicit dependency listed
 | 
				
			||||||
    # This should be fixed in the next version: https://github.com/aws/aws-xray-sdk-python/issues/305
 | 
					    # This should be fixed in the next version: https://github.com/aws/aws-xray-sdk-python/issues/305
 | 
				
			||||||
    "xray": [_dep_aws_xray_sdk, _setuptools],
 | 
					    "xray": [_dep_aws_xray_sdk, _setuptools],
 | 
				
			||||||
}
 | 
					})
 | 
				
			||||||
# When a Table has a Stream, we'll always need to import AWSLambda to search for a corresponding function to send the table data to
 | 
					# When a Table has a Stream, we'll always need to import AWSLambda to search for a corresponding function to send the table data to
 | 
				
			||||||
extras_per_service["dynamodb2"] = extras_per_service["awslambda"]
 | 
					extras_per_service["dynamodb2"] = extras_per_service["awslambda"]
 | 
				
			||||||
extras_per_service["dynamodbstreams"] = extras_per_service["awslambda"]
 | 
					extras_per_service["dynamodbstreams"] = extras_per_service["awslambda"]
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										73
									
								
								tests/test_sqs/test_integration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								tests/test_sqs/test_integration.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import base64
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import uuid
 | 
				
			||||||
 | 
					import hashlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import boto
 | 
				
			||||||
 | 
					import boto3
 | 
				
			||||||
 | 
					import sure  # noqa
 | 
				
			||||||
 | 
					from moto import mock_sqs, mock_lambda, mock_logs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from tests.test_awslambda.test_lambda import get_test_zip_file1, get_role_name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_logs
 | 
				
			||||||
 | 
					@mock_lambda
 | 
				
			||||||
 | 
					@mock_sqs
 | 
				
			||||||
 | 
					def test_invoke_function_from_sqs_exception():
 | 
				
			||||||
 | 
					    logs_conn = boto3.client("logs", region_name="us-east-1")
 | 
				
			||||||
 | 
					    sqs = boto3.resource("sqs", region_name="us-east-1")
 | 
				
			||||||
 | 
					    queue = sqs.create_queue(QueueName="test-sqs-queue1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    conn = boto3.client("lambda", region_name="us-east-1")
 | 
				
			||||||
 | 
					    func = conn.create_function(
 | 
				
			||||||
 | 
					        FunctionName="testFunction",
 | 
				
			||||||
 | 
					        Runtime="python2.7",
 | 
				
			||||||
 | 
					        Role=get_role_name(),
 | 
				
			||||||
 | 
					        Handler="lambda_function.lambda_handler",
 | 
				
			||||||
 | 
					        Code={"ZipFile": get_test_zip_file1()},
 | 
				
			||||||
 | 
					        Description="test lambda function",
 | 
				
			||||||
 | 
					        Timeout=3,
 | 
				
			||||||
 | 
					        MemorySize=128,
 | 
				
			||||||
 | 
					        Publish=True,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    response = conn.create_event_source_mapping(
 | 
				
			||||||
 | 
					        EventSourceArn=queue.attributes["QueueArn"], FunctionName=func["FunctionArn"]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert response["EventSourceArn"] == queue.attributes["QueueArn"]
 | 
				
			||||||
 | 
					    assert response["State"] == "Enabled"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    entries = [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "Id": "1",
 | 
				
			||||||
 | 
					            "MessageBody": json.dumps({"uuid": str(uuid.uuid4()), "test": "test"}),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    queue.send_messages(Entries=entries)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    start = time.time()
 | 
				
			||||||
 | 
					    while (time.time() - start) < 30:
 | 
				
			||||||
 | 
					        result = logs_conn.describe_log_streams(logGroupName="/aws/lambda/testFunction")
 | 
				
			||||||
 | 
					        log_streams = result.get("logStreams")
 | 
				
			||||||
 | 
					        if not log_streams:
 | 
				
			||||||
 | 
					            time.sleep(1)
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        assert len(log_streams) >= 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        result = logs_conn.get_log_events(
 | 
				
			||||||
 | 
					            logGroupName="/aws/lambda/testFunction",
 | 
				
			||||||
 | 
					            logStreamName=log_streams[0]["logStreamName"],
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        for event in result.get("events"):
 | 
				
			||||||
 | 
					            if "custom log event" in event["message"]:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					        time.sleep(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert False, "Test Failed"
 | 
				
			||||||
@ -15,9 +15,10 @@ from boto.exception import SQSError
 | 
				
			|||||||
from boto.sqs.message import Message, RawMessage
 | 
					from boto.sqs.message import Message, RawMessage
 | 
				
			||||||
from botocore.exceptions import ClientError
 | 
					from botocore.exceptions import ClientError
 | 
				
			||||||
from freezegun import freeze_time
 | 
					from freezegun import freeze_time
 | 
				
			||||||
from moto import mock_sqs, mock_sqs_deprecated, mock_logs, settings
 | 
					from moto import mock_sqs, mock_sqs_deprecated, settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from unittest import SkipTest, mock
 | 
					from unittest import SkipTest, mock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
from tests.helpers import requires_boto_gte
 | 
					from tests.helpers import requires_boto_gte
 | 
				
			||||||
from moto.core import ACCOUNT_ID
 | 
					from moto.core import ACCOUNT_ID
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user