#include <net/if.h>
+#include <kselftest_harness.h>
+
#include "ethtool-user.h"
-int main(int argc, char **argv)
+FIXTURE(ethtool)
+{
+ struct ynl_sock *ys;
+};
+
+FIXTURE_SETUP(ethtool)
+{
+ self->ys = ynl_sock_create(&ynl_ethtool_family, NULL);
+ ASSERT_NE(NULL, self->ys)
+ TH_LOG("failed to create ethtool socket");
+}
+
+FIXTURE_TEARDOWN(ethtool)
+{
+ ynl_sock_destroy(self->ys);
+}
+
+TEST_F(ethtool, channels)
{
struct ethtool_channels_get_req_dump creq = {};
- struct ethtool_rings_get_req_dump rreq = {};
struct ethtool_channels_get_list *channels;
- struct ethtool_rings_get_list *rings;
- struct ynl_sock *ys;
- ys = ynl_sock_create(&ynl_ethtool_family, NULL);
- if (!ys)
- return 1;
+ creq._present.header = 1; /* ethtool needs an empty nest */
+ channels = ethtool_channels_get_dump(self->ys, &creq);
+ ASSERT_NE(NULL, channels) {
+ TH_LOG("channels dump failed: %s", self->ys->err.msg);
+ }
- creq._present.header = 1; /* ethtool needs an empty nest, sigh */
- channels = ethtool_channels_get_dump(ys, &creq);
- if (!channels)
- goto err_close;
+ if (ynl_dump_empty(channels)) {
+ ethtool_channels_get_list_free(channels);
+ SKIP(return, "no entries in channels dump");
+ }
- printf("Channels:\n");
ynl_dump_foreach(channels, dev) {
- printf(" %8s: ", dev->header.dev_name);
+ EXPECT_TRUE((bool)dev->header._len.dev_name);
+ ksft_print_msg("%8s: ", dev->header.dev_name);
+ EXPECT_TRUE(dev->_present.rx_count ||
+ dev->_present.tx_count ||
+ dev->_present.combined_count);
if (dev->_present.rx_count)
printf("rx %d ", dev->rx_count);
if (dev->_present.tx_count)
printf("\n");
}
ethtool_channels_get_list_free(channels);
+}
- rreq._present.header = 1; /* ethtool needs an empty nest.. */
- rings = ethtool_rings_get_dump(ys, &rreq);
- if (!rings)
- goto err_close;
+TEST_F(ethtool, rings)
+{
+ struct ethtool_rings_get_req_dump rreq = {};
+ struct ethtool_rings_get_list *rings;
+
+ rreq._present.header = 1; /* ethtool needs an empty nest */
+ rings = ethtool_rings_get_dump(self->ys, &rreq);
+ ASSERT_NE(NULL, rings) {
+ TH_LOG("rings dump failed: %s", self->ys->err.msg);
+ }
+
+ if (ynl_dump_empty(rings)) {
+ ethtool_rings_get_list_free(rings);
+ SKIP(return, "no entries in rings dump");
+ }
- printf("Rings:\n");
ynl_dump_foreach(rings, dev) {
- printf(" %8s: ", dev->header.dev_name);
+ EXPECT_TRUE((bool)dev->header._len.dev_name);
+ ksft_print_msg("%8s: ", dev->header.dev_name);
+ EXPECT_TRUE(dev->_present.rx || dev->_present.tx);
if (dev->_present.rx)
printf("rx %d ", dev->rx);
if (dev->_present.tx)
printf("\n");
}
ethtool_rings_get_list_free(rings);
-
- ynl_sock_destroy(ys);
-
- return 0;
-
-err_close:
- fprintf(stderr, "YNL (%d): %s\n", ys->err.code, ys->err.msg);
- ynl_sock_destroy(ys);
- return 2;
}
+
+TEST_HARNESS_MAIN