logCheckVerbose(false);
}
+ /// @brief Test evaluation.
+ ///
+ /// Check that evaluation does not fail and returns 0.
+ ///
+ /// @param token the pointer to the token to evaluate
+ /// @param pkt the packet (*pkt4_ or *pkt6_)
+ /// @param values the stack of values (values_)
+ void testEvaluate(const TokenPtr& token, Pkt& pkt, ValueStack& values) {
+ unsigned next(123);
+ ASSERT_NO_THROW(next = token->evaluate(pkt, values));
+ EXPECT_EQ(0, next);
+ }
+
/// @brief Inserts RAI option with several suboptions
///
/// The structure inserted is:
test_rep)));
// We should be able to evaluate it
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// We should have one value on the stack
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenRelay6Field(test_level, test_field)));
// We should be able to evaluate it
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// We should have one value on the stack
ASSERT_EQ(1, values_.size());
EXPECT_THROW(t_->evaluate(*pkt4_, values_), EvalTypeError);
ASSERT_EQ(0, values_.size());
} else {
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// verify results
ASSERT_EQ(1, values_.size());
EXPECT_THROW(t_->evaluate(*pkt4_, values_), EvalTypeError);
ASSERT_EQ(0, values_.size());
} else {
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// verify results
ASSERT_EQ(1, values_.size());
void evaluate(Option::Universe u, std::string expected_result) {
switch (u) {
case Option::V4:
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
break;
case Option::V6:
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
break;
default:
ADD_FAILURE() << "Invalid universe specified.";
EXPECT_EQ(0, t_->getLabel());
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenString(data_str)));
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenString("foo")));
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenString(data_str)));
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
// Make sure that tokens can be evaluated without exceptions,
// and verify the debug output
- ASSERT_NO_THROW(empty->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(bad->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(nodigit->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(baddigit->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(bell->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(foo->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(cookie->evaluate(*pkt4_, values_));
+ testEvaluate(empty, *pkt4_, values_);
+ testEvaluate(bad, *pkt4_, values_);
+ testEvaluate(nodigit, *pkt4_, values_);
+ testEvaluate(baddigit, *pkt4_, values_);
+ testEvaluate(bell, *pkt4_, values_);
+ testEvaluate(foo, *pkt4_, values_);
+ testEvaluate(cookie, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(7, values_.size());
ASSERT_NO_THROW(cookie.reset(new TokenHexString("0x63825363")));
// Make sure that tokens can be evaluated without exceptions.
- ASSERT_NO_THROW(empty->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(bad->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(nodigit->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(baddigit->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(bell->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(foo->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(cookie->evaluate(*pkt6_, values_));
+ testEvaluate(empty, *pkt6_, values_);
+ testEvaluate(bad, *pkt6_, values_);
+ testEvaluate(nodigit, *pkt6_, values_);
+ testEvaluate(baddigit, *pkt6_, values_);
+ testEvaluate(bell, *pkt6_, values_);
+ testEvaluate(foo, *pkt6_, values_);
+ testEvaluate(cookie, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(7, values_.size());
values_.push("LoWeR");
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
values_.push(data_str);
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
values_.push("uPpEr");
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
values_.push(data_str);
// Make sure that the token can be evaluated without exceptions.
- ASSERT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(ip6.reset(new TokenIpAddress("2001:db8::1")));
// Make sure that tokens can be evaluated without exceptions.
- ASSERT_NO_THROW(ip4->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(ip6->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(bad4->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(bad6->evaluate(*pkt6_, values_));
+ testEvaluate(ip4, *pkt4_, values_);
+ testEvaluate(ip6, *pkt6_, values_);
+ testEvaluate(bad4, *pkt4_, values_);
+ testEvaluate(bad6, *pkt6_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(4, values_.size());
bytes = IOAddress(value).toBytes();
values_.push(std::string(bytes.begin(), bytes.end()));
- EXPECT_NO_THROW(address->evaluate(*pkt4_, values_));
+ testEvaluate(address, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
bytes = IOAddress(value).toBytes();
values_.push(std::string(bytes.begin(), bytes.end()));
- EXPECT_NO_THROW(address->evaluate(*pkt4_, values_));
+ testEvaluate(address, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(2, values_.size());
values_.push(std::string());
- EXPECT_NO_THROW(address->evaluate(*pkt4_, values_));
+ testEvaluate(address, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(3, values_.size());
values_.push(
std::string(const_cast<const char*>(reinterpret_cast<char*>(&data)), sizeof(int8_t)));
- EXPECT_NO_THROW(int8token->evaluate(*pkt4_, values_));
+ testEvaluate(int8token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(1, values_.size());
values_.push(
std::string(const_cast<const char*>(reinterpret_cast<char*>(&i16)), sizeof(int16_t)));
- EXPECT_NO_THROW(int16token->evaluate(*pkt4_, values_));
+ testEvaluate(int16token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(2, values_.size());
values_.push(
std::string(const_cast<const char*>(reinterpret_cast<char*>(&i32)), sizeof(int32_t)));
- EXPECT_NO_THROW(int32token->evaluate(*pkt4_, values_));
+ testEvaluate(int32token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(3, values_.size());
values_.push(
std::string(const_cast<const char*>(reinterpret_cast<char*>(&data)), sizeof(uint8_t)));
- EXPECT_NO_THROW(uint8token->evaluate(*pkt4_, values_));
+ testEvaluate(uint8token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(4, values_.size());
values_.push(
std::string(const_cast<const char*>(reinterpret_cast<char*>(&ui16)), sizeof(uint16_t)));
- EXPECT_NO_THROW(uint16token->evaluate(*pkt4_, values_));
+ testEvaluate(uint16token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(5, values_.size());
values_.push(
std::string(const_cast<const char*>(reinterpret_cast<char*>(&ui32)), sizeof(uint32_t)));
- EXPECT_NO_THROW(uint32token->evaluate(*pkt4_, values_));
+ testEvaluate(uint32token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(6, values_.size());
value = "";
values_.push(value);
- EXPECT_NO_THROW(int8token->evaluate(*pkt4_, values_));
+ testEvaluate(int8token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(7, values_.size());
values_.push(value);
- EXPECT_NO_THROW(int16token->evaluate(*pkt4_, values_));
+ testEvaluate(int16token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(8, values_.size());
values_.push(value);
- EXPECT_NO_THROW(int32token->evaluate(*pkt4_, values_));
+ testEvaluate(int32token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(9, values_.size());
values_.push(value);
- EXPECT_NO_THROW(uint8token->evaluate(*pkt4_, values_));
+ testEvaluate(uint8token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(10, values_.size());
values_.push(value);
- EXPECT_NO_THROW(uint16token->evaluate(*pkt4_, values_));
+ testEvaluate(uint16token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(11, values_.size());
values_.push(value);
- EXPECT_NO_THROW(uint32token->evaluate(*pkt4_, values_));
+ testEvaluate(uint32token, *pkt4_, values_);
// Check that the evaluation put its value on the values stack.
ASSERT_EQ(12, values_.size());
ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::TEXTUAL)));
// This should evaluate to the content of the option 100 (i.e. "hundred4")
- ASSERT_NO_THROW(found->evaluate(*pkt4_, values_));
+ testEvaluate(found, *pkt4_, values_);
// This should evaluate to "" as there is no option 101.
- ASSERT_NO_THROW(not_found->evaluate(*pkt4_, values_));
+ testEvaluate(not_found, *pkt4_, values_);
// There should be 2 values evaluated.
ASSERT_EQ(2, values_.size());
ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::HEXADECIMAL)));
// This should evaluate to the content of the option 100 (i.e. "hundred4")
- ASSERT_NO_THROW(found->evaluate(*pkt4_, values_));
+ testEvaluate(found, *pkt4_, values_);
// This should evaluate to "" as there is no option 101.
- ASSERT_NO_THROW(not_found->evaluate(*pkt4_, values_));
+ testEvaluate(not_found, *pkt4_, values_);
// There should be 2 values evaluated.
ASSERT_EQ(2, values_.size());
ASSERT_NO_THROW(found.reset(new TokenOption(100, TokenOption::EXISTS)));
ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::EXISTS)));
- ASSERT_NO_THROW(found->evaluate(*pkt4_, values_));
- ASSERT_NO_THROW(not_found->evaluate(*pkt4_, values_));
+ testEvaluate(found, *pkt4_, values_);
+ testEvaluate(not_found, *pkt4_, values_);
// There should be 2 values evaluated.
ASSERT_EQ(2, values_.size());
ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::TEXTUAL)));
// This should evaluate to the content of the option 100 (i.e. "hundred6")
- ASSERT_NO_THROW(found->evaluate(*pkt6_, values_));
+ testEvaluate(found, *pkt6_, values_);
// This should evaluate to "" as there is no option 101.
- ASSERT_NO_THROW(not_found->evaluate(*pkt6_, values_));
+ testEvaluate(not_found, *pkt6_, values_);
// There should be 2 values evaluated.
ASSERT_EQ(2, values_.size());
ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::HEXADECIMAL)));
// This should evaluate to the content of the option 100 (i.e. "hundred6")
- ASSERT_NO_THROW(found->evaluate(*pkt6_, values_));
+ testEvaluate(found, *pkt6_, values_);
// This should evaluate to "" as there is no option 101.
- ASSERT_NO_THROW(not_found->evaluate(*pkt6_, values_));
+ testEvaluate(not_found, *pkt6_, values_);
// There should be 2 values evaluated.
ASSERT_EQ(2, values_.size());
ASSERT_NO_THROW(found.reset(new TokenOption(100, TokenOption::EXISTS)));
ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::EXISTS)));
- ASSERT_NO_THROW(found->evaluate(*pkt6_, values_));
- ASSERT_NO_THROW(not_found->evaluate(*pkt6_, values_));
+ testEvaluate(found, *pkt6_, values_);
+ testEvaluate(not_found, *pkt6_, values_);
// There should be 2 values evaluated.
ASSERT_EQ(2, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(13, TokenOption::TEXTUAL)));
// We should be able to evaluate it.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have one value on the stack
ASSERT_EQ(1, values_.size());
EXPECT_EQ(0, t_->getLabel());
// We should be able to evaluate it.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have one value on the stack
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(13, TokenOption::TEXTUAL)));
// We should be able to evaluate it.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have one value on the stack
ASSERT_EQ(1, values_.size());
// 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_));
+ testEvaluate(t_, *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_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("one", values_.top());
// sub option in RAI.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(70, TokenOption::TEXTUAL)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("", values_.top());
// Try to check option 1. It should return "true"
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(1, TokenOption::EXISTS)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("true", values_.top());
// Try to check option 70. It should return "false"
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenRelay4Option(70, TokenOption::EXISTS)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("false", values_.top());
// Check interface (expect eth0)
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::IFACE)));
EXPECT_EQ(0, t_->getLabel());
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ("eth0", values_.top());
// Check source (expect 10.0.0.2)
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::SRC)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
vector<uint8_t> a2 = IOAddress("10.0.0.2").toBytes();
ASSERT_EQ(a2.size(), values_.top().size());
// Check destination (expect 10.0.0.1)
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::DST)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
vector<uint8_t> a1 = IOAddress("10.0.0.1").toBytes();
ASSERT_EQ(a1.size(), values_.top().size());
// Check length (expect 249)
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::LEN)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
uint32_t length = htonl(static_cast<uint32_t>(pkt4_->len()));
ASSERT_EQ(4, values_.top().size());
// Check interface (expect eth0)
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::IFACE)));
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ("eth0", values_.top());
// Check source (expect fe80::1234)
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::SRC)));
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ(16, values_.top().size());
EXPECT_EQ(0xfe, static_cast<uint8_t>(values_.top()[0]));
// Check destination (expect ff02::1:2)
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::DST)));
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
ASSERT_EQ(1, values_.size());
vector<uint8_t> ma = IOAddress("ff02::1:2").toBytes();
ASSERT_EQ(ma.size(), values_.top().size());
// Check length (expect 16)
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt(TokenPkt::LEN)));
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
ASSERT_EQ(1, values_.size());
uint32_t length = htonl(static_cast<uint32_t>(pkt6_->len()));
ASSERT_EQ(4, values_.top().size());
// Check hardware address field.
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::CHADDR)));
EXPECT_EQ(0, t_->getLabel());
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
uint8_t expected_hw[] = { 1, 2, 3, 4, 5, 6, 7 };
ASSERT_EQ(7, values_.top().size());
// Check hlen value field.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::HLEN)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ(4, values_.top().size());
uint32_t expected_hlen = htonl(7);
// Check htype value.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::HTYPE)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ(4, values_.top().size());
uint32_t expected_htype = htonl(123);
// Check giaddr value.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::GIADDR)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
uint8_t expected_addr[] = { 192, 0, 2, 1 };
ASSERT_EQ(4, values_.top().size());
// Check ciaddr value.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::CIADDR)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
expected_addr[3] = 2;
ASSERT_EQ(4, values_.top().size());
// Check yiaddr value.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::YIADDR)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
expected_addr[3] = 3;
ASSERT_EQ(4, values_.top().size());
// Check siaddr value.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::SIADDR)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
expected_addr[3] = 4;
ASSERT_EQ(4, values_.top().size());
// Check msgtype.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::MSGTYPE)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ(4, values_.top().size());
string exp_msgtype = encode(DHCPDISCOVER);
// Check transaction-id
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::TRANSID)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
ASSERT_EQ(4, values_.top().size());
string exp_transid = encode(12345);
// Check the message type
ASSERT_NO_THROW(t_.reset(new TokenPkt6(TokenPkt6::MSGTYPE)));
EXPECT_EQ(0, t_->getLabel());
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
ASSERT_EQ(1, values_.size());
uint32_t expected = htonl(1);
EXPECT_EQ(0, memcmp(&expected, &values_.top()[0], 4));
// Check the transaction id field
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenPkt6(TokenPkt6::TRANSID)));
- EXPECT_NO_THROW(t_->evaluate(*pkt6_, values_));
+ testEvaluate(t_, *pkt6_, values_);
ASSERT_EQ(1, values_.size());
expected = htonl(12345);
EXPECT_EQ(0, memcmp(&expected, &values_.top()[0], 4));
ASSERT_NO_THROW(taddr.reset(new TokenIpAddress("1::1")));
ASSERT_NO_THROW(tequal.reset(new TokenEqual()));
- EXPECT_NO_THROW(trelay->evaluate(*pkt6_, values_));
- EXPECT_NO_THROW(taddr->evaluate(*pkt6_, values_));
- EXPECT_NO_THROW(tequal->evaluate(*pkt6_, values_));
+ testEvaluate(trelay, *pkt6_, values_);
+ testEvaluate(taddr, *pkt6_, values_);
+ testEvaluate(tequal, *pkt6_, values_);
// We should have a single value on the stack and it should be "true"
ASSERT_EQ(1, values_.size());
values_.push("foo");
values_.push("bar");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be a single value that represents
// result of "foo" == "bar" comparison.
values_.push("foo");
values_.push("foo");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be a single value that represents
// result of "foo" == "foo" comparison.
// Three should work
values_.push("0");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// As we had an empty string to start with we should have an empty
// one after the evaluate
values_.push("foobar");
values_.push("1");
values_.push("4");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have two values on the stack
ASSERT_EQ(2, values_.size());
// next the equals eval
- EXPECT_NO_THROW(tequal->evaluate(*pkt4_, values_));
+ testEvaluate(tequal, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("true", values_.top());
values_.push("foobar");
values_.push("1");
values_.push("4");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have two values on the stack
ASSERT_EQ(2, values_.size());
// next the equals eval
- EXPECT_NO_THROW(tequal->evaluate(*pkt4_, values_));
+ testEvaluate(tequal, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("false", values_.top());
// Two should work
values_.push("bar");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// Check the result
ASSERT_EQ(1, values_.size());
// Two should work
values_.push("-");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// Check the result
ASSERT_EQ(1, values_.size());
values_.push("true");
values_.push("foo");
values_.push("bar");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("foo", values_.top());
values_.push("false");
values_.push("foo");
values_.push("bar");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("bar", values_.top());
}
ASSERT_NO_THROW(t_.reset(new TokenNot()));
values_.push("true");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be the negation of the value.
ASSERT_EQ(1, values_.size());
EXPECT_EQ("false", values_.top());
// Double negation is identity.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("true", values_.top());
values_.push("true");
values_.push("false");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be a single "false" value
ASSERT_EQ(1, values_.size());
// After true and false, check false and true
values_.push("true");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("false", values_.top());
// And false and false
values_.push("false");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("false", values_.top());
values_.push("true");
values_.push("true");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be a single "true" value
ASSERT_EQ(1, values_.size());
values_.push("false");
values_.push("false");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be a single "false" value
ASSERT_EQ(1, values_.size());
values_.push("false");
values_.push("true");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// After evaluation there should be a single "true" value
ASSERT_EQ(1, values_.size());
// After false or true, checks true or false
values_.push("false");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("true", values_.top());
// And true or true
values_.push("true");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("true", values_.top());
ASSERT_NO_THROW(t_.reset(new TokenMember("foo")));
EXPECT_EQ(0, t_->getLabel());
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// the packet has no classes so false was left on the stack
ASSERT_EQ(1, values_.size());
// Add bar and retry
pkt4_->addClass("bar");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// the packet has a class but it is not foo
ASSERT_EQ(1, values_.size());
// Add foo and retry
pkt4_->addClass("foo");
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// Now the packet is in the foo class
ASSERT_EQ(1, values_.size());
EXPECT_EQ(0, t_->getLabel());
// We should be able to evaluate it.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have one value on the stack
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 15, TokenOption::TEXTUAL)));
// We should be able to evaluate it.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have one value on the stack
ASSERT_EQ(1, values_.size());
ASSERT_NO_THROW(t_.reset(new TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 13, TokenOption::TEXTUAL)));
// We should be able to evaluate it.
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
// we should have one value on the stack
ASSERT_EQ(1, values_.size());
// Let's try to get option 13. It should get the one from RAI
ASSERT_NO_THROW(t_.reset(new TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 13, TokenOption::TEXTUAL)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *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 TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 1, TokenOption::TEXTUAL)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("one", values_.top());
// sub option in RAI.
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 70, TokenOption::TEXTUAL)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("", values_.top());
// Try to check option 1. It should return "true"
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 1, TokenOption::EXISTS)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("true", values_.top());
// Try to check option 70. It should return "false"
clearStack();
ASSERT_NO_THROW(t_.reset(new TokenSubOption(DHO_DHCP_AGENT_OPTIONS, 70, TokenOption::EXISTS)));
- EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_EQ(1, values_.size());
EXPECT_EQ("false", values_.top());
// Evaluation does and uses nothing.
ASSERT_NO_THROW(t_.reset(new TokenLabel(123)));
EXPECT_EQ(123, t_->getLabel());
- clearStack(false);
- unsigned next(345);
- EXPECT_NO_THROW(next = t_->evaluate(*pkt4_, values_));
- ASSERT_EQ(0, next);
+ testEvaluate(t_, *pkt4_, values_);
ASSERT_TRUE(values_.empty());
}