lagopus_result_t check_packet_parse_expect_error(ofp_handler_proc_t handler_proc, const char packet[], const struct ofp_error *expected_error) { lagopus_result_t res = LAGOPUS_RESULT_ANY_FAILURES; struct channel *channel = create_data_channel(); struct ofp_header xid_header = {0, 0, 0, 0}; struct pbuf *pbuf; struct ofp_error error; /* create packet */ create_packet(packet, &pbuf); /* ignore result code. */ (void) ofp_header_decode_sneak_test(pbuf, &xid_header); /* call func & check */ res = (handler_proc)(channel, pbuf, &xid_header, &error); if (res == LAGOPUS_RESULT_OK) { TEST_ASSERT_EQUAL_MESSAGE(0, pbuf->plen, "handler_test_utils.c: packet data len error."); } else if (res == LAGOPUS_RESULT_OFP_ERROR) { /* check error if expected */ if (expected_error != NULL) { TEST_ASSERT_EQUAL_OFP_ERROR(expected_error, &error); } } pbuf_free(pbuf); s_destroy_static_data(); return res; }
lagopus_result_t check_packet_parse_array_expect_error(ofp_handler_proc_t handler_proc, const char *packet[], int array_len, const struct ofp_error *expected_error) { lagopus_result_t res = LAGOPUS_RESULT_ANY_FAILURES; struct channel *channel = create_data_channel(); struct ofp_header xid_header; struct pbuf *pbuf; struct ofp_error error; bool error_has_occurred = false; int i; for (i = 0; i < array_len; i++) { lagopus_msg_debug(1, "packet[%d] start ... %s\n", i, packet[i]); /* create packet */ create_packet(packet[i], &pbuf); /* parse header */ if (ofp_header_decode_sneak_test(pbuf, &xid_header) != LAGOPUS_RESULT_OK) { pbuf_free(pbuf); s_destroy_static_data(); TEST_FAIL_MESSAGE("handler_test_utils.c: cannot decode header\n"); return LAGOPUS_RESULT_OFP_ERROR; } /* call func & check */ res = (handler_proc)(channel, pbuf, &xid_header, &error); lagopus_msg_debug(1, "packet[%d] done ... %s\n", i, lagopus_error_get_string(res)); if (res == LAGOPUS_RESULT_OK) { TEST_ASSERT_EQUAL_MESSAGE(0, pbuf->plen, "handler_test_utils.c: packet data len error."); } else if (res == LAGOPUS_RESULT_OFP_ERROR) { error_has_occurred = true; if (expected_error != NULL) { TEST_ASSERT_EQUAL_OFP_ERROR(expected_error, &error); } pbuf_free(pbuf); break; } /* free */ pbuf_free(pbuf); } /* free */ s_destroy_static_data(); if (error_has_occurred == true) { TEST_ASSERT_EQUAL_OFP_ERROR(expected_error, &error); } return res; }
static lagopus_result_t s_ofp_set_config_request_handle_wrap(struct channel *channel, struct pbuf *pbuf, struct ofp_header *xid_header, struct ofp_error *error) { /* set xid_header. */ if (ofp_header_decode_sneak_test(pbuf, xid_header) != LAGOPUS_RESULT_OK) { TEST_FAIL_MESSAGE("handler_test_utils.c: cannot decode header\n"); } return ofp_set_config_handle(channel, pbuf, xid_header, error); }
lagopus_result_t check_packet_parse_with_dequeue_expect_error(ofp_handler_proc_t handler_proc, const char packet[], void **get, const struct ofp_error *expected_error) { lagopus_result_t res = LAGOPUS_RESULT_ANY_FAILURES; struct channel *channel = NULL; struct ofp_header xid_header; struct ofp_bridge *ofpb = NULL; struct pbuf *pbuf = NULL; struct ofp_error error; struct ofp_bridgeq *bridgeq = NULL; if (get == NULL) { return LAGOPUS_RESULT_INVALID_ARGS; } /* start ofp_handler */ if (s_start_ofp_handler() == false) { goto done; } /* get ofp_bridge */ channel = create_data_channel(); if (channel == NULL) { TEST_FAIL_MESSAGE("channel is NULL."); } res = ofp_bridgeq_mgr_bridge_lookup(channel_dpid_get(channel), &bridgeq); if (res == LAGOPUS_RESULT_OK) { ofpb = ofp_bridgeq_mgr_bridge_get(bridgeq); ofp_bridgeq_mgr_bridgeq_free(bridgeq); } else { TEST_FAIL_MESSAGE("handler_test_utils.c: " "ofp_bridgeq_mgr_bridge_get error."); } /* create packet */ create_packet(packet, &pbuf); /* parse header */ if (ofp_header_decode_sneak_test(pbuf, &xid_header) != LAGOPUS_RESULT_OK) { TEST_FAIL_MESSAGE("handler_test_utils.c: cannot decode header\n"); return LAGOPUS_RESULT_OFP_ERROR; } /* call func & check */ res = (handler_proc)(channel, pbuf, &xid_header, &error); if (res == LAGOPUS_RESULT_OK) { res = lagopus_bbq_get(&ofpb->event_dataq, get, void *, TIMEOUT); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, res, "handler_test_utils.c: lagopus_bbq_get error."); } else if (res == LAGOPUS_RESULT_OFP_ERROR) {