【Java】 S3 업로드·다운로드의 테스트를 "S3 ninja"를 사용해 실시한다

S3 의 테스트용 더미 서버는 Fake S3 라고 하는 것이 있다고 들었습니다만 Ruby답게, 저 Java 가게이므로 Java에서도 없는가-라고 찾으면 S3 닌자 라고 하는 것이 있었습니다.

S3 닌자

ninja.jpg

그래서 사용해 봅시다. 그러자.
Fake S3은 또한 이번에.

테스트 코드 작성



통상은 다운로드해 사용하는 것 같습니다만, 귀찮기 때문에, 이번은 maven로 인스톨 해, Junit로 무리하게 기동시킵니다.

pom.xml



pom.xml
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.91</version>
        </dependency>
        <dependency>
            <groupId>com.scireum</groupId>
            <artifactId>s3ninja</artifactId>
            <version>2.7</version>
        </dependency>

JUnit 코드



Test.java
    static {
        //必要なフォルダを掘る
        try {
            Files.createDirectories(Paths.get("data/s3"));
        } catch (IOException e) {
        }

        //s3ninja起動
        Thread thread = new Thread(() -> {
            try {
                Method main = Class.forName("IPL").getMethod("main", new Class[] { String[].class });
                main.invoke(null, (Object) new String[0]);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        thread.start();

        try {
            Thread.sleep(1000);//念のため
        } catch (InterruptedException e) {
        }

    }

    @Test
    public void test() throws IOException {
        AmazonS3 s3 = AmazonS3Client.builder()
                .withEndpointConfiguration(new EndpointConfiguration("http://localhost:9444/s3", null))
                .withCredentials(new AWSStaticCredentialsProvider(
                        new BasicAWSCredentials("AKIAIOSFODNN7EXAMPLE", "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY")))
                .withPathStyleAccessEnabled(true)
                .withClientConfiguration(new ClientConfiguration().withSignerOverride("S3SignerType"))
                .build();

        //アップロード
        s3.putObject(new PutObjectRequest("bucket", "s3test.txt", new File("test.txt")));

        //ダウンロード
        try (S3Object s3Object = s3.getObject(new GetObjectRequest("bucket", "s3test.txt"));
                InputStream input = s3Object.getObjectContent()) {
            assertThat(IOUtils.toByteArray(input), is(Files.readAllBytes(Paths.get("test.txt"))));
        }

    }

설명


  • 초기 처리
  • 이용하려면 ./data/s3 라는 폴더가 필요하기 때문에 파고 있습니다.

  • S3 ninja를 기동하기 위해서, IPL#main을 호출하고 싶습니다만, 디폴트 패키지의 클래스는 import 할 수 없기 때문에 reflection로 호출합니다.

  • AmazonS3Client 생성
  • endpoint 설정합니다.
  • Credentials에 필요한 값은 소스 코드를 참조하십시오. S3 ninja를 보통으로 기동해 web화면 열면 쓰고 있습니다.
  • PathStyleAccessEnabled를 true로 하지 않으면 안되는 것 같습니다.
  • "S3SignerType"이라는 것을 설정하지 않으면 안되는 것 같습니다.

  • 테스트
  • 파일을 업로드하고 다운로드하여 원본 파일과 비교합니다.



  • 참고:
    로컬 S3가되는 ninja를 넣어 보았습니다.

    좋은 웹페이지 즐겨찾기