Hello,
I'm (re)writing a program that does generic unit test scheduling. The current program is a mono-threaded Perl program, but I'm willing to modularize it and parallelize the tests. I'm also considering rewriting it in Python.
Here is what I need to do:
- I have a list of tests, with the following attributes:
- uri: a URI to test (could be HTTP/HTTPS/SSH/local) ;
- depends: an associative array of tests/values that this test depends on ;
- join: a list of DB joints to be added when selecting items to process in this test ;
- depends_db: additional conditions to add to the DB request when selecting items to process in this test.
- The program builds a dependency tree, beginning with the tests that have no dependencies ;
- for each test:
- a list of items is selected from the database using the conditions (results of depending tests, joints and depends_db) ;
- the list of items is sent to the URI (using POST or stdin) ;
- the result is retrived as a YAML file listing the state and comments for the test for each tested item ;
- the results are stored in the DB ;
- the test returns, allowing depending tests to be performed.
- the program generates reports (CSV, DB, graphviz) of the performed tests.
The primary use of this program currently is to test a fleet of machines against services such as backup, DNS, etc. The tests can then be: - backup: hosted on the backup machine(s), called through HTTP, checks if the machines' backup went well ; - DNS: hosted on the local machine, called via stdin, checks if the machines' fqdn have a valid DNS entry.
Does such a tool/module already exist? What would be the best implementation to achieve this (using Perl or Python)?