Project

amok_time

0.0
No commit activity in last 3 years
No release in over 3 years
Amok Time is designed for end-to-end testing distributed systems where certain behavior is time-based. It works by allowing any client to send a request header that overrides Ruby's date and time
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.11
~> 10.0
~> 3.0
 Project Readme

Amok Time

Build Status Coverage Status

Utility for mocking time across service boundaries on a per-request basis. Also passes the mock along to any background jobs enqueued during the request.

Amok Time is designed for end-to-end testing distributed systems where certain behavior is time-based. It works by allowing any client to send a request header that overrides Ruby's date and time.

What could possibly go wrong?

Installation

Add this line to your application's Gemfile:

gem 'amok_time'

And then execute:

$ bundle

Or install it yourself as:

$ gem install amok_time

Usage

# In a Rails initializer or equivalent file
AmokTime.enable!

Rails

# In the same initializer as above
require 'amok_time/rack_middleware'

Rails.application.config.middleware.use AmokTime::RackMiddleware

Sinatra

require 'amok_time/rack_middleware'

class MyApp < Sinatra::Base
  use AmokTime::RackMiddleware
end

Sidekiq

# In your sidekiq initializer

require 'amok_time/sidekiq_middlware'

Sidekiq.configure_client do |config|
  config.client_middleware do |chain|
    chain.add AmokTime::SidekiqMiddleware::Client
  end
end

Sidekiq.configure_server do |config|
  config.server_middleware do |chain|
    chain.add AmokTime::SidekiqMiddleware::Server
  end

  # Need this again for any downstream jobs enqueued
  config.client_middleware do |chain|
    chain.add AmokTime::SidekiqMiddleware::Client
  end
end

API

For a given HTTP request to a service with Amok Time enabled, you can add the following header

req.headers['X-Amok-Time'] = timestamp.to_s # any Date or Time object will work

The app will then behave as if the request was sent at that date.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/mlarraz/amok_time.

License

The gem is available as open source under the terms of the MIT License.