NOTE - I started this project in 2015, as part of my very first efforts to learn the Go programming language. I really enjoyed working on this project, but have learned a lot since then. So, I've decided to archive this repository while I figure out what I want to do next. If you want to use the code as it stands, please check out the latest released tag here. My hope is that at some point in the near future, I can collaborate with some like-minded folks on a new design that takes the lessons learned from the first version of ToDD, and makes something much better. Thanks to all that have contributed to ToDD thus far.
ToDD stands for "Testing on Demand: Distributed!". ToDD is an extensible framework for providing natively distributed testing on demand.
Traditionally, the tooling used by network engineers to confirm continued network operation after any kind of change to the network is fairly limited. After a change, a network engineer may run "ping" or "traceroute" from their machine, or perhaps call some application owners to ensure that their apps are still working. Unfortunately, there is a very big difference in network activity between a 3AM change window and peak user activity during the day.
ToDD addresses gaps in today's testing software in three ways:
ToDD is a framework through which you can deploy simple test-oriented applications in a distributed manner. With ToDD, you distribute agents around your infrastructure in any place where you feel additional "testing power" is warranted. Then, these agents can be leveraged to mimic real-world network utilization by actually running those same applications at a large scale.
Here are some key features provided by ToDD:
Documentation for ToDD is available here. Note that in the time immediately following the release, these docs will be constantly updated, so don't fret if these pages are a bit empty for the next few weeks.
The ToDD mailing list is also an excellent place to get some support from the community, or to have a discussion about a feature or problem with ToDD.
The best way to get ToDD running is by leveraging the Vagrantfile provided in this repository. This Vagrantfile comes with an Ansible playbook, so the simplest way to get this environment kicked off is:
git clone git@github.com/toddproject/todd.git
cd todd/
vagrant up
Wait for the Ansible playbook to finish, and when it's done, you will have a VM with the Go environment set up for you, and ready for you to perform an install.
To install, SSH into the VM and use the provided Makefile:
vagrant ssh
cd ~/go/src/github.com/toddproject/todd
sudo -E GOPATH=/home/vagrant/go PATH=$PATH:/home/vagrant/go make install
todd --help
That last command should show the ToDD help output - if you see this, ToDD has been installed!
There is also a handy script for starting a few containers that are useful for running ToDD. Not only is ToDD available as a docker container (downloadable from Docker Hub) but the script will also spin up some infrastructure that ToDD will use to communicate with agents, or store test data:
scripts/start-containers.sh
This script will kill any already-running containers, but if this is the first time running this script, it's a handy tool to get all of these services started quickly. The Ansible playbook accompanying this vagrantfile will set up Docker on the VM, so you should be able to run this script right away.
You can, of course, set up your own machine, and just use the provided makefile. If you do this, you must ensure the following is done:
Assuming the above criteria have been met, you should be ready to run "make install". Once this has finished, you should be able to run the "todd-server", "todd-agent", and "todd" binaries from your shell.
A Docker container for ToDD is available from Docker Hub:
docker pull toddproject/todd
If you want to contribute some code to ToDD, please review CONTRIBUTING.md first.
With great power comes great responsibility. Do not use ToDD for any purposes other than to test your own infrastructure. ToDD was not created for nefarious reasons, and you alone are responsible for how you use ToDD.