First go at complete test framework