Project #4 - Remote Test Harness

Version 1.0,
Due Date: 12:00 am, Sunday, Wk10

Purpose:

Developing software consisting of multiple packages requires frequent testing. If the software has complex features, we want to build it incrementally. First design and implement a very basic core with a small number of packages, then add features one-at-a-time by adding new packages, or adding a few lines of code to an existing package. Each time we add new functionality, we build and test. That way, if additions break existing code, we know where to look, e.g., in the newly added few lines of code. A test harness allows us to use that incremental process efficiently.
A test harness should allow us to define and aggregate many small tests, each of which run with exception handling and results logging. Our goal is to do that without littering our code with many try-catch blocks and many logging statements. The technique we use to do that is to define, in the test harness, an execution function that accepts a callable test object2 - function pointer, functor, or lambda - and invokes the object within the scope of a try block. A catch clause displays exceptions and returns false to indicate test failure. Otherwise the executor returns the test predicate returned by the test object, e.g., true or false for pass or fail.
The test executor also provides results logging with predefined messages. Your test harness should define several levels of loggin, e.g., just pass or fail, or more detailed, test-specific messages, or very detailed debugging messages, which display a time-date stamp and the values of key test-defined variables.
The test harness provides a mechanism to link any number of tests into a test sequence. Typically, during development, we keep adding tests for each new feature, and can rerun tests just for that feature, or all the tests of all the features, to insure that the new addition didn't break existing functionality.
In this project you will develop a Client, with Graphical User Interface, and a MockRepository1. You will then bind these together with the TestHarness and Communication channel you developed in Project #3.

Requirements:

Your Remote TestHarness Project:
  1. Shall be prepared using the latest version of Visual Studio, and written in the standard C++ programming language, using the standard C++ libraries.
  2. Shall use Visual Studio, Community Edition available at no cost.
  3. Shall, using the Client GUI, allow users to enter the system with a user name and password and only a user with administrator privileges shall be able to create new users.
  4. Shall provide the following user options:
    • Upload files from a Client to the MockRepository
    • Display MockRepository directories
    • Download a file or complete directory to a Client
    • Search for specified directories or files
  5. Shall support building a TestRequest by selecting library files from the repository using the Client GUI.
  6. Shall provide facilities to transfer a specified TestRequest from the MockRepository to the TestHarness.
  7. The TestHarness child Testers shall, on completion of processing of a TestRequest, send a named, time-date stamped, test log to the MockRepository and a test status message to the Client requesting the test.
  8. Shall support browsing test logs in the MockRepository from a Client GUI.

  1. The MockRepository is a relatively simple manager of a directory sub-tree. It does no versioning, nor provide checkin and checkout facilities.

What you need to know:

In order to successfully meet these requirements you will need to know:
  1. How to integrate several relatively complex sets of packages into a solution holding projects for each process you need.