Module: Aws::ClientStubs

Included in:
Client
Defined in:
lib/aws-sdk-core/client_stubs.rb

Overview

This module provides the ability to specify the data and/or errors to return when a client is using stubbed responses. Pass ‘:stub_responses => true` to a client constructor to enable this behavior.

Defined Under Namespace

Classes: Stub

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(subclass) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



12
13
14
# File 'lib/aws-sdk-core/client_stubs.rb', line 12

def self.included(subclass)
  subclass.add_plugin('Aws::Plugins::StubResponses')
end

Instance Method Details

#initialize(*args) ⇒ Object



16
17
18
19
20
# File 'lib/aws-sdk-core/client_stubs.rb', line 16

def initialize(*args)
  @stubs = {}
  @stub_mutex = Mutex.new
  super
end

#next_stub(operation_name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



93
94
95
96
97
98
99
100
101
102
# File 'lib/aws-sdk-core/client_stubs.rb', line 93

def next_stub(operation_name)
  @stub_mutex.synchronize do
    stubs = @stubs[operation_name.to_sym] || []
    case stubs.length
    when 0 then new_stub(operation_name)
    when 1 then stubs.first
    else stubs.shift
    end
  end
end

#stub_responses(operation_name, *stubs) ⇒ void

This method returns an undefined value.

Configures what data / errors should be returned from the named operation when response stubbing is enabled.

## Basic usage

By default, fake responses are generated. You can override the default fake data with specific response data by passing a hash.

# enable response stubbing in the client constructor
client = Aws::S3::Client.new(stub_responses: true)

# specify the response data for #list_buckets
client.stub_responses(:list_buckets, buckets:[{name:'aws-sdk'}])

# no api calls made, stub returned
client.list_buckets.map(&:name)
#=> ['aws-sdk']

## Stubbing Errors

When stubbing is enabled, the SDK will default to generate fake responses with placeholder values. You can override the data returned. You can also specify errors it should raise.

client.stub_responses(:get_object, 'NotFound')
client.get_object(bucket:'aws-sdk', key:'foo')
#=> raises Aws::S3::Errors::NotFound

client.stub_responses(:get_object, Timeout::Error)
client.get_object(bucket:'aws-sdk', key:'foo')
#=> raises new Timeout::Error

client.stub_responses(:get_object, RuntimeError.new('custom message'))
client.get_object(bucket:'aws-sdk', key:'foo')
#=> raises the given runtime error object

## Stubbing Multiple Responses

Calling an operation multiple times will return similar responses. You can configure multiple stubs and they will be returned in sequence.

client.stub_responses(:head_object, [
  'NotFound',
  { content_length: 150 },
])

client.head_object(bucket:'aws-sdk', key:'foo')
#=> raises Aws::S3::Errors::NotFound

resp = client.head_object(bucket:'aws-sdk', key:'foo')
resp.content_length #=> 150

Parameters:

  • operation_name (Symbol)
  • stubs (Mixed)

    One or more responses to return from the named operation.

Raises:

  • (RuntimeError)

    Raises a runtime error when called on a client that has not enabled response stubbing via ‘:stub_responses => true`.



82
83
84
85
86
87
88
89
90
# File 'lib/aws-sdk-core/client_stubs.rb', line 82

def stub_responses(operation_name, *stubs)
  if config.stub_responses
    apply_stubs(operation_name, stubs.flatten)
  else
    msg = 'stubbing is not enabled; enable stubbing in the constructor '
    msg << 'with `:stub_responses => true`'
    raise msg
  end
end