Module: Smash::CloudPowers::AwsStubs
- Defined in:
- lib/stubs/aws_stubs.rb
Overview
Provides stubbing for development work in CloudPowers or in a project that uses is
Constant Summary collapse
- INSTANCE_METADATA_STUB =
Stub metadata for EC2 instance
{ 'ami-id' => 'ami-1234', 'ami-launch-index' => '1', 'ami-manifest-path' => '', 'block-device-mapping/' => '', 'hostname' => '', 'instance-action' => '', 'instance-id' => 'asd-1234', 'instance-type' => 't2.nano', 'kernel-id' => '', 'local-hostname' => 'ip-10-251-50-12.ec2.internal', 'local-ipv4' => '', 'mac network/' => '', 'placement/' => 'boogers', 'public-hostname' => 'ec2-203-0-113-25.compute-1.amazonaws.com', 'public-ipv4' => 'adsfasdfasfd', 'public-keys/' => 'jfakdsjfkdlsajfkldsajflkasjdfklajsdflkajsldkfjalsdfjaklsdjflasjfklasjdfkals', 'public-keys/0' => 'asdjfkasdjfkasdjflasjdfklsajdlkfjaldkgfjalkdfgjklsdfjgklsdjfklsjlkdfjakdlfjalskdfjlas', 'reservation-id' => 'r-fea54097', 'security-groups' => 'groupidygroupgroupgroup', 'services/' => '' }
Class Method Summary collapse
-
.broadcast_stub(opts = {}) ⇒ Object
Stub data for a SNS client.
-
.node_stub(opts = {}) ⇒ Object
Get or create an EC2 client and cache that client so that a Context is more well tied together.
-
.pipe_stub(opts = {}) ⇒ Object
Get or create an Kinesis client and cache that client so that a Context is more well tied together Parameters * opts Hash * * stub_responses: defaulted to false but it can be overriden with the desired responses for local testing * * region: defaulted to use the
#region()method * * AWS::Credentials object, which will also scour the context and environment for your keys. -
.queue_stub(opts = {}) ⇒ Object
Stub data for an SQS client.
-
.storage_stub(opts = {}) ⇒ Object
Get or create an S3 client and cache that client so that a Context is more well tied together.
Class Method Details
.broadcast_stub(opts = {}) ⇒ Object
Stub data for a SNS client
Parameters
- opts
Hash -
- stub_responses: defaulted to false but it can be overriden with the desired responses for local testing
-
- region: defaulted to use the
#region()method
- region: defaulted to use the
-
- AWS::Credentials object, which will also scour the context and environment for your keys
Returns AWS::SNS client
Example config = { stub_responses: { create_topic: {}, delete_topic: {}, list_topics: [], publish: {}, subscribe: {} } }
sns(config) # sets and gets an Kinesis client
create_channel!('testBroadcast')
# => true
120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/stubs/aws_stubs.rb', line 120 def self.broadcast_stub(opts = {}) arn = "arn:aws:sns:us-west-2:8123456789:#{opts[:name] || 'testChannel'}" stub = { stub_responses: { create_topic: { topic_arn: arn }, delete_topic: {}, list_topics: { topics: [{ topic_arn: arn }], next_token: '1234asdf' }, publish: { message_id: 'msgidmsgidmsgidmsgid' }, subscribe: { subscription_arn: 'subarnsubarnsubarn' } } } stub.merge(opts.select { |k,v| stub.key? k }) end |
.node_stub(opts = {}) ⇒ Object
Get or create an EC2 client and cache that client so that a Context is more well tied together
Parameters
- opts
Hash(optional) -
- stub_responses - defaulted to
falsebut it can be overriden with the desired responses for local testing
- stub_responses - defaulted to
-
- region - defaulted to use the #region() method
-
- AWS::Credentials object, which will also scour the context and environment for your keys
Returns AWS::EC2::Client
Example config = stub_responses: { run_instances: { instances: [{ instance_id: 'asd-1234', launch_time: Time.now, state: { name: 'running' }] }, describe_instances: { reservations: [ { instances: [{ instance_id: 'asd-1234', state: { code: 200, name: 'running' } }] } ] }, describe_images: { images: [{ image_id: 'asdf', state: 'available' }] } }
ec2(config) # sets and gets an <tt>EC2::Client</tt> that is stubbed with the return data in the config <tt>Hash</tt>
images = ec2.describe_images
images.first[:image_id]
# => 'asdf'
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/stubs/aws_stubs.rb', line 60 def self.node_stub(opts = {}) { stub_responses: { create_tags: {}, run_instances: { instances: [ { instance_id: 'asd-1234', launch_time: Time.now, state: { name: 'running' } }, { instance_id: 'qwe-4323', launch_time: Time.now, state: { name: 'running' } }, { instance_id: 'tee-4322', launch_time: Time.now, state: { name: 'running' } }, { instance_id: 'bbf-6969', launch_time: Time.now, state: { name: 'running' } }, { instance_id: 'lkj-0987', launch_time: Time.now, state: { name: 'running' } }, ]}, describe_instances: { reservations: [ { instances: [ { instance_id: 'asd-1234', state: { code: 200, name: 'running' } }, { instance_id: 'qwe-4323', state: { code: 200, name: 'running' } }, { instance_id: 'tee-4322', state: { code: 200, name: 'running' } }, { instance_id: 'bbf-6969', state: { code: 200, name: 'running' } }, { instance_id: 'lkj-0987', state: { code: 200, name: 'running' } } ] }] }, describe_images: { images: [ { image_id: 'asdf', state: 'available' }, { image_id: 'fdas', state: 'available' }, { image_id: 'fdadg', state: 'available' }, { image_id: 'aswre', state: 'available' }, { image_id: 'fsnkv', state: 'available' }, ] } } } end |
.pipe_stub(opts = {}) ⇒ Object
Get or create an Kinesis client and cache that client so that a Context is more well tied together Parameters
- opts Hash
-
- stub_responses: defaulted to false but it can be overriden with the desired responses for local testing
-
- region: defaulted to use the
#region()method
- region: defaulted to use the
-
- AWS::Credentials object, which will also scour the context and environment for your keys
Returns AWS::Kinesis client
Example config = { stub_responses: { create_stream: {}, put_record: { shard_id: opts || 'idididididididid', sequence_number: opts || Time.now.to_i.to_s }, describe_stream: { stream_description: { stream_name: opts || 'somePipe', stream_arn: 'arnarnarnarnar', stream_status: 'ACTIVE', } } } } }
kinesis(config) # sets and gets an Kinesis client
pipe_to('somePipe') { update_body(status: 'waHoo') }
# => sequence_number: '1676151970'
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/stubs/aws_stubs.rb', line 167 def self.pipe_stub(opts = {}) stub = { stub_responses: { create_stream: {}, put_record: { shard_id: opts[:shard_id] || 'idididididididid', sequence_number: opts[:sequence_number] || '1234' }, describe_stream: { stream_description: { stream_name: opts[:name] || 'testPipe', stream_arn: 'arnarnarnarnar', stream_status: 'ACTIVE', shards: [ { shard_id: '1', parent_shard_id: 'wowza', hash_key_range: { starting_hash_key: 'starting', ending_hash_key: 'ending' }, sequence_number_range: { starting_sequence_number: '1' } } ], has_more_shards: true, retention_period_hours: 1, enhanced_monitoring: [] } } } } stub.merge(opts.select { |k| stub.key?(k) }) end |
.queue_stub(opts = {}) ⇒ Object
Stub data for an SQS client
Parameters
- opts Hash
-
- stub_responses: defaulted to false but it can be overriden with the desired responses for local testing
-
- region: defaulted to use the
#region()method
- region: defaulted to use the
-
- AWS::Credentials object, which will also scour the context and environment for your keys
Returns AWS::SQS client
Example create_queue('someQueue') # uses AWS::SQS some_queue_url = queue_search('someQueue').first # uses AWS::SQS
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/stubs/aws_stubs.rb', line 245 def self.queue_stub(opts = {}) { stub_responses: { create_queue: { queue_url: "https://sqs.us-west-2.amazonaws.com/12345678/#{opts[:name] || 'testQueue'}" }, delete_message: {}, # #delete_message() returns nothing delete_queue: {}, # #delete_queue() returns nothing get_queue_attributes: { attributes: { 'ApproximateNumberOfMessages' => rand(1..10).to_s } }, get_queue_url: { queue_url: "https://sqs.us-west-2.amazonaws.com/12345678/#{opts[:name] || 'testQueue'}" }, list_queues: { queue_urls: ["https://sqs.us-west-2.amazonaws.com/12345678/#{opts[:name] || 'testQueue'}"] }, receive_message: { messages: [ { attributes: { "ApproximateFirstReceiveTimestamp" => "1442428276921", "ApproximateReceiveCount" => "5", "SenderId" => "AIDAIAZKMSNQ7TEXAMPLE", "SentTimestamp" => "1442428276921" }, body: "{\"foo\":\"bar\"}", md5_of_body: "51b0a325...39163aa0", md5_of_message_attributes: "00484c68...59e48f06", message_attributes: { "City" => { data_type: "String", string_value: "Any City" }, "PostalCode" => { data_type: "String", string_value: "ABC123" } }, message_id: "da68f62c-0c07-4bee-bf5f-7e856EXAMPLE", receipt_handle: "AQEBzbVv...fqNzFw==" } ] }, send_message: { md5_of_message_attributes: "00484c68...59e48f06", md5_of_message_body: "51b0a325...39163aa0", message_id: "da68f62c-0c07-4bee-bf5f-7e856EXAMPLE" } } }.merge(opts) end |
.storage_stub(opts = {}) ⇒ Object
Get or create an S3 client and cache that client so that a Context is more well tied together
Parameters
- opts Hash
-
- stub_responses: defaulted to false but it can be overriden with the desired responses for local testing
-
- region: defaulted to use the
#region()method
- region: defaulted to use the
-
- AWS::Credentials object, which will also scour the context and environment for your keys
Returns AWS::S3 client
Example config = { stub_responses: { head_bucket: {} } }
s3(config)
expect(s3.head_bucket).to be_empty
# passing expectation
223 224 225 226 227 228 229 |
# File 'lib/stubs/aws_stubs.rb', line 223 def self.storage_stub(opts = {}) { stub_responses: { head_bucket: {} } } end |