Skip to content

Commit 5bd8e58

Browse files
committed
CI: Add workflow for running tests on real nvme device
Introducing a GitHub workflow which runs all test cases under the `tests` directory on real hardware through a self-hosted runner. This workflow is triggerd nightly or on demand as the tests run about an hour. Signed-off-by: Dennis Maisenbacher <dennis.maisenbacher@wdc.com>
1 parent a0dbad8 commit 5bd8e58

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
name: run-nightly-tests
3+
4+
on:
5+
workflow_dispatch:
6+
schedule:
7+
- cron: '0 01 * * *'
8+
9+
jobs:
10+
nightly-tests:
11+
runs-on: nvme-nvm
12+
steps:
13+
- name: Output kernel version
14+
run: |
15+
uname -a
16+
- name: Clean up test device
17+
run: |
18+
#BDEV0 is an environment variable of the self-hosted runner instance
19+
#that contains a valid nvme ctrl name which is capable of the nvm
20+
#command set.
21+
CONTROLLER=$(echo /dev/${BDEV0} | sed 's/n[0-9]*$//')
22+
sudo nvme delete-ns $CONTROLLER -n 0xffffffff
23+
sudo nvme format $CONTROLLER -n 0xffffffff -l 0 -f
24+
SIZE=$(sudo nvme id-ctrl $CONTROLLER | grep tnvmcap | sed 's/^tnvmcap : //g' | sed 's/,//g' | awk '{print $1/512}')
25+
sudo nvme create-ns -s $SIZE -c $SIZE -f 0 -d 0 --csi=0 $CONTROLLER
26+
sudo nvme attach-ns $CONTROLLER -n 1 -c 0
27+
- uses: actions/checkout@v4
28+
- name: Install dependencies
29+
run: |
30+
sudo apt-get update
31+
sudo apt-get install --no-install-recommends -y \
32+
meson gcc pkg-config git libjson-c-dev libssl-dev libkeyutils-dev \
33+
libdbus-1-dev libpython3-dev pipx python3-dev swig xz-utils
34+
pipx ensurepath
35+
sudo PIPX_BIN_DIR=/usr/local/bin pipx install nose2
36+
sudo PIPX_BIN_DIR=/usr/local/bin pipx install flake8
37+
sudo PIPX_BIN_DIR=/usr/local/bin pipx install mypy
38+
sudo PIPX_BIN_DIR=/usr/local/bin pipx install autopep8
39+
sudo PIPX_BIN_DIR=/usr/local/bin pipx install isort
40+
- name: Build and install nvme-cli
41+
run: |
42+
scripts/build.sh -b release -c gcc
43+
sudo meson install -C .build-ci
44+
sudo ldconfig /usr/local/lib64
45+
- name: Overwrite test config
46+
run: |
47+
CONTROLLER=$(echo /dev/${BDEV0} | sed 's/n[0-9]*$//')
48+
cat > tests/config.json << EOF
49+
{
50+
"controller" : "$CONTROLLER",
51+
"ns1": "/dev/${BDEV0}",
52+
"log_dir": "tests/nvmetests/"
53+
}
54+
EOF
55+
- name: Run on device tests
56+
run: |
57+
sudo nose2 --verbose --start-dir tests \
58+
nvme_attach_detach_ns_test \
59+
nvme_compare_test \
60+
nvme_copy_test \
61+
nvme_create_max_ns_test \
62+
nvme_ctrl_reset_test \
63+
nvme_dsm_test \
64+
nvme_error_log_test \
65+
nvme_flush_test \
66+
nvme_format_test \
67+
nvme_fw_log_test \
68+
nvme_get_features_test \
69+
nvme_get_lba_status_test \
70+
nvme_id_ctrl_test \
71+
nvme_id_ns_test \
72+
nvme_lba_status_log_test \
73+
nvme_read_write_test \
74+
nvme_smart_log_test \
75+
nvme_verify_test \
76+
nvme_writeuncor_test \
77+
nvme_writezeros_test
78+
- name: Upload logs
79+
uses: actions/upload-artifact@v4
80+
if: always()
81+
with:
82+
name: logs files
83+
path: |
84+
./tests/nvmetests/**/*.log
85+
- name: Clean up test device
86+
if: always()
87+
run: |
88+
CONTROLLER=$(echo /dev/${BDEV0} | sed 's/n[0-9]*$//')
89+
sudo nvme delete-ns $CONTROLLER -n 0xffffffff
90+
sudo nvme format $CONTROLLER -n 0xffffffff -l 0 -f
91+
SIZE=$(sudo nvme id-ctrl $CONTROLLER | grep tnvmcap | sed 's/^tnvmcap : //g' | sed 's/,//g' | awk '{print $1/512}')
92+
sudo nvme create-ns -s $SIZE -c $SIZE -f 0 -d 0 --csi=0 $CONTROLLER
93+
sudo nvme attach-ns $CONTROLLER -n 1 -c 0

0 commit comments

Comments
 (0)