web-dev-qa-db-fra.com

Comment se moquer Amazon S3 dans un test d'intégration

J'essaie d'obtenir un "squelette de marche" de mon application qui utilisera S3 pour la persistance. J'aimerais utiliser un faux service S3 afin que chaque bureau du développeur puisse lire/écrire à volonté.

Je pensais Mocks serait parfait, car je pourrais obtenir un serveur de jetty dans mes tests Junit. Le problème est que Mocks3 ne permet aucun écrit . Pas même pour la configurer aussi loin que je peux dire.

Alors, comment les autres font-ils cela?

21
Michael Deardeuff

Tornado, A python Framework, a un exemple d'application qui est juste ce que vous recherchez.

https://github.com/facebook/tornado/blob/master/demos/s3server/s3server.py

Il peut être utilisé hors de la boîte.

5
mikelikespie

Il y a aussi un outil S3Mock écrit exactement à cet effet. Il se moque des parties essentielles de AWS S3 API au-dessus du système de fichiers local:

S3Mock api = S3Mock.create(8001, "/tmp/s3");
api.start();

AmazonS3Client client = new AmazonS3Client(new AnonymousAWSCredentials());
// use local API mock, not the AWS one
client.setEndpoint("http://127.0.0.1:8001");
client.createBucket("testbucket");
client.putObject("testbucket", "file/name", "contents");

Il est également facilement intégré et moins de configuration.

17
shutty

Une autre option est S3 Ninja - émule l'API S3 à des fins de développement et de test.

9
Jay P.

Si vous êtes d'accord avec en fonction d'un conteneur de docker en cours d'exécution et que vous voulez quelque chose de bien pris en charge, vous pouvez envisager d'utiliser localStack

Avant d'exécuter vos tests, commencez S3 comme si:

docker run --name localstack -d -p 5000:5000 -e SERVICES=s3:5000 localstack/localstack

Puis arrêtez-le lorsque des tests complètes comme si:

docker stop localstack

Vous devrez configurer votre client S3 pour pointer vers localhost: 5000 pour les tests. En Java, cela peut être fait comme si:

        AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(
                 "http://localhost:5000", 
                 "us-west-2"))
            .build();
6
Stimp

Jetez un coup d'œil à S3Mock de Adobe . Ce serveur S3 Mock peut être démarré via un conteneur Docker ou des règles Junit 4/5.

3
Jake Ham

Vous pouvez utiliser SCALITY S3Server, dans CAN Exécuter sur votre machine à l'aide de nœud.js ou via Docker et il vous donne une instance de service S3 locale. C'est une source ouverte sous une licence BSD github.com/scality/s

0
Rackam36