NAME
   Test::Server - what about test driven administration?

SYNOPSIS
           cp -r examples /etc/t
           cd /etc/t
           vim test-server.yaml
           prove /etc/t

           use Test::Server;
           Test::Server->run();

DESCRIPTION
   Ever heard of test driven development? What about test driven
   administration? Take a look around examples/ folder for example tests
   that you can run agains your server.

   The general configuration should be done through the test-server.yaml
   and should be managable by any non Perl awear admin (are there any?). Of
   course you are free to put any other test that make sence for your
   server.

   The idea behind this is following: You run `prove /etc/t' and everything
   is fine. Server is up and running. Life is nice. Then somebody calls you
   at 3am... Oups! What went wrong? You login to the server (if possible of
   course) and run the `prove /etc/t' friend. Something failed? => fix it.
   Nothing failed? => write a test that will reveal that something is wrong
   && fix the problem of course ;). And then at 6am go happily to sleep
   again...

   To be the administration really test drive ;) you should be writing your
   tests before you install the server...

   Any other benefits? What about migration || reinstalation of the server?
   Do you always remember what services || purpouses is the server used
   for? You just `scp' the /etc/t folder to the new machine and `prove
   /etc/t' will tell you. If not you'll write a test ;).

   Or are you writing firewall rules and need to check if you didn't close
   some ports that you should not? Check out the 03_open-ports.t.

   I hope you'll enjoy the idea as I do. (until I find that there are 30
   other similar solutions like this...)

METHODS
 run()
   For the moment just runs `prove /etc/t'. Any other better idea?

examples/
   I have tried to organize examples/ a little bit. Tests with 01_* should
   be run directly on the server. The other should run also remotely. Than
   there can be a central "test" server that will collect all /etc/t
   folders (without 01_*) and the test could be run also remotely. Testing
   remote access to the services. Store the collected test in
   /folder/server_name, run `prove -r /folder' and watch how everything
   works(?)!.

   The tests starting with 02_* should be essential but short running tests
   that should work in all cases and the rest of the tests will most likely
   fail if they do.

 files
   01_hostname-and-interfaces.t
       check hostname and ip resolution on interfaces

   01_running-processes.t
       check running processes

   02_dns-resolution.t
       query dns server and check for the answers

       check also if the dns responses are fast enought

   02_disk-free.t
       disk free/full check

   02_resolv.conf.t
       query all nameserver-s in /etc/resolv.conf and make sure all are
       reachable.

   02_time-sync.t
       compare local machine time with a ntp server to make sure both are
       in the sync.

       For the idea thanks to Emmanuel Rodriguez Santiago.

   02_messages.t
       Checks a file(s) and generates failed tests on every line found
       there. Allows any program in the system to pass messages to the
       monitoring simply by adding line into a file

   03_sites-ok.t
       check web sites

   03_open-ports.t
       Check if the ports are open and if the service is responding.

   03_cmd-output.t
       Check the output of the shell command with a regexp. Check the exit
       code.

       For the idea thanks to Aldo Calpini.

   03_find-huge-files.t
       Check folders it there are not too many files and if the files
       (logs, tmp, etc.) didn't grow too large.

   03_folder-file.t
       File directory permissions and sizes for a directories (e.g. Is
       cache dir writeable for httpd)

       For the idea thanks to Peter Hartl.

   03_interfaces-ptr.t
       check if interfaces has a PTR record which properly resolves back to
       interface ip

   03_wakeup.t
       After given number of days a fail test will occure. The purpose is
       to make sure monitoring team is receiving alarms properly. If the
       admins finds out that this test fails for couple of days without
       anyone notice then there is something wrong.

   03_net-hops.t
       Does traceroute and check first or last N network hops to the host.
       It's using system `traceroute' program.

 TODO
   03_smart.t
       run `smartctl -q errorsonly -H -l selftest /dev/hda` and produce
       error if there will be some output

   03_reachable.t
       check with Net::Ping if hosts are reachable

sky
   There are no restrictions in Perl and there are no best solutions => so
   the sky is the limit! (Or we our self are the limit?)

INSTALL
   Check out the Build.PL for the list of examples that are installed in
   /etc/t.

TODO
   Any wishes || good ideas for general server tests should go here. Do you
   have any? Send it! Or even better send the .t file.

           * connect to database and check if count of rows in all table doesn't exceed some number

SEE ALSO
   http://testanything.org/,
   http://en.wikipedia.org/wiki/Test_Anything_Protocol and a book "Perl
   Testing: A Developer's Notebook"

   Test::System

   If you like automation check out also Sysadm::Install for system admin
   scripting.

AUTHOR
   Jozef Kutej

COPYRIGHT AND LICENSE
   Copyright (C) 2006 by Jozef Kutej

   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself, either Perl version 5.8.4 or, at
   your option, any later version of Perl 5 you may have available.