bool Group::GetTestDependency(TestRef test, TestRef &cfgDepend, TestIteratorType &seqDepend) { // Assume failure, ignore cfgDepend & seqDepend cfgDepend = test; seqDepend = -1; if (test.group == mGrpNum) { if ((test.yLev == 0) && (test.zLev == 0)) { LOG_NRM("Targeted test has zero dependencies"); return true; } else if (test.zLev == 0) { cfgDepend.Init(test.group, test.xLev, 0, 0); if (TestExists(cfgDepend)) { LOG_NRM("Targeted test has a configuration dependency"); return true; } else { LOG_ERR("Unable to locate configuration dependency"); return false; } } else { TestRef seqTest(test.group, test.xLev, test.yLev, 0); if (TestRefToIterator(seqTest, seqDepend)) { LOG_NRM("Targeted test has a sequence dependency"); } else { LOG_ERR("Unable to locate sequence test dependency"); return false; } // There may or may not be a configuration dependency if (test.yLev != 0) { cfgDepend.Init(test.group, test.xLev, 0, 0); if (TestExists(cfgDepend)) { LOG_NRM("Targeted test has a configuration dependency"); return true; } else { LOG_ERR("Unable to locate configuration dependency"); return false; } } return true; } } LOG_ERR("Targeted test does not belong to this group: %ld", mGrpNum); return false; }
bool Group::GetTestSet(TestRef &target, TestSetType &dependencies, int64_t &tstIdx) { TestRef thisTest; dependencies.clear(); tstIdx = -1; if (target.group != mGrpNum) { LOG_ERR("Targeted test does not belong to this group: %ld", mGrpNum); return false; } else if ((target.xLev != UINT_MAX) && (target.yLev != UINT_MAX) && (target.zLev != UINT_MAX)) { LOG_DBG("Requesting dependency test set for test %ld:%ld.%ld.%ld", target.group, target.xLev, target.yLev, target.zLev); if ((target.yLev == 0) && (target.zLev == 0)) { LOG_NRM("Targeted test has zero dependencies"); } else if (target.zLev == 0) { // There is a configuration dependency for the targeted test thisTest.Init(target.group, target.xLev, 0, 0); if (TestExists(thisTest)) { LOG_NRM("Targeted test has a configuration dependency"); LOG_DBG("Adding test: %s", thisTest.ToString().c_str()); dependencies.push_back(thisTest); } else { LOG_ERR("Unable to locate configuration dependency"); return false; } } else { // There is a sequence dependency for the targeted test if (target.yLev != 0) { // There is a config dependency in addition to a seq dependency thisTest.Init(target.group, target.xLev, 0, 0); if (TestExists(thisTest)) { LOG_NRM("Targeted test has a configuration dependency"); LOG_DBG("Adding test: %s", thisTest.ToString().c_str()); dependencies.push_back(thisTest); } else { LOG_ERR("Unable to locate configuration dependency"); return false; } } // Now add in all the sequence test dependencies; find the root // sequence test case first and traverse to the targeted test TestIteratorType seqIter; TestIteratorType targetIter; TestRef rootSeq(target.group, target.xLev, target.yLev, 0); if (TestRefToIterator(rootSeq, seqIter)) { LOG_NRM("Targeted test has a sequence dependency"); if (TestRefToIterator(target, targetIter)) { for (TestIteratorType i = seqIter; i < targetIter; i++) { if (IteraterToTestRef(i, thisTest) == false) { LOG_ERR("Unable to locate sequence dependency"); return false; } LOG_DBG("Adding test: %s", thisTest.ToString().c_str()); dependencies.push_back(thisTest); } } else { LOG_ERR("Unable to locate targeted test"); return false; } } else { LOG_ERR("Unable to locate sequence test dependency"); return false; } } LOG_DBG("Adding test: %s", thisTest.ToString().c_str()); dependencies.push_back(target); } else { LOG_DBG("Requesting dependency set for group %ld", mGrpNum); TestIteratorType tstIter = 0; while (IteraterToTestRef(tstIter++, thisTest)) { LOG_DBG("Adding test: %s", thisTest.ToString().c_str()); dependencies.push_back(thisTest); } } tstIdx = 0; LOG_DBG("dependencies(size)=%ld, tstIdx=%ld", dependencies.size(), tstIdx); return true; }