if (isFinished()) {
if ((getState() == State::Failed) && (!testManager.getDumpFailedReports())) return;
- if ((getState() == State::Success) && (!testManager.getDumpSuccessfulReports())) return;
+ if ((getState() == State::Success) && (!testManager.getDumpSuccessReports())) return;
// report file name: cycle-<cycle id>.testcase-<test case id>.xml
// FORMAT: We tabulate the cycle and test case in order to ease ordering of files by mean ls:
}
void TestCase::assertInitialized() const throw(anna::RuntimeException) {
- if (a_state != State::Initialized)
- throw anna::RuntimeException(anna::functions::asString("Cannot program anymore. The test case %llu was started. You must reset it to append new steps.", a_id), ANNA_FILE_LOCATION);
+ if (isFinished())
+ throw anna::RuntimeException(anna::functions::asString("Cannot program anymore. The test case %llu has finished. You must reset it to append new steps (or do it during execution, which is also allowed).", a_id), ANNA_FILE_LOCATION);
}
void TestCase::assertMessage(const anna::DataBlock &db, bool toEntity) throw(anna::RuntimeException) {
bool isRequest = anna::diameter::codec::functions::isRequest(db);
- bool registerSessionId = ((isRequest && toEntity) || (!isRequest && !toEntity) /* (*) */);
- // (*) we register answers Session-Id assuming that we will know the Session-Id values created by the client (OCS)
- // This is another solution for TODO(***) regarding diameter server testing. No tsure about the final implementation.
+ bool registerKeys = ((isRequest && toEntity) || (!isRequest && !toEntity) /* (*) */);
+ // (*) we register answers Session-Id "assuming" that we will know the Session-Id values created by the client.
+ // This is another solution regarding diameter server testing. No sure about the final implementation.
+ // We will help registering also subscriber data, because certain messages (i.e. SLR) coming from clients could
+ // have specific Session-Id value (unknown at test programming), and normally are identified by subscriber.
// Check hop-by-hop:
if (isRequest) {
a_hopByHops[hbh] = NULL; // may be assigned to a wait condition
}
- if (registerSessionId)
- TestManager::instantiate().registerSessionId(anna::diameter::helpers::base::functions::getSessionId(db), this);
+ if (registerKeys) {
+ TestManager &testManager = TestManager::instantiate();
+ testManager.registerSessionId(anna::diameter::helpers::base::functions::getSessionId(db), this);
+
+
+ std::string subscriberId = anna::diameter::helpers::dcca::functions::getSubscriptionIdData(db, anna::diameter::helpers::dcca::AVPVALUES__Subscription_Id_Type::END_USER_E164);
+ if (subscriberId == "") // try with IMSI
+ subscriberId = anna::diameter::helpers::dcca::functions::getSubscriptionIdData(db, anna::diameter::helpers::dcca::AVPVALUES__Subscription_Id_Type::END_USER_IMSI);
+
+ if (subscriberId != "")
+ testManager.registerSubscriberId(subscriberId, this);
+ }
}
void TestCase::addTimeout(const anna::Millisecond &timeout) throw(anna::RuntimeException) {
addStep(step);
}
-void TestCase::addSendxml2e(const anna::DataBlock &db, RealmNode *realm, int stepNumber) throw(anna::RuntimeException) {
+void TestCase::addSendxml2e(const anna::DataBlock &db, OriginHost *host, int stepNumber) throw(anna::RuntimeException) {
assertInitialized();
assertMessage(db, true /* to entity */);
TestStepSendxml2e *step = new TestStepSendxml2e(this);
step->setMsgDataBlock(db);
- step->setRealmNode(realm);
+ step->setOriginHost(host);
step->setWaitForRequestStepNumber(stepNumber); // -1 means, no reference
addStep(step);
}
-void TestCase::addSendxml2c(const anna::DataBlock &db, RealmNode *realm, int stepNumber) throw(anna::RuntimeException) {
+void TestCase::addSendxml2c(const anna::DataBlock &db, OriginHost *host, int stepNumber) throw(anna::RuntimeException) {
assertInitialized();
assertMessage(db, false /* to client */);
TestStepSendxml2c *step = new TestStepSendxml2c(this);
step->setMsgDataBlock(db);
- step->setRealmNode(realm);
+ step->setOriginHost(host);
addStep(step);
}