1 /* 2 * Copyright 2011, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include "NetworkInterfaceTest.h" 8 9 #include <NetworkAddress.h> 10 #include <NetworkInterface.h> 11 #include <NetworkRoster.h> 12 13 #include <cppunit/TestCaller.h> 14 #include <cppunit/TestSuite.h> 15 16 17 NetworkInterfaceTest::NetworkInterfaceTest() 18 { 19 } 20 21 22 NetworkInterfaceTest::~NetworkInterfaceTest() 23 { 24 } 25 26 27 void 28 NetworkInterfaceTest::setUp() 29 { 30 fInterface.SetTo("loopTest"); 31 BNetworkRoster::Default().RemoveInterface(fInterface); 32 // just in case 33 34 CPPUNIT_ASSERT(BNetworkRoster::Default().AddInterface(fInterface) == B_OK); 35 CPPUNIT_ASSERT(fInterface.CountAddresses() == 1); 36 // every interface has one unspec address 37 } 38 39 40 void 41 NetworkInterfaceTest::tearDown() 42 { 43 CPPUNIT_ASSERT(BNetworkRoster::Default().RemoveInterface(fInterface) 44 == B_OK); 45 } 46 47 48 void 49 NetworkInterfaceTest::TestUnset() 50 { 51 BNetworkInterface unset("test"); 52 unset.Unset(); 53 CPPUNIT_ASSERT(unset.Name() == NULL || unset.Name()[0] == '\0'); 54 } 55 56 57 void 58 NetworkInterfaceTest::TestFindAddress() 59 { 60 fInterface.RemoveAddressAt(0); 61 // Remove empty address 62 63 // Add first 64 65 BNetworkInterfaceAddress first; 66 first.SetAddress(BNetworkAddress(AF_INET, "8.8.8.8")); 67 68 CPPUNIT_ASSERT(fInterface.FindAddress(first.Address()) < 0); 69 CPPUNIT_ASSERT(fInterface.AddAddress(first) == B_OK); 70 CPPUNIT_ASSERT(fInterface.FindAddress(first.Address()) == 0); 71 72 // Add second 73 74 BNetworkInterfaceAddress second; 75 second.SetAddress(BNetworkAddress(AF_INET6, "::1")); 76 77 CPPUNIT_ASSERT(fInterface.FindAddress(second.Address()) < 0); 78 CPPUNIT_ASSERT(fInterface.AddAddress(second) == B_OK); 79 CPPUNIT_ASSERT(fInterface.FindAddress(second.Address()) >= 0); 80 81 // Remove them again 82 83 CPPUNIT_ASSERT(fInterface.RemoveAddress(first) == B_OK); 84 CPPUNIT_ASSERT(fInterface.FindAddress(first.Address()) < 0); 85 CPPUNIT_ASSERT(fInterface.FindAddress(second.Address()) >= 0); 86 87 CPPUNIT_ASSERT(fInterface.RemoveAddress(second.Address()) == B_OK); 88 CPPUNIT_ASSERT(fInterface.FindAddress(first.Address()) < 0); 89 CPPUNIT_ASSERT(fInterface.FindAddress(second.Address()) < 0); 90 } 91 92 93 void 94 NetworkInterfaceTest::TestFindFirstAddress() 95 { 96 fInterface.RemoveAddressAt(0); 97 // Remove empty address 98 99 // Add first 100 101 BNetworkInterfaceAddress first; 102 first.SetAddress(BNetworkAddress(AF_INET, "8.8.8.8")); 103 104 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET) < 0); 105 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET6) < 0); 106 CPPUNIT_ASSERT(fInterface.AddAddress(first) == B_OK); 107 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET) == 0); 108 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET6) < 0); 109 110 // Add second 111 112 BNetworkInterfaceAddress second; 113 second.SetAddress(BNetworkAddress(AF_INET6, "::1")); 114 115 CPPUNIT_ASSERT(fInterface.AddAddress(second) == B_OK); 116 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET) >= 0); 117 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET6) >= 0); 118 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET) 119 != fInterface.FindFirstAddress(AF_INET6)); 120 121 // Remove them again 122 123 CPPUNIT_ASSERT(fInterface.RemoveAddress(first) == B_OK); 124 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET) < 0); 125 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET6) >= 0); 126 127 CPPUNIT_ASSERT(fInterface.RemoveAddress(second.Address()) == B_OK); 128 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET) < 0); 129 CPPUNIT_ASSERT(fInterface.FindFirstAddress(AF_INET6) < 0); 130 } 131 132 133 /*static*/ void 134 NetworkInterfaceTest::AddTests(BTestSuite& parent) 135 { 136 CppUnit::TestSuite& suite = *new CppUnit::TestSuite("NetworkInterfaceTest"); 137 138 suite.addTest(new CppUnit::TestCaller<NetworkInterfaceTest>( 139 "NetworkInterfaceTest::TestUnset", &NetworkInterfaceTest::TestUnset)); 140 suite.addTest(new CppUnit::TestCaller<NetworkInterfaceTest>( 141 "NetworkInterfaceTest::TestFindAddress", 142 &NetworkInterfaceTest::TestFindAddress)); 143 suite.addTest(new CppUnit::TestCaller<NetworkInterfaceTest>( 144 "NetworkInterfaceTest::TestFindFirstAddress", 145 &NetworkInterfaceTest::TestFindFirstAddress)); 146 147 parent.addTest("NetworkInterfaceTest", &suite); 148 } 149