1# SPDX-License-Identifier: GPL-2.0
2# (C) Copyright 2023, Advanced Micro Devices, Inc.
3
4import pytest
5
6"""
7Note: This test relies on boardenv_* containing configuration values to define
8the SCSI device number, type and capacity. This test will be automatically
9skipped without this.
10
11For example:
12
13# Setup env__scsi_device_test to set the SCSI device number/slot, the type of
14device, and the device capacity in MB.
15env__scsi_device_test = {
16    'dev_num': 0,
17    'device_type': 'Hard Disk',
18    'device_capacity': '476940.0 MB',
19}
20"""
21
22def scsi_setup(ubman):
23    f = ubman.config.env.get('env__scsi_device_test', None)
24    if not f:
25        pytest.skip('No SCSI device to test')
26
27    dev_num = f.get('dev_num', None)
28    if not isinstance(dev_num, int):
29        pytest.skip('No device number specified in env file to read')
30
31    dev_type = f.get('device_type')
32    if not dev_type:
33        pytest.skip('No device type specified in env file to read')
34
35    dev_size = f.get('device_capacity')
36    if not dev_size:
37        pytest.skip('No device capacity specified in env file to read')
38
39    return dev_num, dev_type, dev_size
40
41@pytest.mark.buildconfigspec('cmd_scsi')
42def test_scsi_reset(ubman):
43    dev_num, dev_type, dev_size = scsi_setup(ubman)
44    output = ubman.run_command('scsi reset')
45    assert f'Device {dev_num}:' in output
46    assert f'Type: {dev_type}' in output
47    assert f'Capacity: {dev_size}' in output
48    output = ubman.run_command('echo $?')
49    assert output.endswith('0')
50
51@pytest.mark.buildconfigspec('cmd_scsi')
52def test_scsi_info(ubman):
53    dev_num, dev_type, dev_size = scsi_setup(ubman)
54    output = ubman.run_command('scsi info')
55    assert f'Device {dev_num}:' in output
56    assert f'Type: {dev_type}' in output
57    assert f'Capacity: {dev_size}' in output
58    output = ubman.run_command('echo $?')
59    assert output.endswith('0')
60
61@pytest.mark.buildconfigspec('cmd_scsi')
62def test_scsi_scan(ubman):
63    dev_num, dev_type, dev_size = scsi_setup(ubman)
64    output = ubman.run_command('scsi scan')
65    assert f'Device {dev_num}:' in output
66    assert f'Type: {dev_type}' in output
67    assert f'Capacity: {dev_size}' in output
68    output = ubman.run_command('echo $?')
69    assert output.endswith('0')
70
71@pytest.mark.buildconfigspec('cmd_scsi')
72def test_scsi_dev(ubman):
73    dev_num, dev_type, dev_size = scsi_setup(ubman)
74    output = ubman.run_command('scsi device')
75    assert 'no scsi devices available' not in output
76    assert f'device {dev_num}:' in output
77    assert f'Type: {dev_type}' in output
78    assert f'Capacity: {dev_size}' in output
79    output = ubman.run_command('echo $?')
80    assert output.endswith('0')
81    output = ubman.run_command('scsi device %d' % dev_num)
82    assert 'is now current device' in output
83    output = ubman.run_command('echo $?')
84    assert output.endswith('0')
85
86@pytest.mark.buildconfigspec('cmd_scsi')
87def test_scsi_part(ubman):
88    test_scsi_dev(ubman)
89    output = ubman.run_command('scsi part')
90    assert 'Partition Map for scsi device' in output
91    output = ubman.run_command('echo $?')
92    assert output.endswith('0')
93