Development & testing

Development

You do not really need a lot to start developing.

  • A local Ruby >= 2.0
git clone https://github.com/eugenmayer/docker-sync
cd docker-sync
bundle install
gem uninstall -a docker-sync

Important: To properly develop, uninstall docker-sync as a gem so it is not used during the runs: gem uninstall -a docker-sync.

Now you can:

cd example
thor sync:start

or

thor stack:start

So you see, what is separated in to binaries in production docker-sync and docker-sync-stack is bundled under one namespace here, but prefixed.

General layout

Check libs folder.

  • SyncManager: Main orchestrator to initialise the config, bootstrap ALL sync-endpoint-processes and start/stop those in threads
  • SyncProcess: Does orchestrate/a manage ONE sync-endpoint. Selects the strategy on base of the config
  • Strategies: See below, specific implementations how to either sync or watch for changes.

Sync strategies

  1. To add a new strategy for sync, copy one of those https://github.com/EugenMayer/docker-sync/tree/master/lib/docker_sync/sync_strategy here as your
  2. Implement the general commands as they are implemented for rsync/unison - yes we do not have an strategy interface and no abstract class, since its ruby .. and well :)
  3. Add your strategy here: https://github.com/EugenMayer/docker-sync/blob/master/lib/docker_sync/sync_process.rb#L31

Thats it.

Watch strategies

  1. To add a new strategy for watch, copy one of those https://github.com/EugenMayer/docker-sync/tree/master/lib/docker_sync/watch_strategy here as your
  2. Implement the general commands as they are implemented for fswatch
  3. Add your strategy here: https://github.com/EugenMayer/docker-sync/blob/master/lib/docker_sync/sync_process.rb#L46

Thats it.


Testing

Automated integration tests

bundle install
bundle exec rspec --format=documentation

Manual Tests (sync and performance)

Tip

You can also use the docker-sync-boilerplate.

Pull this repo and then

cd docker-sync/example
thor stack:start

Open a new shell and run

cd docker-sync/example
echo "NEWVALUE" >> data1/somefile.txt
echo "NOTTHEOTHER" >> data2/somefile.txt

Check the docker-compose logs and you see that the files are updated.

Performance write test:

docker exec -i -t fullexample_app time dd if=/dev/zero of=/var/www/test.dat bs=1024 count=100000