(or, if all you have is a hammer, everything looks like a nail)
Introduction – The Problem
At Reprise Software, our main product, the Reprise License Manager (RLM) runs on many different platforms (19 at last count). Since our product is a client-server product with an API, we have a set of regression tests that we run both during development and at each release.
One issue of testing a license manager is the desirability to run tests that both succeed in checking out licenses from a license server as well as tests that fail. Given that our product (RLM) is inherently a network-based product, and also given that clients can broadcast to discover a license server, our experience is that running regression tests on multiple machines on the same network at the same time will result in some number of checkouts succeeding that should have failed.
In the past, we have worked around this problem by timing the starts of our regression tests suites so that the individual tests would not overlap each other and yield incorrect results (in this case, incorrect results from the test environment, not from software faults). While this works fine in a development environment, it is extremely awkward during a release cycle when the goal is to build and test many platforms simultaneously.
The Solution – License Management
Since the regression tests are primarily run by a single user, the solution was to create a set of licenses, one per test, then use the License Manager as a Load Balancer to serve them with a single instance per license, nodelocked to the username of the person running the test. Each test checks out it’s own license, and if the license request is queued, the test waits until granted. Now, the tests synchronize across all platforms with the same test never running on multiple platforms at the same time. Different sets of licenses are served for different network segments.
We serve the licenses using RLMCloud, so that the license server is always available, even when development machines go down. An extra benefit is that our normal regression tests also test the RLMCloud servers at the same time. Win win.