|
@@ -19,11 +19,13 @@
|
|
|
#include <gtest/gtest.h>
|
|
|
#include <exceptions/exceptions.h>
|
|
|
#include <boost/scoped_ptr.hpp>
|
|
|
+#include <asiolink/io_address.h>
|
|
|
#include <dhcp/duid.h>
|
|
|
|
|
|
using namespace std;
|
|
|
using namespace isc;
|
|
|
using namespace isc::dhcp;
|
|
|
+using namespace isc::asiolink;
|
|
|
|
|
|
// don't import the entire boost namespace. It will unexpectedly hide uint8_t
|
|
|
// for some systems.
|
|
@@ -116,6 +118,56 @@ TEST(DuidTest, operators) {
|
|
|
EXPECT_TRUE(*duid1 != *duid3);
|
|
|
}
|
|
|
|
|
|
+TEST(ClientIdTest, constructor) {
|
|
|
+ IOAddress addr2("192.0.2.1");
|
|
|
+ IOAddress addr3("2001:db8:1::1");
|
|
|
|
|
|
+ uint8_t data1[] = {0, 1, 2, 3, 4, 5, 6};
|
|
|
+ vector<uint8_t> data2(data1, data1 + sizeof(data1));
|
|
|
+ uint8_t data3[] = {192, 0 , 2, 1 };
|
|
|
+
|
|
|
+ // checks for C-style construtor (uint8_t * + len)
|
|
|
+ scoped_ptr<ClientId> id1(new ClientId(data1, sizeof(data1)));
|
|
|
+ vector<uint8_t> vecdata = id1->getClientId();
|
|
|
+ EXPECT_EQ(data2, vecdata);
|
|
|
+ EXPECT_FALSE(id1->isAddress());
|
|
|
+ EXPECT_THROW(id1->getAddress(), BadValue);
|
|
|
+
|
|
|
+ // checks for vector-based constructor
|
|
|
+ scoped_ptr<ClientId> id2(new ClientId(data2));
|
|
|
+ vecdata = id2->getClientId();
|
|
|
+ EXPECT_EQ(data2, vecdata);
|
|
|
+ EXPECT_FALSE(id1->isAddress());
|
|
|
+ EXPECT_THROW(id1->getAddress(), BadValue);
|
|
|
+
|
|
|
+ // checks for IOAddress based constructor
|
|
|
+ scoped_ptr<ClientId> id3(new ClientId(addr2));
|
|
|
+ vecdata = id3->getClientId();
|
|
|
+ EXPECT_TRUE(vecdata == vector<uint8_t>(data3, data3 + 4));
|
|
|
+ EXPECT_EQ("192.0.2.1", id3->getAddress().toText());
|
|
|
+
|
|
|
+ // should support v4 address only, v6 is a wrong address here
|
|
|
+ EXPECT_THROW(new ClientId(addr3), BadValue);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(ClientIdTest, operators) {
|
|
|
+ uint8_t data1[] = {0, 1, 2, 3, 4, 5, 6};
|
|
|
+ uint8_t data2[] = {0, 1, 2, 3, 4};
|
|
|
+ uint8_t data3[] = {0, 1, 2, 3, 4, 5, 7}; // last digit different
|
|
|
+ uint8_t data4[] = {0, 1, 2, 3, 4, 5, 6}; // the same as 1
|
|
|
+
|
|
|
+ scoped_ptr<ClientId> id1(new ClientId(data1, sizeof(data1)));
|
|
|
+ scoped_ptr<ClientId> id2(new ClientId(data2, sizeof(data2)));
|
|
|
+ scoped_ptr<ClientId> id3(new ClientId(data3, sizeof(data3)));
|
|
|
+ scoped_ptr<ClientId> id4(new ClientId(data4, sizeof(data4)));
|
|
|
+
|
|
|
+ EXPECT_TRUE(*id1 == *id4);
|
|
|
+ EXPECT_FALSE(*id1 == *id2);
|
|
|
+ EXPECT_FALSE(*id1 == *id3);
|
|
|
+
|
|
|
+ EXPECT_FALSE(*id1 != *id4);
|
|
|
+ EXPECT_TRUE(*id1 != *id2);
|
|
|
+ EXPECT_TRUE(*id1 != *id3);
|
|
|
+}
|
|
|
|
|
|
} // end of anonymous namespace
|