nodeinfo_test.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2024-2025 Marek Küthe <m.k@mk16.de> 2 // 3 // SPDX-License-Identifier: GPL-3.0-or-later 4 5 #include <gtest/gtest.h> 6 #include <memory> 7 #include <sstream> 8 #include <boost/functional/hash.hpp> 9 #include <tins/tins.h> 10 #include "nodeinfo.hpp" 11 12 using namespace crazytrace; 13 14 TEST(NodeInfoTest, MacAddress) 15 { 16 const Tins::HWAddress<6> mac_address(std::string("52:54:00:b2:fa:7f")); 17 NodeInfo nodeinfo; 18 nodeinfo.set_mac_address(mac_address); 19 EXPECT_EQ(mac_address, nodeinfo.get_mac_address()); 20 EXPECT_EQ(mac_address.to_string(), nodeinfo.get_mac_address().to_string()); 21 } 22 23 TEST(NodeInfoTest, HopLimit) 24 { 25 constexpr int hoplimit = 150; 26 NodeInfo nodeinfo; 27 EXPECT_EQ(64, nodeinfo.get_hoplimit()); 28 29 nodeinfo.set_hoplimit(hoplimit); 30 EXPECT_EQ(hoplimit, nodeinfo.get_hoplimit()); 31 } 32 33 TEST(NodeInfoTest, IPv6Address) 34 { 35 const Tins::IPv6Address address1(std::string("fd00::1")); 36 const Tins::IPv6Address address2(std::string("fd00::2")); 37 NodeInfo nodeinfo; 38 39 nodeinfo.add_address(address1); 40 EXPECT_EQ(address1, nodeinfo.get_address()); 41 EXPECT_EQ(address1.to_string(), nodeinfo.get_address().to_string()); 42 43 nodeinfo.add_address(address2); 44 Tins::IPv6Address random_address = nodeinfo.get_address(); 45 46 while (random_address != address1) 47 random_address = nodeinfo.get_address(); 48 EXPECT_EQ(random_address, address1); 49 50 while (random_address != address2) 51 random_address = nodeinfo.get_address(); 52 EXPECT_EQ(random_address, address2); 53 } 54 55 TEST(NodeInfoTest, HasAddress) 56 { 57 const Tins::IPv6Address address1(std::string("fd00::1")); 58 const Tins::IPv6Address address2(std::string("fd00::2")); 59 NodeInfo nodeinfo; 60 61 EXPECT_FALSE(nodeinfo.has_address(address1)); 62 EXPECT_FALSE(nodeinfo.has_address(address2)); 63 64 nodeinfo.add_address(address1); 65 EXPECT_TRUE(nodeinfo.has_address(address1)); 66 EXPECT_FALSE(nodeinfo.has_address(address2)); 67 68 nodeinfo.add_address(address2); 69 EXPECT_TRUE(nodeinfo.has_address(address1)); 70 EXPECT_TRUE(nodeinfo.has_address(address2)); 71 } 72 73 TEST(NodeInfoTest, Comparison) 74 { 75 NodeInfo nodeinfo1; 76 NodeInfo nodeinfo2; 77 78 EXPECT_EQ(nodeinfo1, nodeinfo2); 79 80 nodeinfo1.set_hoplimit(10); 81 EXPECT_NE(nodeinfo1, nodeinfo2); 82 83 nodeinfo2.set_hoplimit(10); 84 EXPECT_EQ(nodeinfo1, nodeinfo2); 85 86 const std::shared_ptr<NodeInfo> child1 = std::make_shared<NodeInfo>(); 87 child1->set_hoplimit(1); 88 nodeinfo1.add_node(child1); 89 EXPECT_NE(nodeinfo1, nodeinfo2); 90 91 nodeinfo2.add_node(child1); 92 EXPECT_EQ(nodeinfo1, nodeinfo2); 93 94 const std::shared_ptr<NodeInfo> child2_1 = std::make_shared<NodeInfo>(); 95 child1->set_hoplimit(2); 96 const std::shared_ptr<NodeInfo> child2_2 = std::make_shared<NodeInfo>(); 97 child1->set_hoplimit(2); 98 99 nodeinfo1.add_node(child2_1); 100 EXPECT_NE(nodeinfo1, nodeinfo2); 101 102 nodeinfo2.add_node(child2_2); 103 EXPECT_EQ(nodeinfo1, nodeinfo2); 104 105 child2_1->add_address(Tins::IPv6Address("fd00::1")); 106 EXPECT_NE(nodeinfo1, nodeinfo2); 107 108 child2_2->add_address(Tins::IPv6Address("fd00::1")); 109 EXPECT_EQ(nodeinfo1, nodeinfo2); 110 } 111 112 TEST(NodeInfoTest, Output) 113 { 114 const Tins::IPv6Address address1(std::string("fd00::1")); 115 const Tins::IPv6Address address2(std::string("fd00::2")); 116 NodeInfo nodeinfo; 117 nodeinfo.add_address(address1); 118 119 std::ostringstream test_output; 120 121 test_output << nodeinfo; 122 EXPECT_EQ(test_output.str(), "NodeInfo: hoplimit=64 fd00::1"); 123 test_output.str(""); 124 125 nodeinfo.add_address(address2); 126 test_output << nodeinfo; 127 EXPECT_EQ(test_output.str(), "NodeInfo: hoplimit=64 fd00::1 fd00::2"); 128 test_output.str(""); 129 130 nodeinfo.set_hoplimit(30); 131 test_output << nodeinfo; 132 EXPECT_EQ(test_output.str(), "NodeInfo: hoplimit=30 fd00::1 fd00::2"); 133 test_output.str(""); 134 135 nodeinfo.set_mac_address( 136 Tins::HWAddress<6>(std::string("52:54:00:b2:fa:7f"))); 137 test_output << nodeinfo; 138 EXPECT_EQ(test_output.str(), 139 "NodeInfo: hoplimit=30 fd00::1 fd00::2 52:54:00:b2:fa:7f"); 140 }