Test bed prepare script

Creates a master test plan with child test plans & runs
Prepares a set of test cases with random tags & testers
Links test cases to all test plans and test runs

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
Performance test cases

Configuration example
Internal utility for printing time
Initial set of performance test cases

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
Tag class implementation

New Tag class with support for caching implemented
PlanTags, RunTags and CaseTags containers adjusted
Relevant Tag test cases and create example updated

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
MultiCall support

Implemented global functions for handling multicall mode
Support in TestPlan, TestRun, TestCase and CaseRun update
Added test case measuring CaseRun.status update performance

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
Skip performance tests when in regular mode
Common caching support in the Nitrate class

Caching now handled in Nitrate instead of separate implementations
New caching class methods: _cache_lookup() and _is_cached()
Attribute initialization moved to a separate _init() method
Many adjustments in handling object fetching and initialization
A bunch of new test cases covering the caching functionality

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
Persistent cache implementation

New Cache class handling persistence and expiration
Various class adjustments to handle object expiration
Cache level detection from the user config file
Added detailed documentation for all cache features

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
Container initialization

Suport for direct initialization of container objects
Implemented direct init for PlanTags, RunTags and CaseTags

Signed-off-by: Petr Šplíchal <psplicha@redhat.com>
Persistent caching for all Container classes
Move constants to the top, expiration adjustments

All global constants now reside at the top of the code
PlanType default expiration set to NEVER_EXPIRE
CaseRun default expiration is now NEVER_CACHE
Common identifier width handling
Document logging with custom level, some cleanup
Fix problem with restoring containers from the cache

When restoring the container from the cache, unpickling failed
because of trying to construct set() of objects which were not
fully rebuild yet (__hash__ failed because of missing self._id).

So we need to convert containers into list of ids before the
cache dump and instantiate the objects back after cache restore.
In addition, expiration setup moved to a separate method setup()
Correctly handle modified objects with caching

Remove the implicit update() in __del__ (unreliable, not supported)
Update the object._time_cached timestamp when updating to server
When checking cache for expired objects remove modified as well
Use temporary cache file for running the test suite
New method Cache.update() for group updates

The method updates all modified objects in the cache.  It uses
MultiCall to perform the update which can significantly speed
up things when compared to updating each object separately.
Move server communication debugging to lower level

To reduce the noise when debugging, all debug messages containing
data communicated to/from the server are now logged in level 3,
that is accessible using DEBUG=3 (which prints everything).
Object fetching cleanup and improved _is_cached()

Clearly distinguish between cached & fetched, document.
Handle fetch timestamp saving on a single place.
Improved _is_cached() now checks fetched status as well.
Containers now prevent fetching items one-by-one.
New utility function header() for printing simple headers
Improved auto-plural in listed() for words ending with 's'