I'm trying to get an "walking skeleton" of my app up that will use S3 for persistence. I would like to use a fake S3 service so each developer's desktop can read/write at will.
I thought mocks3 would be perfect, as I could get a jetty server up in my jUnit tests. The problem is that mocks3 doesn't allow any writes. Not even to set it up as far as I can tell.
So how do others do this?
You can use scality s3server, in can run on your machine either using node.js or via docker and it gives you a local S3 service instance. It's open source under a BSD license github.com/scality/s3
Have a look at Adobe's S3Mock. This S3 Mock server can be started via a Docker container or JUnit 4/5 rules.
If you're ok with depending on a running docker container, and want something well-supported, you could consider using localstack
Before running your tests, start S3 like so:
And then stop it when tests complete like so:
You'll need to configure your s3 client to point to localhost:5000 for tests. In java, this can be done like so:
Tornado, a python web framework, has an example app that is just what you're looking for.
https://github.com/facebook/tornado/blob/master/demos/s3server/s3server.py
It can be used out of the box.
One option is to scrap the jetty server and use Apache VFS and the S3 plugin. With that, you can use the memory or file-based storage implementations for the integration testing.
Another option is S3 ninja - emulates the S3 API for development and testing purposes.