Expand description

Mock request dispatcher and credentials for unit testing rusoto AWS service clients

All rusoto generated service clients come with a constuctor function named new_with which accepts three arguments

  • A rusoto_core::DispatchSignedRequest implementation
  • A rusoto_core::credential::ProvideAwsCredentials implementation
  • A rusoto_core::Region

This crate provides mock implementations to satisfy the first two.

Example

The following is an example for the rusoto_s3 crate but should work for all service crates just the same. The code is commented out for illustration but also to avoid a cyclic dependency in this crate.

extern crate rusoto_mock;
// extern crate rusoto_s3;

use rusoto_mock::{MockCredentialsProvider, MockRequestDispatcher, MockResponseReader};

fn main() {
   // let s3 = rusoto_s3::S3Client::new_with(
   //   MockRequestDispatcher::default().with_body(
   //      MockResponseReader::read_response("test-data", "s3-response.json")
   //   ),
   //   MockCredentialsProvider,
   //   Default::default()
   // );
}

Note regarding XML-based AWS Services

Some AWS services such as SQS and STS return responses in XML format rather than JSON.

In these cases, parsing may fail with ParseError("Expected StartElement got None").

Valid XML examples can be found in the API documentation for an API call such as this one for STS AssumeRole.

These can be used to create a MockRequestDispatcher like so:

MockRequestDispatcher::default().with_body(r#"
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
  ... etc
</AssumeRoleResponse>
"#)

Structs

Provides a set of credentials that always resolve successfully

Composes mock API responses

Reads response body content from disk

Returns sequential mock API responses consuming a collection of MockRequestDispatch

Traits

An interface for producing response body content