Версия 0.2.1 LocalStack, возвращающая дополнительные байты в s3, получает ответ - PullRequest
0 голосов
/ 31 марта 2020

Мы используем localstack версии 0.1.21 для запуска модульных тестов в нашем проекте. До конца 2019 года он работал нормально. Он начал показывать нижеприведенную ошибку при выполнении тестовых случаев.

java .lang.IllegalArgumentException: неизвестное сопоставление портов для службы. После поиска в поиске возможных проблем мы обнаружили следующую проблему

https://github.com/localstack/localstack/issues/1293

Как и предполагалось, мы обновились до последней версии (0.2.1). Но сейчас мы сталкиваемся с другой проблемой. s3 get возвращает несколько дополнительных байтов в ответ. Он работал до обновления. Мы напечатали ответ и обнаружили, что он печатает 86 байтов (чанка подписи). Предыдущий размер байта vesrion был равен нулю.

Не могли бы вы объяснить, является ли это ошибкой или мне не хватает какой-либо конфигурации

LocalstackTestRunner и Localstack - это новые файлы с 0.2.1, 0.1.21, имеющие LocalstackDockerTestRunner и Localstack Docker.

@RunWith(LocalstackTestRunner.class)
@LocalstackDockerProperties(randomizePorts = true, services = {"s3"})
public class S3Test{
private static final String BUCKET = "my-test-bucket";
    @Autowired
    @Qualifier("awsS3Client")//it is created with default configuration using s3clientbuilder
    private AmazonS3Client amazonS3Client;

    @Before
    public void setUp() throws Exception {
        System.setProperty("aws.client", "localstack");
        System.setProperty("aws.s3.endpoint", Localstack.INSTANCE.getEndpointS3());
        ...................
    }


    @Test
    public void test1() throws IOException, ClassNotFoundException {
        File file = Files.createTempFile("testfile", ".txt").toFile();
        String key = "testkey";
        amazonS3Client.putObject(BUCKET, key, file);
        S3Object value1 = amazonS3Client.getObject(BUCKET, key);
        byte[] bytes = IOUtils.toByteArray(value1.getObjectContent());
        printResults(bytes);
        assertArrayEquals(com.google.common.io.Files.toByteArray(file), bytes);
    }

    private void printResults(byte [] arr) throws IOException {
        File file1 = new File("d:\\demo.txt");
        OutputStream os = new FileOutputStream(file1);
        os.write(arr);
        BufferedReader br = new BufferedReader(new FileReader(file1));
        String line = null;
        System.out.println("File contents: ");
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    }

Вывод на 0.2.1: тест не пройден с ошибкой утверждения ниже:

java.lang.AssertionError: array lengths differed, expected.length=0 actual.length=86

Содержимое файла:

0;chunk-signature=00fa94dcf5a419048a6cd61137dfdca2633bcfe528e508a80e98f97d5911a1fe

вывод на 0.1.21 пуст и тест пройден. Это ожидается, потому что файл пустой файл был сохранен в s3.

1 Ответ

0 голосов
/ 08 апреля 2020

Исправлено путем установки свойства chunkedEncodingDisabled на AmazonS3ClientBuilder. Ниже полный боб. ссылочные поля являются стандартными бобами

<bean id="amazonS3ClientBuilder" class="com.amazonaws.services.s3.AmazonS3ClientBuilder"
          factory-method="standard"
          p:endpointConfiguration-ref="s3EndpointConfig"
          p:pathStyleAccessEnabled="true"
          p:clientConfiguration-ref="awsClientConfiguration"
          p:chunkedEncodingDisabled="true"
    />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...