diff options
Diffstat (limited to 'tools/testing/selftests')
| -rw-r--r-- | tools/testing/selftests/Makefile | 8 | ||||
| -rw-r--r-- | tools/testing/selftests/README.txt | 42 | ||||
| -rw-r--r-- | tools/testing/selftests/efivarfs/Makefile | 12 | ||||
| -rw-r--r-- | tools/testing/selftests/efivarfs/create-read.c | 38 | ||||
| -rw-r--r-- | tools/testing/selftests/efivarfs/efivarfs.sh | 139 | ||||
| -rw-r--r-- | tools/testing/selftests/efivarfs/open-unlink.c | 63 |
6 files changed, 301 insertions, 1 deletions
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index 85baf11e2acd..3cc0ad7ae863 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile | |||
| @@ -1,4 +1,10 @@ | |||
| 1 | TARGETS = breakpoints kcmp mqueue vm cpu-hotplug memory-hotplug | 1 | TARGETS = breakpoints |
| 2 | TARGETS += kcmp | ||
| 3 | TARGETS += mqueue | ||
| 4 | TARGETS += vm | ||
| 5 | TARGETS += cpu-hotplug | ||
| 6 | TARGETS += memory-hotplug | ||
| 7 | TARGETS += efivarfs | ||
| 2 | 8 | ||
| 3 | all: | 9 | all: |
| 4 | for TARGET in $(TARGETS); do \ | 10 | for TARGET in $(TARGETS); do \ |
diff --git a/tools/testing/selftests/README.txt b/tools/testing/selftests/README.txt new file mode 100644 index 000000000000..5e2faf9c55d3 --- /dev/null +++ b/tools/testing/selftests/README.txt | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | Linux Kernel Selftests | ||
| 2 | |||
| 3 | The kernel contains a set of "self tests" under the tools/testing/selftests/ | ||
| 4 | directory. These are intended to be small unit tests to exercise individual | ||
| 5 | code paths in the kernel. | ||
| 6 | |||
| 7 | Running the selftests | ||
| 8 | ===================== | ||
| 9 | |||
| 10 | To build the tests: | ||
| 11 | |||
| 12 | $ make -C tools/testing/selftests | ||
| 13 | |||
| 14 | |||
| 15 | To run the tests: | ||
| 16 | |||
| 17 | $ make -C tools/testing/selftests run_tests | ||
| 18 | |||
| 19 | - note that some tests will require root privileges. | ||
| 20 | |||
| 21 | |||
| 22 | To run only tests targetted for a single subsystem: | ||
| 23 | |||
| 24 | $ make -C tools/testing/selftests TARGETS=cpu-hotplug run_tests | ||
| 25 | |||
| 26 | See the top-level tools/testing/selftests/Makefile for the list of all possible | ||
| 27 | targets. | ||
| 28 | |||
| 29 | |||
| 30 | Contributing new tests | ||
| 31 | ====================== | ||
| 32 | |||
| 33 | In general, the rules for for selftests are | ||
| 34 | |||
| 35 | * Do as much as you can if you're not root; | ||
| 36 | |||
| 37 | * Don't take too long; | ||
| 38 | |||
| 39 | * Don't break the build on any architecture, and | ||
| 40 | |||
| 41 | * Don't cause the top-level "make run_tests" to fail if your feature is | ||
| 42 | unconfigured. | ||
diff --git a/tools/testing/selftests/efivarfs/Makefile b/tools/testing/selftests/efivarfs/Makefile new file mode 100644 index 000000000000..29e8c6bc81b0 --- /dev/null +++ b/tools/testing/selftests/efivarfs/Makefile | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | CC = $(CROSS_COMPILE)gcc | ||
| 2 | CFLAGS = -Wall | ||
| 3 | |||
| 4 | test_objs = open-unlink create-read | ||
| 5 | |||
| 6 | all: $(test_objs) | ||
| 7 | |||
| 8 | run_tests: all | ||
| 9 | @/bin/bash ./efivarfs.sh || echo "efivarfs selftests: [FAIL]" | ||
| 10 | |||
| 11 | clean: | ||
| 12 | rm -f $(test_objs) | ||
diff --git a/tools/testing/selftests/efivarfs/create-read.c b/tools/testing/selftests/efivarfs/create-read.c new file mode 100644 index 000000000000..7feef1880968 --- /dev/null +++ b/tools/testing/selftests/efivarfs/create-read.c | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | #include <stdio.h> | ||
| 2 | #include <stdint.h> | ||
| 3 | #include <stdlib.h> | ||
| 4 | #include <unistd.h> | ||
| 5 | #include <sys/types.h> | ||
| 6 | #include <sys/stat.h> | ||
| 7 | #include <fcntl.h> | ||
| 8 | #include <errno.h> | ||
| 9 | #include <string.h> | ||
| 10 | |||
| 11 | int main(int argc, char **argv) | ||
| 12 | { | ||
| 13 | const char *path; | ||
| 14 | char buf[4]; | ||
| 15 | int fd, rc; | ||
| 16 | |||
| 17 | if (argc < 2) { | ||
| 18 | fprintf(stderr, "usage: %s <path>\n", argv[0]); | ||
| 19 | return EXIT_FAILURE; | ||
| 20 | } | ||
| 21 | |||
| 22 | path = argv[1]; | ||
| 23 | |||
| 24 | /* create a test variable */ | ||
| 25 | fd = open(path, O_RDWR | O_CREAT, 0600); | ||
| 26 | if (fd < 0) { | ||
| 27 | perror("open(O_WRONLY)"); | ||
| 28 | return EXIT_FAILURE; | ||
| 29 | } | ||
| 30 | |||
| 31 | rc = read(fd, buf, sizeof(buf)); | ||
| 32 | if (rc != 0) { | ||
| 33 | fprintf(stderr, "Reading a new var should return EOF\n"); | ||
| 34 | return EXIT_FAILURE; | ||
| 35 | } | ||
| 36 | |||
| 37 | return EXIT_SUCCESS; | ||
| 38 | } | ||
diff --git a/tools/testing/selftests/efivarfs/efivarfs.sh b/tools/testing/selftests/efivarfs/efivarfs.sh new file mode 100644 index 000000000000..880cdd5dc63f --- /dev/null +++ b/tools/testing/selftests/efivarfs/efivarfs.sh | |||
| @@ -0,0 +1,139 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | |||
| 3 | efivarfs_mount=/sys/firmware/efi/efivars | ||
| 4 | test_guid=210be57c-9849-4fc7-a635-e6382d1aec27 | ||
| 5 | |||
| 6 | check_prereqs() | ||
| 7 | { | ||
| 8 | local msg="skip all tests:" | ||
| 9 | |||
| 10 | if [ $UID != 0 ]; then | ||
| 11 | echo $msg must be run as root >&2 | ||
| 12 | exit 0 | ||
| 13 | fi | ||
| 14 | |||
| 15 | if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then | ||
| 16 | echo $msg efivarfs is not mounted on $efivarfs_mount >&2 | ||
| 17 | exit 0 | ||
| 18 | fi | ||
| 19 | } | ||
| 20 | |||
| 21 | run_test() | ||
| 22 | { | ||
| 23 | local test="$1" | ||
| 24 | |||
| 25 | echo "--------------------" | ||
| 26 | echo "running $test" | ||
| 27 | echo "--------------------" | ||
| 28 | |||
| 29 | if [ "$(type -t $test)" = 'function' ]; then | ||
| 30 | ( $test ) | ||
| 31 | else | ||
| 32 | ( ./$test ) | ||
| 33 | fi | ||
| 34 | |||
| 35 | if [ $? -ne 0 ]; then | ||
| 36 | echo " [FAIL]" | ||
| 37 | rc=1 | ||
| 38 | else | ||
| 39 | echo " [PASS]" | ||
| 40 | fi | ||
| 41 | } | ||
| 42 | |||
| 43 | test_create() | ||
| 44 | { | ||
| 45 | local attrs='\x07\x00\x00\x00' | ||
| 46 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | ||
| 47 | |||
| 48 | printf "$attrs\x00" > $file | ||
| 49 | |||
| 50 | if [ ! -e $file ]; then | ||
| 51 | echo "$file couldn't be created" >&2 | ||
| 52 | exit 1 | ||
| 53 | fi | ||
| 54 | |||
| 55 | if [ $(stat -c %s $file) -ne 5 ]; then | ||
| 56 | echo "$file has invalid size" >&2 | ||
| 57 | exit 1 | ||
| 58 | fi | ||
| 59 | } | ||
| 60 | |||
| 61 | test_create_empty() | ||
| 62 | { | ||
| 63 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | ||
| 64 | |||
| 65 | : > $file | ||
| 66 | |||
| 67 | if [ ! -e $file ]; then | ||
| 68 | echo "$file can not be created without writing" >&2 | ||
| 69 | exit 1 | ||
| 70 | fi | ||
| 71 | } | ||
| 72 | |||
| 73 | test_create_read() | ||
| 74 | { | ||
| 75 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | ||
| 76 | ./create-read $file | ||
| 77 | } | ||
