#include #include #include "MKCommModelTests.h" #include "HeartBeatListenerTests.h" #include "MKControlTests.h" using namespace std; // set up a blank manet void MKCommModelTests::setup() { try { cm = new MKCommModel(); } catch(BaseException e) { TEST_FAIL_LOG(e.what()); } } void MKCommModelTests::tear_down() { delete cm; } void MKCommModelTests::testCM_init() { CommModel *comm = CommModel::init(); TEST_ASSERT(comm != NULL); } void MKCommModelTests::testCM_get_inactive_time() { vector nbNodes; vector::const_iterator itr; node *n1, *n2, *n3; HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); n1 = cm->get_node(MKLib::parseIP4Addr("10.0.0.1")); n2 = cm->get_node(MKLib::parseIP4Addr("10.0.0.2")); n3 = cm->get_node(MKLib::parseIP4Addr("10.0.0.3")); if(n1 == NULL || n2 == NULL || n3 == NULL) { TEST_FAIL("get_node returned null"); return; } TEST_ASSERT(cm->get_inactive_time(n1,n2) == 15); TEST_ASSERT(cm->get_inactive_time(n1,n3) == 35); } void MKCommModelTests::testCM_get_latency() { node *n1, *n2, *n3; latency_t lat; HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); n1 = cm->get_node(MKLib::parseIP4Addr("10.0.0.1")); n2 = cm->get_node(MKLib::parseIP4Addr("10.0.0.2")); n3 = cm->get_node(MKLib::parseIP4Addr("10.0.0.3")); if(n1 == NULL || n2 == NULL || n3 == NULL) { TEST_FAIL("get_node returned null"); return; } lat = cm->get_latency(n1, n2); MKControlTests::respondMockLatency(MKRequest::lastLatency->id(), 23); lat = cm->get_latency(n1, n2); TEST_ASSERT(lat == 23); lat = cm->get_latency(n1, n3); MKControlTests::respondMockLatency(MKRequest::lastLatency->id(), 34); lat = cm->get_latency(n1, n3); TEST_ASSERT(lat == 34); } void MKCommModelTests::testCM_get_throughput() { vector nbNodes; vector::const_iterator itr; node *n1, *n2, *n3; HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); n1 = cm->get_node(MKLib::parseIP4Addr("10.0.0.1")); n2 = cm->get_node(MKLib::parseIP4Addr("10.0.0.2")); n3 = cm->get_node(MKLib::parseIP4Addr("10.0.0.3")); if(n1 == NULL || n2 == NULL || n3 == NULL) { TEST_FAIL("get_node returned null"); return; } /* TEST_ASSERT(cm->get_throughput(n1,n2) == (30 * 1024 * 1024)); TEST_ASSERT(cm->get_throughput(n1,n3) == (25 * 1024 * 1024)); */ } void MKCommModelTests::testCM_get_all_nodes() { vector allNodes; vector::const_iterator itr; mac_t zeroMac0 = {0,0,0,0,0,0}; MacAddr zeroMac(zeroMac0); HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); try { allNodes = cm->get_all_nodes(); } catch(BaseException e) { TEST_FAIL_LOG(e.what()); return; } TEST_ASSERT(cm->size() == 3); TEST_ASSERT(allNodes.size() > 0); TEST_ASSERT(allNodes.size() == 3); for(itr = allNodes.begin(); itr != allNodes.end(); itr++) { // assert all nodes have an IP TEST_ASSERT((*itr)->ip_addr); // assert all nodes have a mac TEST_ASSERT(zeroMac < MacAddr((*itr)->mac_addr)); } } void MKCommModelTests::testCM_get_all_nodes1() { vector allNodes; vector::const_iterator itr; mac_t zeroMac0 = {0,0,0,0,0,0}; MacAddr zeroMac(zeroMac0); HeartBeatPacket *hb3 = HeartBeatListenerTests::makeHB3(); cm->update(hb3); free(hb3); try { allNodes = cm->get_all_nodes(); } catch(BaseException e) { TEST_FAIL_LOG(e.what()); return; } TEST_ASSERT(cm->size() == 9); TEST_ASSERT(allNodes.size() > 0); TEST_ASSERT(allNodes.size() == 9); for(itr = allNodes.begin(); itr != allNodes.end(); itr++) { // assert all nodes have an IP TEST_ASSERT((*itr)->ip_addr); // assert all nodes have a mac TEST_ASSERT(zeroMac < MacAddr((*itr)->mac_addr)); } } void MKCommModelTests::testCM_get_signal_strength() { node *n1, *n2, *n3; signal_strength_t str; HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); n1 = cm->get_node(MKLib::parseIP4Addr("10.0.0.1")); n2 = cm->get_node(MKLib::parseIP4Addr("10.0.0.2")); n3 = cm->get_node(MKLib::parseIP4Addr("10.0.0.3")); if(n1 == NULL || n2 == NULL || n3 == NULL) { TEST_FAIL("get_node returned null"); return; } str = cm->get_signal_strength(n1, n2); TEST_ASSERT(str == 55); str = cm->get_signal_strength(n1, n3); TEST_ASSERT(str == 75); } void MKCommModelTests::testCM_get_node() { node *n1; HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); n1 = cm->get_node(MKLib::parseIP4Addr("10.0.0.1")); if(n1 == NULL) { TEST_FAIL("get_node returned null"); return; } TEST_ASSERT(n1->ip_addr); } void MKCommModelTests::testCM_get_neighbors() { vector nbNodes; vector::const_iterator itr; node *n1; HeartBeatPacket *hb2 = HeartBeatListenerTests::makeHB2(); cm->update(hb2); free(hb2); n1 = cm->get_node(MKLib::parseIP4Addr("10.0.0.1")); if(n1 == NULL) { TEST_FAIL("get_node returned null"); return; } nbNodes = cm->get_neighbors(n1); TEST_ASSERT(nbNodes.size() == 2); } void MKCommModelTests::testCM_get_preferred_path() { node *n1, *n2; HeartBeatPacket *hb4 = HeartBeatListenerTests::makeHB4(); vector route; pid_t ccListen = MKControlTests::setupResponder(); cm->update(hb4); free(hb4); n1 = cm->get_node(MKLib::parseIP4Addr("127.0.0.1")); n2 = cm->get_node(MKLib::parseIP4Addr("127.0.0.2")); TEST_ASSERT(n1 != NULL); TEST_ASSERT(n2 != NULL); if(n1 == NULL || n2 == NULL) { TEST_FAIL("node not found"); MKControlTests::killResponder(ccListen); return; } cm->set_ocu_machine(n1); cm->set_target(n2); try { // first time no route cm->get_preferred_path(); usleep(1000000); // wait a sec // next time it has the result route = cm->get_preferred_path(); } catch(BaseException e) { TEST_FAIL_LOG(e.what()); MKControlTests::killResponder(ccListen); return; } TEST_ASSERT(cm->get_node(MKLib::parseIP4Addr("127.0.0.1")) != NULL); TEST_ASSERT(cm->get_node(MKLib::parseIP4Addr("127.0.0.2")) != NULL); TEST_ASSERT(cm->findByIP(MKLib::parseIP4Addr("127.0.0.1")) != NULL); TEST_ASSERT(cm->findByIP(MKLib::parseIP4Addr("127.0.0.2")) != NULL); TEST_ASSERT(route.size() == 2); MKControlTests::killResponder(ccListen); }