Browse Source

[4264] New unit-test for relay4 expression added.

Tomek Mrugalski 9 years ago
parent
commit
9789534449
1 changed files with 50 additions and 0 deletions
  1. 50 0
      src/lib/eval/tests/token_unittest.cc

+ 50 - 0
src/lib/eval/tests/token_unittest.cc

@@ -62,6 +62,15 @@ public:
         pkt4_->addOption(rai);
         pkt4_->addOption(rai);
     }
     }
 
 
+    /// @brief Convenience function. Removes token and values stacks.
+    void clearStack() {
+        while (!values_.empty()) {
+            values_.pop();
+        }
+
+        t_.reset();
+    }
+
     TokenPtr t_; ///< Just a convenience pointer
     TokenPtr t_; ///< Just a convenience pointer
 
 
     ValueStack values_; ///< evaluated values will be stored here
     ValueStack values_; ///< evaluated values will be stored here
@@ -653,3 +662,44 @@ TEST_F(TokenTest, relayOptionNoRai) {
     // so the expression should evaluate to ""
     // so the expression should evaluate to ""
     EXPECT_EQ("", values_.top());
     EXPECT_EQ("", values_.top());
 }
 }
+
+// This test checks that only the RAI is searched for the requested
+// sub-option.
+TEST_F(TokenTest, relayRAIOnly) {
+
+    // Insert relay option with sub-options 1 and 13
+    insertRelay4Option();
+
+    // Add options 13 and 70 to the packet.
+    OptionPtr opt13(new OptionString(Option::V4, 13, "THIRTEEN"));
+    OptionPtr opt70(new OptionString(Option::V4, 70, "SEVENTY"));
+    pkt4_->addOption(opt13);
+
+    // The situation is as follows:
+    // Packet:
+    //  - option 13 (containing THIRTEEN)
+    //  - option 82 (rai)
+    //      - option 1 (containing "one")
+    //      - option 13 (containing "thirteen")
+
+    // Let's try to get option 13. It should get the one from RAI
+    ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(13, TokenOption::TEXTUAL)));
+    EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+    ASSERT_EQ(1, values_.size());
+    EXPECT_EQ("thirteen", values_.top());
+
+    // Try to get option 1. It should get the one from RAI
+    clearStack();
+    ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(1, TokenOption::TEXTUAL)));
+    EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+    ASSERT_EQ(1, values_.size());
+    EXPECT_EQ("one", values_.top());
+
+    // Try to get option 70. It should fail, as there's no such
+    // sub option in RAI.
+    clearStack();
+    ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(70, TokenOption::TEXTUAL)));
+    EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+    ASSERT_EQ(1, values_.size());
+    EXPECT_EQ("", values_.top());
+}