xref: /linux/tools/testing/selftests/drivers/net/psp.py (revision 8a5f956a9fb7d74fff681145082acfad5afa6bb8)
1#!/usr/bin/env python3
2# SPDX-License-Identifier: GPL-2.0
3
4"""Test suite for PSP capable drivers."""
5
6import errno
7
8from lib.py import defer
9from lib.py import ksft_run, ksft_exit
10from lib.py import ksft_true, ksft_eq
11from lib.py import KsftSkipEx
12from lib.py import NetDrvEpEnv, PSPFamily, NlError
13
14#
15# Test case boiler plate
16#
17
18def _init_psp_dev(cfg):
19    if not hasattr(cfg, 'psp_dev_id'):
20        # Figure out which local device we are testing against
21        for dev in cfg.pspnl.dev_get({}, dump=True):
22            if dev['ifindex'] == cfg.ifindex:
23                cfg.psp_info = dev
24                cfg.psp_dev_id = cfg.psp_info['id']
25                break
26        else:
27            raise KsftSkipEx("No PSP devices found")
28
29    # Enable PSP if necessary
30    cap = cfg.psp_info['psp-versions-cap']
31    ena = cfg.psp_info['psp-versions-ena']
32    if cap != ena:
33        cfg.pspnl.dev_set({'id': cfg.psp_dev_id, 'psp-versions-ena': cap})
34        defer(cfg.pspnl.dev_set, {'id': cfg.psp_dev_id,
35                                  'psp-versions-ena': ena })
36
37#
38# Test cases
39#
40
41def dev_list_devices(cfg):
42    """ Dump all devices """
43    _init_psp_dev(cfg)
44
45    devices = cfg.pspnl.dev_get({}, dump=True)
46
47    found = False
48    for dev in devices:
49        found |= dev['id'] == cfg.psp_dev_id
50    ksft_true(found)
51
52
53def dev_get_device(cfg):
54    """ Get the device we intend to use """
55    _init_psp_dev(cfg)
56
57    dev = cfg.pspnl.dev_get({'id': cfg.psp_dev_id})
58    ksft_eq(dev['id'], cfg.psp_dev_id)
59
60
61def dev_get_device_bad(cfg):
62    """ Test getting device which doesn't exist """
63    raised = False
64    try:
65        cfg.pspnl.dev_get({'id': 1234567})
66    except NlError as e:
67        ksft_eq(e.nl_msg.error, -errno.ENODEV)
68        raised = True
69    ksft_true(raised)
70
71
72def main() -> None:
73    """ Ksft boiler plate main """
74
75    with NetDrvEpEnv(__file__) as cfg:
76        cfg.pspnl = PSPFamily()
77
78        ksft_run(globs=globals(), case_pfx={"dev_",}, args=(cfg, ))
79    ksft_exit()
80
81
82if __name__ == "__main__":
83    main()
84