Project

fake_sns

0.06
No release in over 3 years
Low commit activity in last 3 years
There's a lot of open issues
Small Fake version of SNS
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Fake SNS

A small web app for local SNS development.

It contains a small store to inspect, and some methods to inspect and change the contents, so you can create scenarios.

Noteworthy differences:

  • No checking of access keys.
  • Returns all topics, not just 100, no support for NextToken parameter.

Implemented:

  • CreateTopic
  • ListTopics
  • DeleteTopic
  • GetTopicAttributes
  • SetTopicAttributes
  • ListSubscriptions
  • ListSubscriptionsByTopic

Under Construction

  • Subscribe
  • Publish

Actions to be implemented:

  • AddPermission
  • ConfirmSubscription
  • CreatePlatformApplication
  • CreatePlatformEndpoint
  • DeleteEndpoint
  • DeletePlatformApplication
  • GetEndpointAttributes
  • GetPlatformApplicationAttributes
  • GetSubscriptionAttributes
  • ListEndpointsByPlatformApplication
  • ListPlatformApplications
  • RemovePermission
  • SetEndpointAttributes
  • SetPlatformApplicationAttributes
  • SetSubscriptionAttributes
  • Unsubscribe

Usage

There are 2 ways of running FakeSNS, as a gem, or as plain Rack app. The first is easy, the latter is more flexible.

As a gem:

$ gem install fake_sns
$ fake_sns -p 9292

To configure AWS-SDK to send messages here:

AWS.config(
  use_ssl:       false,
  sns_endpoint:  "0.0.0.0",
  sns_port:      9292,
)

Command line options

Get help by running fake_sns --help. These options are basically the same as Sinatra's options. Here are the SNS specific options:

  • Store the database somewhere else: --database FILENAME or specify an in memory database that will be lost: --database :memory:

Extra endpoints

To get a YAML representation of all the data known to FakeSNS, do a GET request to the root path:

curl -X GET http://localhost:9292/

To change the database, submit the contents you got from the previous step, augment it and submit it as the body of a PUT request:

curl -X GET http://localhost:9292/ -o my-data.yml
vim my-data.yml
curl -X PUT --data @my-data.yml http://localhost:9292/

To reset the entire database, send a DELETE request:

curl -X DELETE http://localhost:9292/

To send ALL the messages stored in the queue, you can send a post request:

curl -X POST http://localhost:9292/drain

You can also just send a single message:

curl -X POST http://localhost:9292/drain/:message_id

Currently, only HTTP/HTTPS and SQS endpoints are working. You'll need to pass AWS config (in JSON format) for the SQS integration to work. See [FakeSNS] [fake_sns] for more information.

curl \
       -X POST \
       --data '{"aws_config": {"use_ssl": false, "sqs_endpoint": "localhost", "sqs_port": 4789, "secret_access_key": "xxx", "access_key_id": "yyy"}}' \
       http://localhost:9292/drain

Test Integration

When making integration tests for your app, you can easily include Fake SNS.

Here are the methods you need to run FakeSNS programmatically.

require "fake_sns/test_integration"

# globally, before the test suite starts:
AWS.config(
  use_ssl:            false,
  sns_endpoint:       "localhost",
  sns_port:           4568,
  access_key_id:      "fake access key",
  secret_access_key:  "fake secret key",
)
fake_sns = FakeSNS::TestIntegration.new

# before each test that requires SNS:
fake_sns.start

# at the end of the suite:
at_exit {
  fake_sns.stop
}

# for debugging, get everything FakeSNS knows:
puts fake_sns.data.inspect

# if you have SQS configured in the AWS config, you can also do:
fake_sns.drain

See spec/spec_helper.rb in this project for an example on how to load it in your test suite.

More information