LocalStack 版本 0.2.1 在 s3 中返回额外的字节得到响应
LocalStack version 0.2.1 returning extra bytes in s3 get response
我们在项目中使用 localstack 版本 0.1.21 进行 运行 单元测试。它在 2019 年底之前一直运行良好。它开始显示以下错误 whihle 运行ning 测试用例。
java.lang.IllegalArgumentException:服务的未知端口映射。在谷歌搜索可能的问题后,我们发现了以下问题
https://github.com/localstack/localstack/issues/1293
按照建议我们升级到最新版本(0.2.1)。但是现在,我们面临着另一个问题。 s3 get 返回一些额外的字节作为响应。它在升级之前工作。我们打印了响应,发现它打印了 86 个字节(块签名)。以前的版本字节大小为零。
你能解释一下这是错误还是我缺少一些配置
LocalstackTestRunner 和 Localstack 是 0.2.1 的新文件,0.1.21 有 LocalstackDockerTestRunner 和 LocalstackDocker。
@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 中。
通过在 AmazonS3ClientBuilder 上设置 chunkedEncodingDisabled 属性 修复了它。
下面是完整的 bean。引用的字段是标准 beans
<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"
/>
我们在项目中使用 localstack 版本 0.1.21 进行 运行 单元测试。它在 2019 年底之前一直运行良好。它开始显示以下错误 whihle 运行ning 测试用例。
java.lang.IllegalArgumentException:服务的未知端口映射。在谷歌搜索可能的问题后,我们发现了以下问题
https://github.com/localstack/localstack/issues/1293
按照建议我们升级到最新版本(0.2.1)。但是现在,我们面临着另一个问题。 s3 get 返回一些额外的字节作为响应。它在升级之前工作。我们打印了响应,发现它打印了 86 个字节(块签名)。以前的版本字节大小为零。
你能解释一下这是错误还是我缺少一些配置
LocalstackTestRunner 和 Localstack 是 0.2.1 的新文件,0.1.21 有 LocalstackDockerTestRunner 和 LocalstackDocker。
@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 中。
通过在 AmazonS3ClientBuilder 上设置 chunkedEncodingDisabled 属性 修复了它。 下面是完整的 bean。引用的字段是标准 beans
<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"
/>