bringing in testkit tools
[feisty_meow.git] / testkit / doc / testkit_reference.html
diff --git a/testkit/doc/testkit_reference.html b/testkit/doc/testkit_reference.html
new file mode 100644 (file)
index 0000000..ea9e922
--- /dev/null
@@ -0,0 +1,268 @@
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <title>TestKit Reference Manual</title>
+  </head>
+  <body vlink="purple" link="blue" lang="EN-US">
+    <h1 style=" text-align:center">Feisty Meow® TestKit Reference Manual</h1>
+    <address style=" text-align:center">Version 1.0 ― Updated August 12 2020</address>
+    <h1>The Feisty Meow® TestKit</h1>
+    <p>The TestKit is a collection of scripts that leverages the ShUnit unit
+      testing environment.&nbsp; TestKit provides a pattern for creating test
+      suites using a simple configuration file approach.&nbsp; Full reporting on
+      test runs is provided in a convenient tabular format.</p>
+    <p>Generally, writing a test script using the TestKit is a matter of
+      minutes.&nbsp; A blank test is provided as a template, and that can be
+      expanded with whatever test steps are needed.</p>
+    <p>TestKit (and ShUnit) are implemented in the GNU Bash script language, but
+      a TestKit test script can invoke external applications, written in
+      whatever programming language or scripting tool is desired, using the
+      standard POSIX interfaces.<br>
+    </p>
+    <h2> Getting the TestKit</h2>
+    <p>Follow these steps to download and install the Feisty Meow TestKit:<br>
+    </p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3"><span style="font-family: monospace;">sudo
+          mkdir /opt/feistymeow.org<br>
+          sudo chown -R $USER /opt/feistymeow.org<br>
+          cd /opt/feistymeow.org<br>
+          git clone git://feistymeow.org/feisty_meow</span></p>
+    </div>
+    <h3>Preparing the TestKit on Linux</h3>
+    <p>Linux is the easiest environment for running the TestKit, given that the
+      tests were built using the bash shell within a Linux environment.&nbsp; If
+      some of the packages used in the tests are missing (such as expect and gnu
+      awk), these may need to be installed from the appropriate repository for
+      your Linux distribution.&nbsp; Most distributions include these packages
+      automatically however.</p>
+    <h3> Preparing the TestKit on Mac OS X</h3>
+    <p>The test suite runs well on modern Macs with Intel CPUs.&nbsp; Due to
+      some differences in the versions of a few applications on the Mac, some
+      GNU tools may need to be installed to run the TestKit.&nbsp; These are
+      available via the Brew installer tool. <br>
+    </p>
+    <h3> </h3>
+    <h3> Preparing the TestKit on MS-Windows</h3>
+    <p>The Cygwin Unix emulation system is required to run the TestKit on
+      Windows.&nbsp; This package is available at: <a href="http://cygwin.com/install.html">http://cygwin.com/install.html</a></p>
+    <p>The default packages selected by Cygwin are the starting point of the
+      install.&nbsp; In addition to those packages, the following packages are
+      also required (see list below).&nbsp; Rather than using the cygwin setup
+      program for this task, the next section describes how to install Cygwin
+      with the apt-cyg tool.&nbsp; Apt-cyg is the preferred method, since it
+      involves less interaction with the somewhat clunky Cygwin installer.&nbsp;
+      If necessary, it is possible to install all the packages without apt-cyg
+      just by using the Cygwin setup program.&nbsp; To find each of these
+      packages more easily, try switching the “View” button on the Cygwin setup
+      program to “Full” to get an alphabetized list.</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:0in;
+margin-left:0in;margin-bottom:.0001pt;background:#DDD9C3">bc <br>
+        crypt <br>
+        cygutils <br>
+        emacs <br>
+        email <br>
+        expect <br>
+        gcc-g++<br>
+        git <br>
+        gitk <br>
+        gvim <br>
+        inetutils <br>
+        less <br>
+        make <br>
+        mutt <br>
+        ncftp <br>
+        openssh <br>
+        perl <br>
+        procps<br>
+        python <br>
+        sharutils <br>
+        shutdown <br>
+        subversion <br>
+        time <br>
+        unzip <br>
+        util-linux <br>
+        vim<br>
+        wget<br>
+        xinit <br>
+        xterm <br>
+        zip </p>
+    </div>
+    <p>&nbsp;</p>
+    <h3>Apt-cyg Installation Process</h3>
+    <p>The apt-cyg program brings the convenience of the Debian and Ubuntu
+      installer application (apt-get) to Cygwin.&nbsp; This program does require
+      a couple of additional setup steps.&nbsp; This material is drawn from the
+      apt-cyg home page: <a href="https://github.com/transcode-open/apt-cyg">https://github.com/transcode-open/apt-cyg</a></p>
+    <p class="MsoListParagraphCxSpFirst" style="text-indent:-.25in">1.&nbsp;
+      Install the basic Cygwin packages with setup.exe (rather than the long
+      list above), but add these two packages which are not selected by default:</p>
+    <ul>
+      <li>subversion</li>
+      <li>wget</li>
+    </ul>
+    <p class="MsoListParagraphCxSpLast" style="text-indent:-.25in">2.&nbsp;&nbsp;
+      Download and install the apt-cyg program from within a Cygwin bash prompt:</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.5in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">lynx -source
+        rawgit.com/transcode-open/apt-cyg/master/apt-cyg &gt; apt-cyg<br>
+        install apt-cyg /bin</p>
+    </div>
+    <p class="MsoListParagraph" style="text-indent:-.25in">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      Install the packages required for the TestKit:</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.5in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:0in;
+margin-left:0in;margin-bottom:.0001pt;background:#DDD9C3">apt-cyg install bc
+        crypt cygutils emacs email expect gcc-g++ git gitk gvim \<br>
+        &nbsp; inetutils less make mutt ncftp openssh perl procps python
+        sharutils \<br>
+        &nbsp; shutdown time unzip util-linux vim xinit xterm zip</p>
+    </div>
+    <p class="MsoListParagraph" style="text-indent:-.25in">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      The installation will run for a while but then should conclude with all
+      required packages installed.</p>
+    <h2> Setting up a Test Suite</h2>
+    <p>Tunning tests in TestKit uses a configuration file called
+      “testkit.config” to define the environment and, optionally, which test
+      scripts to run.&nbsp; This file is the main switchboard that defines where
+      the tests will find users, home directories, queues, containers, and so
+      forth. &nbsp;The configuration file can be specified via the environment
+      variable “TESTKIT_CFG_FILE”.&nbsp; This variable can be set to any
+      location, enabling the configuration file to reside in a directory other
+      than the toolkit folder.&nbsp; If the variable is not defined, then the
+      testing config file defaults to “$TESTKIT_ROOT/testkit.config”.</p>
+    The TESTKIT_ROOT variable is frequently referred to in command
+    examples.&nbsp; It is set up automatically by the prepare_tools script (see
+    below).
+    <h2>Running a Test Suite</h2>
+    <p>Once the TestKit configuration file has been established, running a whole
+      test suite can be accomplished with this command:<br>
+    </p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">&nbsp;bash <i>{TESTKIT_FOLDER}</i>/test_driver.sh
+        </p> </div>
+    <p>Where the <i>{TESTKIT_FOLDER}</i> should be replaced with whatever path
+      the TestKit is stored in.</p>
+    <p>Alternatively, if the TESTKIT_ROOT folder is already established, the
+      tests can be run with:</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">&nbsp;bash "$TESTKIT_ROOT/test_driver.sh"</p>
+    </div>
+    <p></p>
+    <h3> What to Expect From the Test Run</h3>
+    <p>The test_driver.sh script will output a few informative lines of text
+      before printing a table of the tests that it intends to run.</p>
+    <p>After the test plan is shown, all of the tests listed will be executed in
+      the order they are listed in, and they will each produce output.&nbsp;
+      Each individual test (usually a separate bash script) produces a summary
+      at the end of its run with a count of tests and a report of the tests
+      success or failure.</p>
+    <p>At the end of all the tests in the suite, the table of tests is printed
+      again with the results for each test.&nbsp; For example, this is a test
+      run that had no errors in any test (that's good, since it is our super
+      simple example test):</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">$ cd
+      $FEISTY_MEOW_APEX/testkit<br>
+      $ ./test_driver.sh summary<br>
+      ===========================================================<br>
+      Testkit environment loaded.<br>
+      TESTKIT_ROOT=/opt/feistymeow.org/feisty_meow/testkit<br>
+      TESTKIT_CFG_FILE=/opt/feistymeow.org/feisty_meow/testkit/testkit.config<br>
+      TMP=/Users/fred/.tmp<br>
+      TEST_TEMP=/Users/fred/.tmp/testkit_logs_fred<br>
+      ===========================================================<br>
+      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>
+      TestKit running from: /opt/feistymeow.org/feisty_meow/testkit<br>
+      TestKit config file:
+      /opt/feistymeow.org/feisty_meow/testkit/testkit.config<br>
+      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>
+      Full set of tests:<br>
+      1: /opt/feistymeow.org/feisty_meow/testkit/examples/blank_test.sh<br>
+      <br>
+      ======================================================================<br>
+      Wed Aug 12 14:11:00 EDT 2020: Now running test 1:
+      /opt/feistymeow.org/feisty_meow/testkit/examples/blank_test.sh<br>
+      &nbsp; Test output file:
+      /Users/fred/.tmp/testkit_logs_fred/run_2020_08_12/test_log.vKf7J3<br>
+      OK: successful test run for test
+      /opt/feistymeow.org/feisty_meow/testkit/examples/blank_test.sh<br>
+      <br>
+      <br>
+      Results table for this test run:<br>
+      <br>
+      01: OKAY -- /opt/feistymeow.org/feisty_meow/testkit/examples/blank_test.sh<br>
+      <br>
+      Total testing duration: 00:00 hh:mm (1 seconds total)<br>
+      OK: All 1 Tests Ran Successfully.<br>
+      <br>
+      <br>
+      <br>
+      <br>
+      dd<br>
+      <br>
+    </div>
+    <p class="Textbody">The above shows the "summary" view, which does not allow
+      the individual tests to output to the console.&nbsp; If the "summary" flag
+      is not passed, then the output from all the test runs is also shown.</p>
+    <p class="Textbody">Even when the summary view is used, all output files can
+      be examined after the run.&nbsp; For example, in the above, the mentioned
+      output file "test_log.vKf7J3" can be checked to see exactly what happened
+      during the test.</p>
+    <p class="Textbody">A test with a failure in it will have “FAIL” next to the
+      test that failed, and the final output line will start with
+      “FAILURE”.&nbsp; For example:</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">01: FAIL –
+        AckPfft_Tests/Gorp_Tests/deslagToaster.sh<br>
+        02: OKAY – AckPfft_Tests/Gorp_Tests/spumeMerchantry.sh<br>
+        03: OKAY – AckPfft_Tests/Gorp_Tests/octopusLauncher.sh<br>
+        …<br>
+        22: OKAY -- Snargle_Tests/scramTests/scramForPetunias.sh</p>
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">FAILURE: 1 Tests Failed out of 22 Tests.</p>
+    </div>
+    <p>A failed test will also return a non-zero value from the test execution,
+      enabling the run of a test suite to be tested for success when launched
+      externally, such as from a continuous integration system.</p>
+    <h2>Loading the TestKit Environment</h2>
+    <p>If one wishes to run individual tests within the test suite, rather than
+      the entire suite, this is done by loading the TestKit variables into the
+      current shell environment, like so:</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
+background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">cd <i>{TESTKIT_FOLDER}</i>&nbsp; # replace
+        with actual location of TestKit.<br>
+        source prepare_tools.sh prepare_tools.sh<br>
+        source $TESTKIT_ROOT/library/process_configuration.sh<br>
+        define_and_export_variables</p>
+      # Show the important variables.<br>
+      var $TESTKIT_ROOT $TESTKIT_CFG_FILE</div>
+    <p>After loading the TestKit environment, one can execute a specific test
+      and see its results, for example:</p>
+    <div style="border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;background:#DDD9C3;margin-left:.1in;margin-right:.1in">
+      <p class="Code-Box" style="margin-top:6.0pt;margin-right:0in;margin-bottom:6.0pt;
+margin-left:0in;background:#DDD9C3">cd examples<br>
+        bash blank_test.sh</p>
+    </div>
+    <p>The test will run and output its results to the console (that is, output
+      is sent to standard out and standard error, to be more precise).</p>
+    <p><br>
+    </p>
+    <h3></h3>
+  </body>
+</html>