Changes for Sy
[anna.git] / example / diameter / launcher / testing / TestCase.cpp
index 5678ff0..087e29b 100644 (file)
@@ -230,9 +230,11 @@ void TestCase::assertInitialized() const throw(anna::RuntimeException) {
 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 sure 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) {
@@ -242,8 +244,18 @@ void TestCase::assertMessage(const anna::DataBlock &db, bool toEntity) throw(ann
     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) {