Дразнить DynamoDB используя moto + без сервера - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь написать тесты для приложения без сервера, используя среду без сервера AWS. Я сталкиваюсь со странной проблемой. Всякий раз, когда я пытаюсь издеваться над S3 или DynamoDB, используя мото, это не работает. Вместо того, чтобы издеваться, вызов boto3 фактически переходит на мой аккаунт AWS и пытается что-то там сделать.

Это нежелательное поведение. Не могли бы вы помочь?

Пример кода:

import datetime
import boto3
import uuid
import os
from moto import mock_dynamodb2
from unittest import mock, TestCase
from JobEngine.job_engine import check_duplicate


class TestJobEngine(TestCase):
    @mock.patch.dict(os.environ, {'IN_QUEUE_URL': 'mytemp'})
    @mock.patch('JobEngine.job_engine.logger')
    @mock_dynamodb2
    def test_check_duplicate(self, mock_logger):
        id = 'ABCD123'  

        db = boto3.resource('dynamodb', 'us-east-1')

        table = db.create_table(
            TableName='my_table',
            KeySchema=[
                {
                    'AttributeName': 'id',
                    'KeyType': 'HASH'
                }
            ],
            AttributeDefinitions=[
                {
                    'AttributeName': 'id',
                    'AttributeType': 'S'
                }
            ],
            ProvisionedThroughput={
                'ReadCapacityUnits': 1,
                'WriteCapacityUnits': 1
            }
        )


    table.meta.client.get_waiter('table_exists').wait(TableName='my_table')

        table.put_item(
        Item={
            'id': {'S': id},
           ... other data ...
        }
    )

    res = check_duplicate(id)
    self.assertTrue(mock_logger.info.called)
    self.assertEqual(res, True, 'True')

Пожалуйста, посмотрите приведенный выше код, я пытаюсь вставить запись в таблицу, а затем вызвать функцию, которая проверит, присутствует ли указанный идентификатор в таблице. Здесь я получаю таблицу ошибок уже существует, когда я запускаю этот код.

Если я отключаю сеть, я получаю сообщение об ошибке:

botocore.exceptions.EndpointConnectionError: Could not connect to the endpoint URL: "https://dynamodb.us-east-1.amazonaws.com/"

Я не понимаю, почему происходит попытка подключиться к AWS, если мы пытаемся издеваться.

1 Ответ

0 голосов
/ 07 сентября 2018

Я немного покопался и, наконец, смог решить эту проблему.

См. https://github.com/spulec/moto/issues/1793

Эта проблема была вызвана несовместимостью между ботами и мото.Оказывается, все работает нормально, когда мы понижаем botocore до 1.10.84

...