/ tests / nodeinfo_test.cpp
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  }