void test_pop_pbb(void) { static const uint8_t odhost[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab }; static const uint8_t oshost[] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54 }; static const uint8_t idhost[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; static const uint8_t ishost[] = { 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb }; struct port port; struct action_list action_list; struct action *action; struct ofp_action_pop_mpls *action_pop; struct lagopus_packet pkt; OS_MBUF *m; TAILQ_INIT(&action_list); action = calloc(1, sizeof(*action)); action_pop = (struct ofp_action_pop_mpls *)&action->ofpat; action_pop->type = OFPAT_POP_PBB; lagopus_set_action_function(action); TAILQ_INSERT_TAIL(&action_list, action, entry); m = calloc(1, sizeof(*m)); TEST_ASSERT_NOT_EQUAL_MESSAGE(m, NULL, "calloc error."); m->data = &m->dat[128]; OS_M_PKTLEN(m) = 64 + 18; OS_MEMCPY(&m->data[0], odhost, ETH_ALEN); OS_MEMCPY(&m->data[6], oshost, ETH_ALEN); m->data[12] = 0x88; m->data[13] = 0xe7; m->data[14] = 0x00; m->data[15] = 0x11; m->data[16] = 0x22; m->data[17] = 0x33; /* dhost and shost */ OS_MEMCPY(&m->data[18], idhost, ETH_ALEN); OS_MEMCPY(&m->data[24], ishost, ETH_ALEN); m->data[30] = 0x08; m->data[31] = 0x00; m->data[32] = 0x45; lagopus_set_in_port(&pkt, &port); lagopus_packet_init(&pkt, m); execute_action(&pkt, &action_list); TEST_ASSERT_EQUAL_MESSAGE(OS_M_PKTLEN(m), 64, "POP_PBB length error."); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&m->data[0], idhost, ETH_ALEN, "POP_PBB ether_dhost error."); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&m->data[6], ishost, ETH_ALEN, "POP_PBB ether_shost error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[12], 0x08, "POP_PBB ethertype[0] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[13], 0x00, "POP_PBB ethertype[1] error."); }
void test_set_field_METADATA(void) { struct port port; static const uint8_t metadata[] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 }; struct action_list action_list; struct action *action; struct ofp_action_set_field *action_set; struct lagopus_packet pkt; OS_MBUF *m; TAILQ_INIT(&action_list); action = calloc(1, sizeof(*action) + 64); action_set = (struct ofp_action_set_field *)&action->ofpat; action_set->type = OFPAT_SET_FIELD; lagopus_set_action_function(action); TAILQ_INSERT_TAIL(&action_list, action, entry); m = calloc(1, sizeof(*m)); TEST_ASSERT_NOT_NULL_MESSAGE(m, "calloc error."); m->data = &m->dat[128]; pkt.oob_data.metadata = 0; lagopus_set_in_port(&pkt, &port); lagopus_packet_init(&pkt, m); set_match(action_set->field, 8, OFPXMT_OFB_METADATA << 1, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0); execute_action(&pkt, &action_list); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&pkt.oob_data.metadata, metadata, 8, "SET_FIELD METADATA error."); }
void test_parseDatalinkBufferPopCommandMultiple(void) { parseUplinkPacket_StubWithCallback((CMOCK_parseUplinkPacket_CALLBACK) parseDatalinkBufferValidDataMock); parseDatalinkBuffer(); parseUplinkPacket_StubWithCallback((CMOCK_parseUplinkPacket_CALLBACK) parseDatalinkBufferValidDataMock2); parseDatalinkBuffer(); DatalinkCommand* command1 = popDatalinkCommand(); DatalinkCommand* command2 = popDatalinkCommand(); TEST_ASSERT_EQUAL_UINT8_MESSAGE(test_data[0], command1->cmd, "Command ID should be first byte of received uplink"); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&test_data[1], command1->data, test_data_length - 1, "Command payload should be copied correctly"); TEST_ASSERT_NULL(command1->next); TEST_ASSERT_EQUAL_UINT8_MESSAGE(test_data2[0], command2->cmd, "Command ID should be first byte of received uplink"); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&test_data2[1], command2->data, test_data2_length - 1, "Command payload should be copied correctly"); TEST_ASSERT_NULL(command2->next); free(command1); free(command2); }
void test_parseDatalinkBufferShouldAddToCommandQueueWithIncomingData(void) { parseUplinkPacket_StubWithCallback((CMOCK_parseUplinkPacket_CALLBACK) parseDatalinkBufferValidDataMock); parseDatalinkBuffer(); DatalinkCommand* command = popDatalinkCommand(); TEST_ASSERT_EQUAL_UINT8_MESSAGE(test_data[0], command->cmd, "Command ID should be first byte of received uplink"); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&test_data[1], command->data, test_data_length - 1, "Command payload should be copied correctly"); TEST_ASSERT_NULL(command->next); free(command); }
void tearDown() { // Make sure parameters have been transmitted correctly if (expectedSend) { TEST_ASSERT_EQUAL_INT_MESSAGE(sizeof(parameterData) + 1, mock_driver.sendBuffer.size, "Parameter send buffer has wrong size"); TEST_ASSERT_EQUAL_UINT8_MESSAGE(operation, mock_driver.sendBuffer.data[0], "Operation byte not correctly set"); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(parameterData, mock_driver.sendBuffer.data + 1, sizeof(parameterData), "Parameter data is not correct"); } // Check returned values TEST_ASSERT_EQUAL_INT_MESSAGE(expectedStatus.status, status.status, "Unexpected rpc client result status"); TEST_ASSERT_EQUAL_INT_MESSAGE(expectedStatus.server_status, status.server_status, "Unexpected rpc client server status"); TEST_ASSERT_EQUAL_INT_MESSAGE(expectedStatus.handler_status, status.handler_status, "Unexpected rpc handler status"); TEST_ASSERT_EQUAL_MESSAGE(expectedSend || expectedReceive, mock_driver.waitedForCompletion, "Should (not) have waited for completion"); TEST_ASSERT_EQUAL_MESSAGE(expectedSend, mock_driver.sent, "rpc call should (not) have sent something"); TEST_ASSERT_EQUAL_MESSAGE(expectedReceive, mock_driver.received, "rpc call should (not) have received something"); }
void test_push_pbb(void) { static const uint8_t dhost[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; static const uint8_t shost[] = { 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb }; struct port port; struct action_list action_list; struct action *action; struct ofp_action_push *action_push; struct lagopus_packet pkt; OS_MBUF *m; TAILQ_INIT(&action_list); action = calloc(1, sizeof(*action) + sizeof(*action_push) - sizeof(struct ofp_action_header)); action_push = (struct ofp_action_push *)&action->ofpat; action_push->type = OFPAT_PUSH_PBB; action_push->ethertype = 0x88e7; lagopus_set_action_function(action); TAILQ_INSERT_TAIL(&action_list, action, entry); m = calloc(1, sizeof(*m)); TEST_ASSERT_NOT_EQUAL_MESSAGE(m, NULL, "calloc error."); m->data = &m->dat[128]; OS_M_PKTLEN(m) = 64; OS_MEMCPY(&m->data[0], dhost, ETH_ALEN); OS_MEMCPY(&m->data[6], shost, ETH_ALEN); lagopus_packet_init(&pkt, m, &port); execute_action(&pkt, &action_list); TEST_ASSERT_EQUAL_MESSAGE(OS_M_PKTLEN(m), 64 + 18, "PUSH_PBB length error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[12], 0x88, "PUSH_PBB TPID[0] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[13], 0xe7, "PUSH_PBB TPID[1] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[14], 0, "PUSH_PBB pcp_dei error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[15], 0x00, "PUSH_PBB i_sid[0] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[16], 0x00, "PUSH_PBB i_sid[1] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[17], 0x00, "PUSH_PBB i_sid[2] error."); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&m->data[18], dhost, ETH_ALEN, "PUSH_PBB dhost error."); TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(&m->data[24], shost, ETH_ALEN, "PUSH_PBB shost error."); m->data[15] = 0xab; m->data[16] = 0xcd; m->data[17] = 0xef; execute_action(&pkt, &action_list); TEST_ASSERT_EQUAL_MESSAGE(OS_M_PKTLEN(m), 64 + 18 + 18, "PUSH_PBB length error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[15], 0xab, "PUSH_PBB(2) i_sid[0] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[16], 0xcd, "PUSH_PBB(2) i_sid[1] error."); TEST_ASSERT_EQUAL_MESSAGE(m->data[17], 0xef, "PUSH_PBB(2) i_sid[2] error."); }