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