lldp/tests: add test for ttl
This commit is contained in:
@@ -105,7 +105,7 @@ typedef struct {
|
|||||||
guint expected_num_called;
|
guint expected_num_called;
|
||||||
gsize frames_len;
|
gsize frames_len;
|
||||||
const TestRecvFrame *frames[10];
|
const TestRecvFrame *frames[10];
|
||||||
void (*check) (NMLldpListener *listener);
|
void (*check) (GMainLoop *loop, NMLldpListener *listener);
|
||||||
} TestRecvData;
|
} TestRecvData;
|
||||||
#define TEST_RECV_DATA_DEFINE(name, _expected_num_called, _check, ...) \
|
#define TEST_RECV_DATA_DEFINE(name, _expected_num_called, _check, ...) \
|
||||||
static const TestRecvData name = { \
|
static const TestRecvData name = { \
|
||||||
@@ -135,7 +135,7 @@ TEST_RECV_FRAME_DEFINE (_test_recv_data0_frame0,
|
|||||||
);
|
);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_test_recv_data0_check (NMLldpListener *listener)
|
_test_recv_data0_check (GMainLoop *loop, NMLldpListener *listener)
|
||||||
{
|
{
|
||||||
GVariant *neighbors, *attr;
|
GVariant *neighbors, *attr;
|
||||||
gs_unref_variant GVariant *neighbor = NULL;
|
gs_unref_variant GVariant *neighbor = NULL;
|
||||||
@@ -232,7 +232,7 @@ TEST_RECV_FRAME_DEFINE (_test_recv_data1_frame0,
|
|||||||
);
|
);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_test_recv_data1_check (NMLldpListener *listener)
|
_test_recv_data1_check (GMainLoop *loop, NMLldpListener *listener)
|
||||||
{
|
{
|
||||||
GVariant *neighbors, *attr;
|
GVariant *neighbors, *attr;
|
||||||
gs_unref_variant GVariant *neighbor = NULL;
|
gs_unref_variant GVariant *neighbor = NULL;
|
||||||
@@ -305,6 +305,48 @@ _test_recv_data1_check (NMLldpListener *listener)
|
|||||||
|
|
||||||
TEST_RECV_DATA_DEFINE (_test_recv_data1, 1, _test_recv_data1_check, &_test_recv_data1_frame0);
|
TEST_RECV_DATA_DEFINE (_test_recv_data1, 1, _test_recv_data1_check, &_test_recv_data1_frame0);
|
||||||
|
|
||||||
|
TEST_RECV_FRAME_DEFINE (_test_recv_data2_frame0_ttl1,
|
||||||
|
/* Ethernet header */
|
||||||
|
0x01, 0x80, 0xc2, 0x00, 0x00, 0x03, /* Destination MAC */
|
||||||
|
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /* Source MAC */
|
||||||
|
0x88, 0xcc, /* Ethertype */
|
||||||
|
/* LLDP mandatory TLVs */
|
||||||
|
0x02, 0x07, 0x04, 0x00, 0x01, 0x02, /* Chassis: MAC, 00:01:02:03:04:05 */
|
||||||
|
0x03, 0x04, 0x05,
|
||||||
|
0x04, 0x04, 0x05, 0x31, 0x2f, 0x33, /* Port: interface name, "1/3" */
|
||||||
|
0x06, 0x02, 0x00, 0x01, /* TTL: 1 seconds */
|
||||||
|
/* LLDP optional TLVs */
|
||||||
|
0x08, 0x04, 0x50, 0x6f, 0x72, 0x74, /* Port Description: "Port" */
|
||||||
|
0x0a, 0x03, 0x53, 0x59, 0x53, /* System Name: "SYS" */
|
||||||
|
0x0c, 0x04, 0x66, 0x6f, 0x6f, 0x00, /* System Description: "foo" (NULL-terminated) */
|
||||||
|
0x00, 0x00 /* End Of LLDPDU */
|
||||||
|
);
|
||||||
|
|
||||||
|
static void
|
||||||
|
_test_recv_data2_ttl1_check (GMainLoop *loop, NMLldpListener *listener)
|
||||||
|
{
|
||||||
|
gulong notify_id;
|
||||||
|
GVariant *neighbors;
|
||||||
|
|
||||||
|
_test_recv_data0_check (loop, listener);
|
||||||
|
|
||||||
|
g_test_skip ("the test is known to fail");
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* wait for signal. */
|
||||||
|
notify_id = g_signal_connect (listener, "notify::" NM_LLDP_LISTENER_NEIGHBORS,
|
||||||
|
nmtst_main_loop_quit_on_notify, loop);
|
||||||
|
if (!nmtst_main_loop_run (loop, 20000))
|
||||||
|
g_assert_not_reached ();
|
||||||
|
nm_clear_g_signal_handler (listener, ¬ify_id);
|
||||||
|
|
||||||
|
neighbors = nm_lldp_listener_get_neighbors (listener);
|
||||||
|
nmtst_assert_variant_is_of_type (neighbors, G_VARIANT_TYPE ("aa{sv}"));
|
||||||
|
g_assert_cmpint (g_variant_n_children (neighbors), ==, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_RECV_DATA_DEFINE (_test_recv_data2_ttl1, 1, _test_recv_data2_ttl1_check, &_test_recv_data2_frame0_ttl1);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_test_recv_fixture_setup (TestRecvFixture *fixture, gconstpointer user_data)
|
_test_recv_fixture_setup (TestRecvFixture *fixture, gconstpointer user_data)
|
||||||
{
|
{
|
||||||
@@ -353,13 +395,14 @@ test_recv (TestRecvFixture *fixture, gconstpointer user_data)
|
|||||||
GMainLoop *loop;
|
GMainLoop *loop;
|
||||||
TestRecvCallbackInfo info = { };
|
TestRecvCallbackInfo info = { };
|
||||||
gsize i_frames;
|
gsize i_frames;
|
||||||
|
gulong notify_id;
|
||||||
|
|
||||||
listener = nm_lldp_listener_new ();
|
listener = nm_lldp_listener_new ();
|
||||||
g_assert (listener != NULL);
|
g_assert (listener != NULL);
|
||||||
g_assert (nm_lldp_listener_start (listener, fixture->ifindex, TEST_IFNAME, fixture->mac, ETH_ALEN, NULL));
|
g_assert (nm_lldp_listener_start (listener, fixture->ifindex, TEST_IFNAME, fixture->mac, ETH_ALEN, NULL));
|
||||||
|
|
||||||
g_signal_connect (listener, "notify::" NM_LLDP_LISTENER_NEIGHBORS,
|
notify_id = g_signal_connect (listener, "notify::" NM_LLDP_LISTENER_NEIGHBORS,
|
||||||
(GCallback) lldp_neighbors_changed, &info);
|
(GCallback) lldp_neighbors_changed, &info);
|
||||||
loop = g_main_loop_new (NULL, FALSE);
|
loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
|
||||||
for (i_frames = 0; i_frames < data->frames_len; i_frames++) {
|
for (i_frames = 0; i_frames < data->frames_len; i_frames++) {
|
||||||
@@ -373,7 +416,9 @@ test_recv (TestRecvFixture *fixture, gconstpointer user_data)
|
|||||||
|
|
||||||
g_assert_cmpint (info.num_called, ==, data->expected_num_called);
|
g_assert_cmpint (info.num_called, ==, data->expected_num_called);
|
||||||
|
|
||||||
data->check (listener);
|
nm_clear_g_signal_handler (listener, ¬ify_id);
|
||||||
|
|
||||||
|
data->check (loop, listener);
|
||||||
|
|
||||||
g_clear_pointer (&loop, g_main_loop_unref);
|
g_clear_pointer (&loop, g_main_loop_unref);
|
||||||
}
|
}
|
||||||
@@ -400,4 +445,5 @@ setup_tests (void)
|
|||||||
_TEST_ADD_RECV ("/lldp/recv/0", &_test_recv_data0);
|
_TEST_ADD_RECV ("/lldp/recv/0", &_test_recv_data0);
|
||||||
_TEST_ADD_RECV ("/lldp/recv/0_twice", &_test_recv_data0_twice);
|
_TEST_ADD_RECV ("/lldp/recv/0_twice", &_test_recv_data0_twice);
|
||||||
_TEST_ADD_RECV ("/lldp/recv/1", &_test_recv_data1);
|
_TEST_ADD_RECV ("/lldp/recv/1", &_test_recv_data1);
|
||||||
|
_TEST_ADD_RECV ("/lldp/recv/2_ttl1", &_test_recv_data2_ttl1);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user