浏览代码

Improve CI pipeline to automate module testing (#95)

The script executes insmod/rmmod twice with available kernel modules.

Close #72
fennecJ 3 年之前
父节点
当前提交
3fcbb8e182
共有 4 个文件被更改,包括 41 次插入5 次删除
  1. 30 0
      .ci/build-n-run.sh
  2. 3 0
      .ci/non-working
  3. 4 3
      .github/workflows/generate_doc.yaml
  4. 4 2
      examples/Makefile

+ 30 - 0
.ci/build-n-run.sh

@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+function build_example()
+{   
+    make -C examples || exit 1
+}
+
+function list_mod()
+{
+    #following list will contain all file names which are not specified in file non-working.
+    echo `ls examples/*.ko | awk -F "[/|.]" '{print $2}' | grep -vFxf .ci/non-working`
+}
+
+#test module 2 times
+function run_mod()
+{
+    ( sudo insmod "examples/$1.ko" && sudo rmmod "$1" ) || exit 1;
+    ( sudo insmod "examples/$1.ko" && sudo rmmod "$1" ) || exit 1;
+}
+
+function run_examples()
+{
+    for module in $(list_mod); do
+        echo "$module"
+        run_mod "$module"
+    done
+}
+
+build_example
+run_examples

+ 3 - 0
.ci/non-working

@@ -0,0 +1,3 @@
+bottomhalf
+intrpt
+kbleds

+ 4 - 3
.github/workflows/generate_doc.yaml

@@ -36,13 +36,14 @@ jobs:
           tag_name: "latest"
           prerelease: true
 
-  coding_style:
+  validate:
     runs-on: ubuntu-20.04
     steps:
       - name: checkout code
         uses: actions/checkout@v2
-      - name: style check
+      - name: validate coding style and functionality
         run: |
             sudo apt-get install -q -y clang-format-11
             sh .ci/check-format.sh
-        shell: bash
+            bash .ci/build-n-run.sh
+        shell: bash

+ 4 - 2
examples/Makefile

@@ -3,8 +3,8 @@ obj-m += hello-2.o
 obj-m += hello-3.o
 obj-m += hello-4.o
 obj-m += hello-5.o
-obj-m += start.o
-obj-m += stop.o
+obj-m += startstop.o
+startstop-objs := start.o stop.o
 obj-m += chardev.o
 obj-m += procfs1.o
 obj-m += procfs2.o
@@ -30,6 +30,8 @@ obj-m += example_mutex.o
 obj-m += bottomhalf.o
 obj-m += ioctl.o
 
+PWD := $(CURDIR)
+
 all:
 	$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules