X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Fext%2Fvom_test.cpp;h=fa9ecdafe80d1563ed10dc2adf7a1e6d597533b4;hb=c39150df4d39f73aad8126db61715ccc73155cee;hp=f55dd3ebbc36bc0f7103949cfc9ab4ec6dddc91d;hpb=b02d230d5265af9f7fc302fc1a4fdfc3fec012b5;p=vpp.git diff --git a/test/ext/vom_test.cpp b/test/ext/vom_test.cpp index f55dd3ebbc3..fa9ecdafe80 100644 --- a/test/ext/vom_test.cpp +++ b/test/ext/vom_test.cpp @@ -78,6 +78,14 @@ #include "vom/nat_binding_cmds.hpp" #include "vom/pipe.hpp" #include "vom/pipe_cmds.hpp" +#include "vom/qos_mark.hpp" +#include "vom/qos_mark_cmds.hpp" +#include "vom/qos_map.hpp" +#include "vom/qos_map_cmds.hpp" +#include "vom/qos_record.hpp" +#include "vom/qos_record_cmds.hpp" +#include "vom/qos_store.hpp" +#include "vom/qos_store_cmds.hpp" using namespace boost; using namespace VOM; @@ -486,6 +494,38 @@ public: { rc = handle_derived(f_exp, f_act); } + else if (typeid(*f_exp) == typeid(QoS::mark_cmds::create_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::mark_cmds::delete_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::record_cmds::create_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::record_cmds::delete_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::store_cmds::create_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::store_cmds::delete_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::map_cmds::create_cmd)) + { + rc = handle_derived(f_exp, f_act); + } + else if (typeid(*f_exp) == typeid(QoS::map_cmds::delete_cmd)) + { + rc = handle_derived(f_exp, f_act); + } else { throw ExpException(2); @@ -1757,13 +1797,14 @@ BOOST_AUTO_TEST_CASE(test_routing) { route::ip_route *route_5 = new route::ip_route(pfx_5); route_5->add(*path_10); route_5->add(*path_9); - HW::item hw_route_5(true, rc_t::OK); - ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5, 0, pfx_5, *path_9)); - ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5, 0, pfx_5, *path_10)); + route::path_list_t pl_9_10 = {*path_9, *path_10}; + HW::item hw_route_5(0, rc_t::OK); + ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5, 0, pfx_5, pl_9_10)); TRY_CHECK_RC(OM::write(ian, *route_5)); route_5->remove(*path_9); - ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_5, 0, pfx_5, *path_9)); + route::path_list_t pl_10 = {*path_10}; + ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5, 0, pfx_5, pl_10)); TRY_CHECK_RC(OM::write(ian, *route_5)); delete path_9; @@ -1776,19 +1817,21 @@ BOOST_AUTO_TEST_CASE(test_routing) { boost::asio::ip::address nh_12 = boost::asio::ip::address::from_string("11.11.11.12"); route::path *path_12 = new route::path(nh_12, *itf2); route::ip_route *route_5_2 = new route::ip_route(rd4, pfx_5); + route::path_list_t pl_11 = {*path_11}; route_5_2->add(*path_11); - HW::item hw_route_5_2(true, rc_t::OK); - ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5_2, 1, pfx_5, *path_11)); + HW::item hw_route_5_2(1, rc_t::OK); + ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5_2, 1, pfx_5, pl_11)); TRY_CHECK_RC(OM::write(ian, *route_5_2)); + route::path_list_t pl_11_12 = {*path_11, *path_12}; route_5_2->add(*path_12); - ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5_2, 1, pfx_5, *path_12)); + ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_5_2, 1, pfx_5, pl_11_12)); TRY_CHECK_RC(OM::write(ian, *route_5_2)); /* * An ARP entry for the neighbour on itf1 */ - HW::item hw_neighbour(true, rc_t::OK); + HW::item hw_neighbour(0, rc_t::OK); mac_address_t mac_n({0,1,2,4,5,6}); neighbour *ne = new neighbour(itf1, nh_10, mac_n); ADD_EXPECT(neighbour_cmds::create_cmd(hw_neighbour, hw_ifh.data(), @@ -1800,11 +1843,12 @@ BOOST_AUTO_TEST_CASE(test_routing) { * A DVR route */ route::prefix_t pfx_6("6.6.6.6", 32); - route::path *path_l2 = new route::path(*itf2, nh_proto_t::ETHERNET); + route::path *path_13 = new route::path(*itf2, nh_proto_t::ETHERNET); route::ip_route *route_dvr = new route::ip_route(pfx_6); - route_dvr->add(*path_l2); - HW::item hw_route_dvr(true, rc_t::OK); - ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_dvr, 0, pfx_6, *path_l2)); + route_dvr->add(*path_13); + route::path_list_t pl_13 = {*path_13}; + HW::item hw_route_dvr(2, rc_t::OK); + ADD_EXPECT(route::ip_route_cmds::update_cmd(hw_route_dvr, 0, pfx_6, pl_13)); TRY_CHECK_RC(OM::write(ian, *route_dvr)); /* @@ -1852,15 +1896,19 @@ BOOST_AUTO_TEST_CASE(test_routing) { ADD_EXPECT(neighbour_cmds::delete_cmd(hw_neighbour, hw_ifh.data(), mac_n, nh_10, neighbour::flags_t::STATIC)); - ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_dvr, 0, pfx_6, *path_l2)); - ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_5_2, 1, pfx_5, *path_11)); - ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_5_2, 1, pfx_5, *path_12)); - ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_5, 0, pfx_5, *path_10)); + ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_dvr, 0, pfx_6)); + ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_5_2, 1, pfx_5)); + ADD_EXPECT(route::ip_route_cmds::delete_cmd(hw_route_5, 0, pfx_5)); delete path_10; delete path_11; delete path_12; - delete path_l2; + delete path_13; + pl_9_10.clear(); + pl_10.clear(); + pl_13.clear(); + pl_11_12.clear(); + pl_11.clear(); ADD_EXPECT(l3_binding_cmds::unbind_cmd(hw_l3_10_unbind, hw_ifh.data(), pfx_10)); ADD_EXPECT(l3_binding_cmds::unbind_cmd(hw_l3_11_unbind, hw_ifh2.data(), pfx_11)); @@ -2179,4 +2227,61 @@ BOOST_AUTO_TEST_CASE(test_pipes) { TRY_CHECK(OM::remove(gk)); } +BOOST_AUTO_TEST_CASE(test_qos) { + VppInit vi; + const std::string albert = "AlbertCamus"; + rc_t rc = rc_t::OK; + + /* + * Create an interface on which to enable QoS + */ + std::string itf_name = "host1"; + interface itf(itf_name, + interface::type_t::AFPACKET, + interface::admin_state_t::UP); + HW::item hw_ifh(2, rc_t::OK); + HW::item hw_as_up(interface::admin_state_t::UP, rc_t::OK); + HW::item hw_as_down(interface::admin_state_t::DOWN, rc_t::OK); + ADD_EXPECT(interface_cmds::af_packet_create_cmd(hw_ifh, itf_name)); + ADD_EXPECT(interface_cmds::state_change_cmd(hw_as_up, hw_ifh)); + TRY_CHECK_RC(OM::write(albert, itf)); + + QoS::map::outputs_t out; + out[0][5] = 5; + out[3][6] = 6; + + QoS::map qem(1, out); + + HW::item hw_qem(true, rc_t::OK); + ADD_EXPECT(QoS::map_cmds::create_cmd(hw_qem, 1, out)); + TRY_CHECK_RC(OM::write(albert, qem)); + + QoS::record *qr = new QoS::record(itf, QoS::source_t::IP); + HW::item hw_qr(true, rc_t::OK); + ADD_EXPECT(QoS::record_cmds::create_cmd(hw_qr, hw_ifh.data(), QoS::source_t::IP)); + TRY_CHECK_RC(OM::write(albert, *qr)); + + QoS::store *qs = new QoS::store(itf, QoS::source_t::IP, 55); + HW::item hw_qs(true, rc_t::OK); + ADD_EXPECT(QoS::store_cmds::create_cmd(hw_qs, hw_ifh.data(), QoS::source_t::IP, 55)); + TRY_CHECK_RC(OM::write(albert, *qs)); + + QoS::mark *qm = new QoS::mark(itf, qem, QoS::source_t::IP); + HW::item hw_qm(true, rc_t::OK); + ADD_EXPECT(QoS::mark_cmds::create_cmd(hw_qm, hw_ifh.data(), 1, QoS::source_t::IP)); + TRY_CHECK_RC(OM::write(albert, *qm)); + + STRICT_ORDER_OFF(); + delete qr; + delete qm; + delete qs; + ADD_EXPECT(QoS::mark_cmds::delete_cmd(hw_qm, hw_ifh.data(), QoS::source_t::IP)); + ADD_EXPECT(QoS::map_cmds::delete_cmd(hw_qem, 1)); + ADD_EXPECT(QoS::record_cmds::delete_cmd(hw_qr, hw_ifh.data(), QoS::source_t::IP)); + ADD_EXPECT(QoS::store_cmds::delete_cmd(hw_qs, hw_ifh.data(), QoS::source_t::IP)); + ADD_EXPECT(interface_cmds::state_change_cmd(hw_as_down, hw_ifh)); + ADD_EXPECT(interface_cmds::af_packet_delete_cmd(hw_ifh, itf_name)); + TRY_CHECK(OM::remove(albert)); +} + BOOST_AUTO_TEST_SUITE_END()