All posts

s3verify — A simple tool to verify AWS S3 API compatibility

s3verify performs a series of API calls against an object storage server and checks the responses for AWS S3 signature version 4 compatibility. s3verify is licensed under Apache V2.0 license.

Why we built s3verify

Amazon Web Service’s (AWS) Simple Storage Service (S3) has emerged as the goto cloud storage, so any new competing service has a strong incentive to comply with their APIs.

Version 4 of the AWS S3 API has matured and become quite extensive. AWS now supports over 20 different APIs and countless variations on those APIs. It is no longer just simple get/put requests.

Without a tool like s3verify, making frequent high quality releases is nearly impossible. New feature additions and Pull Requests can easily cause regressions and break existing compatibility.

Dependency on other SDKs or libraries could mask bugs. Instead s3verify creates its own handcrafted HTTP requests and sends them to the user specified server.

s3verify’s primary goal is to verify the correctness of the implementation. For each possible valid input the correct response must be returned. It also tests with invalid inputs and expects failures in response. Possible invalid inputs are far too many; however the current invalid inputs are a good start.

Who can use s3verify

s3verify is intended to be used by both application developers and object storage vendors. Applications that are dependent on the AWS S3 API may use s3verify to eliminate bugs introduced by incompatible changes by the cloud storage provider. Object storage vendors are strongly advised to integrate s3verify into their CI to stop incompatible changes from creeping in. s3verify is designed to be easy to be integrated as a part of CI builds.

Install s3verify

Assuming that you have a working Go environment copy/paste the following command to your terminal. If you do not yet have a Go environment follow the instructions here: Install Go.

$ go get -u https://github.com/minio/s3verify

Conclusion

s3verify is meant to be full and robust. Please feel free to fork our project and contribute any new test or feature. We’d love to see your Pull Request.

Contribute to s3verify at: https://github.com/minio/s3verify

For any questions and nice comments join our Gitter chat at: https://gitter.im/minio/minio