Skip to content

Commit

Permalink
Add more test cases to extend coverage
Browse files Browse the repository at this point in the history
Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
  • Loading branch information
cscarpitta committed Sep 15, 2024
1 parent ef57e35 commit 3802231
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 86 deletions.
215 changes: 155 additions & 60 deletions tests/mock_tests/fpmsyncd/receive_srv6_localsids_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END;

struct nlmsg *nl_obj = create_srv6_localsid_nlmsg(RTM_NEWSRV6LOCALSID, &_localsid, _block_len, _node_len, _func_len, _arg_len, _action);
Expand Down Expand Up @@ -105,10 +105,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_X;
IpAddress _adj = IpAddress("2001:db8:1::1");

Expand Down Expand Up @@ -155,10 +155,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_T;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -205,10 +205,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_DX6;
IpAddress _adj = IpAddress("2001:db8:1::1");

Expand Down Expand Up @@ -254,10 +254,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_DX4;
IpAddress _adj = IpAddress("10.0.0.1");

Expand Down Expand Up @@ -304,10 +304,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_DT4;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -354,10 +354,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_DT6;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -404,10 +404,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_END_DT46;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -454,10 +454,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UN;

struct nlmsg *nl_obj = create_srv6_localsid_nlmsg(RTM_NEWSRV6LOCALSID, &_localsid, _block_len, _node_len, _func_len, _arg_len, _action);
Expand Down Expand Up @@ -497,10 +497,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UA;
IpAddress _adj = IpAddress("2001:db8:1::1");

Expand Down Expand Up @@ -547,10 +547,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UDX6;
IpAddress _adj = IpAddress("2001:db8:1::1");

Expand Down Expand Up @@ -597,10 +597,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UDX4;
IpAddress _adj = IpAddress("10.0.0.1");

Expand Down Expand Up @@ -647,10 +647,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UDT4;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -697,10 +697,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UDT6;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -747,10 +747,10 @@ namespace ut_fpmsyncd

/* Create a Netlink object containing an SRv6 Local SID */
IpAddress _localsid = IpAddress("fc00:0:1:1::");
uint8_t _block_len = 32;
uint8_t _node_len = 16;
uint8_t _func_len = 16;
uint8_t _arg_len = 0;
int8_t _block_len = 32;
int8_t _node_len = 16;
int8_t _func_len = 16;
int8_t _arg_len = 0;
uint32_t _action = SRV6_LOCALSID_ACTION_UDT46;
char *_vrf = "Vrf10";

Expand Down Expand Up @@ -789,4 +789,99 @@ namespace ut_fpmsyncd
/* Destroy the Netlink object and free the memory */
free_nlobj(nl_obj);
}

/* Test Receiving a route containing an invalid SRv6 Local SID */
TEST_F(FpmSyncdSRv6LocalSIDsTest, RecevingRouteWithSRv6LocalSIDInvalid)
{
ASSERT_NE(m_routeSync, nullptr);

struct nlmsg *nl_obj;
IpAddress _localsid = IpAddress("fc00:0:1:1::");
int8_t _block_len;
int8_t _node_len;
int8_t _func_len;
int8_t _arg_len;
uint32_t _action = SRV6_LOCALSID_ACTION_UN;
std::string action;

/* Create a Netlink object containing an SRv6 Local SID with missing block length */
_block_len = -1;
_node_len = 16;
_func_len = 16;
_arg_len = 0;

nl_obj = create_srv6_localsid_nlmsg(RTM_NEWSRV6LOCALSID, &_localsid, _block_len, _node_len, _func_len, _arg_len, _action);
if (!nl_obj)
printf("Error\n\n");

/* Send the Netlink object to the FpmLink */
m_fpmLink->processRawMsg(&nl_obj->n);

/* Ensure that fpmsyncd does not create an entry in APP_DB (because local SID is invalid)*/
ASSERT_EQ(m_srv6LocalSidTable->hget("32:16:16:0:fc00:0:1:1::", "action", action), false);

/* Destroy the Netlink object and free the memory */
free_nlobj(nl_obj);


/* Create a Netlink object containing an SRv6 Local SID with missing node length */
_block_len = 32;
_node_len = -1;
_func_len = 16;
_arg_len = 0;

nl_obj = create_srv6_localsid_nlmsg(RTM_NEWSRV6LOCALSID, &_localsid, _block_len, _node_len, _func_len, _arg_len, _action);
if (!nl_obj)
printf("Error\n\n");

/* Send the Netlink object to the FpmLink */
m_fpmLink->processRawMsg(&nl_obj->n);

/* Ensure that fpmsyncd does not create an entry in APP_DB (because local SID is invalid)*/
ASSERT_EQ(m_srv6LocalSidTable->hget("32:16:16:0:fc00:0:1:1::", "action", action), false);

/* Destroy the Netlink object and free the memory */
free_nlobj(nl_obj);


/* Create a Netlink object containing an SRv6 Local SID with missing function length */
_block_len = 32;
_node_len = 16;
_func_len = -1;
_arg_len = 0;

nl_obj = create_srv6_localsid_nlmsg(RTM_NEWSRV6LOCALSID, &_localsid, _block_len, _node_len, _func_len, _arg_len, _action);
if (!nl_obj)
printf("Error\n\n");

/* Send the Netlink object to the FpmLink */
m_fpmLink->processRawMsg(&nl_obj->n);

/* Ensure that fpmsyncd does not create an entry in APP_DB (because local SID is invalid)*/
ASSERT_EQ(m_srv6LocalSidTable->hget("32:16:16:0:fc00:0:1:1::", "action", action), false);

/* Destroy the Netlink object and free the memory */
free_nlobj(nl_obj);


/* Create a Netlink object containing an SRv6 Local SID with missing argument length */
_block_len = 32;
_node_len = 16;
_func_len = 16;
_arg_len = -1;

nl_obj = create_srv6_localsid_nlmsg(RTM_NEWSRV6LOCALSID, &_localsid, _block_len, _node_len, _func_len, _arg_len, _action);
if (!nl_obj)
printf("Error\n\n");

/* Send the Netlink object to the FpmLink */
m_fpmLink->processRawMsg(&nl_obj->n);

/* Check that fpmsyncd created the correct entries in APP_DB (with default argument length)*/
ASSERT_EQ(m_srv6LocalSidTable->hget("32:16:16:0:fc00:0:1:1::", "action", action), true);

/* Destroy the Netlink object and free the memory */
free_nlobj(nl_obj);

}
}
52 changes: 28 additions & 24 deletions tests/mock_tests/fpmsyncd/ut_helpers_fpmsyncd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,10 @@ namespace ut_fpmsyncd
struct nlmsg *create_srv6_localsid_nlmsg(
uint16_t cmd,
IpAddress *localsid,
uint8_t block_len,
uint8_t node_len,
uint8_t func_len,
uint8_t arg_len,
int8_t block_len,
int8_t node_len,
int8_t func_len,
int8_t arg_len,
uint32_t action,
char *vrf,
IpAddress *adj,
Expand Down Expand Up @@ -253,32 +253,36 @@ namespace ut_fpmsyncd
SRV6_LOCALSID_FORMAT);

/* Add block bits length */
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_BLOCK_LEN,
block_len))
return NULL;
if (block_len >= 0)
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_BLOCK_LEN,
block_len))
return NULL;

/* Add node bits length */
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_NODE_LEN,
node_len))
return NULL;
if (node_len >= 0)
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_NODE_LEN,
node_len))
return NULL;

/* Add function bits length */
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_FUNC_LEN,
func_len))
return NULL;
if (func_len >= 0)
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_FUNC_LEN,
func_len))
return NULL;

/* Add argument bits length */
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_ARG_LEN,
arg_len))
return NULL;
if (arg_len >= 0)
if (!nl_attr_put8(
&nl_obj->n, sizeof(*nl_obj),
SRV6_LOCALSID_FORMAT_ARG_LEN,
arg_len))
return NULL;

nl_attr_nest_end(&nl_obj->n, nest);

Expand Down
Loading

0 comments on commit 3802231

Please sign in to comment.