| 1 | |
| 2 | #include <stdio.h>
|
| 3 | #include <string.h>
|
| 4 |
|
| 5 | #include <ynl.h>
|
| 6 |
|
| 7 | #include <kselftest_harness.h>
|
| 8 |
|
| 9 | #include "devlink-user.h"
|
| 10 |
|
| 11 | FIXTURE(devlink)
|
| 12 | {
|
| 13 | struct ynl_sock *ys;
|
| 14 | };
|
| 15 |
|
| 16 | FIXTURE_SETUP(devlink)
|
| 17 | {
|
| 18 | self->ys = ynl_sock_create(&ynl_devlink_family, NULL);
|
| 19 | ASSERT_NE(NULL, self->ys)
|
| 20 | TH_LOG("failed to create devlink socket");
|
| 21 | }
|
| 22 |
|
| 23 | FIXTURE_TEARDOWN(devlink)
|
| 24 | {
|
| 25 | ynl_sock_destroy(self->ys);
|
| 26 | }
|
| 27 |
|
| 28 | TEST_F(devlink, dump)
|
| 29 | {
|
| 30 | struct devlink_get_list *devs;
|
| 31 |
|
| 32 | devs = devlink_get_dump(self->ys);
|
| 33 | ASSERT_NE(NULL, devs) {
|
| 34 | TH_LOG("dump failed: %s", self->ys->err.msg);
|
| 35 | }
|
| 36 |
|
| 37 | if (ynl_dump_empty(devs)) {
|
| 38 | devlink_get_list_free(devs);
|
| 39 | SKIP(return, "no entries in dump");
|
| 40 | }
|
| 41 |
|
| 42 | ynl_dump_foreach(devs, d) {
|
| 43 | EXPECT_TRUE((bool)d->_len.bus_name);
|
| 44 | EXPECT_TRUE((bool)d->_len.dev_name);
|
| 45 | ksft_print_msg("%s/%s\n", d->bus_name, d->dev_name);
|
| 46 | }
|
| 47 |
|
| 48 | devlink_get_list_free(devs);
|
| 49 | }
|
| 50 |
|
| 51 | TEST_F(devlink, info)
|
| 52 | {
|
| 53 | struct devlink_get_list *devs;
|
| 54 |
|
| 55 | devs = devlink_get_dump(self->ys);
|
| 56 | ASSERT_NE(NULL, devs) {
|
| 57 | TH_LOG("dump failed: %s", self->ys->err.msg);
|
| 58 | }
|
| 59 |
|
| 60 | if (ynl_dump_empty(devs)) {
|
| 61 | devlink_get_list_free(devs);
|
| 62 | SKIP(return, "no devices to query");
|
| 63 | }
|
| 64 |
|
| 65 | ynl_dump_foreach(devs, d) {
|
| 66 | struct devlink_info_get_req *info_req;
|
| 67 | struct devlink_info_get_rsp *info_rsp;
|
| 68 | unsigned int i;
|
| 69 |
|
| 70 | EXPECT_TRUE((bool)d->_len.bus_name);
|
| 71 | EXPECT_TRUE((bool)d->_len.dev_name);
|
| 72 | ksft_print_msg("%s/%s:\n", d->bus_name, d->dev_name);
|
| 73 |
|
| 74 | info_req = devlink_info_get_req_alloc();
|
| 75 | ASSERT_NE(NULL, info_req);
|
| 76 | devlink_info_get_req_set_bus_name(info_req, d->bus_name);
|
| 77 | devlink_info_get_req_set_dev_name(info_req, d->dev_name);
|
| 78 |
|
| 79 | info_rsp = devlink_info_get(self->ys, info_req);
|
| 80 | devlink_info_get_req_free(info_req);
|
| 81 | ASSERT_NE(NULL, info_rsp) {
|
| 82 | devlink_get_list_free(devs);
|
| 83 | TH_LOG("info_get failed: %s", self->ys->err.msg);
|
| 84 | }
|
| 85 |
|
| 86 | EXPECT_TRUE((bool)info_rsp->_len.info_driver_name);
|
| 87 | if (info_rsp->_len.info_driver_name)
|
| 88 | ksft_print_msg(" driver: %s\n",
|
| 89 | info_rsp->info_driver_name);
|
| 90 | if (info_rsp->_count.info_version_running)
|
| 91 | ksft_print_msg(" running fw:\n");
|
| 92 | for (i = 0; i < info_rsp->_count.info_version_running; i++)
|
| 93 | ksft_print_msg(" %s: %s\n",
|
| 94 | info_rsp->info_version_running[i].info_version_name,
|
| 95 | info_rsp->info_version_running[i].info_version_value);
|
| 96 | devlink_info_get_rsp_free(info_rsp);
|
| 97 | }
|
| 98 | devlink_get_list_free(devs);
|
| 99 | }
|
| 100 |
|
| 101 | TEST_HARNESS_MAIN
|