[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH 1/2] tests: Testinfrastruktur für libc angelegt



On 25.09.2011 22:54, Kevin Wolf wrote:
> + tests: Eine Umgebung, in der Tests ausgeführt werden können
>   (größtenteils aus dem LIOv2-Branch übernommen)
> 
> Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
> ---
>  tests/include/testlib.h |   46 ++++++++++++++++++++++++++++++++++++
>  tests/lib/testlib.c     |   59 +++++++++++++++++++++++++++++++++++++++++++++++
>  tests/libc/Makefile     |   21 ++++++++++++++++
>  tests/libc/main.c       |   58 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/libc/run_test.sh  |   25 ++++++++++++++++++++
>  5 files changed, 209 insertions(+), 0 deletions(-)
>  create mode 100644 tests/.nobuild
>  create mode 100644 tests/include/testlib.h
>  create mode 100644 tests/lib/testlib.c
>  create mode 100644 tests/libc/Makefile
>  create mode 100644 tests/libc/main.c
>  create mode 100755 tests/libc/run_test.sh
> 
> diff --git a/tests/.nobuild b/tests/.nobuild
> new file mode 100644
> index 0000000..e69de29
> diff --git a/tests/include/testlib.h b/tests/include/testlib.h
> new file mode 100644
> index 0000000..4bc47bb
> --- /dev/null
> +++ b/tests/include/testlib.h
> @@ -0,0 +1,46 @@
> +/*
> + * Copyright (c) 2011 The tyndur Project. All rights reserved.
> + *
> + * This code is derived from software contributed to the tyndur Project
> + * by Kevin Wolf.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
> + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#ifndef TESTLIB_H
> +#define TESTLIB_H
> +
> +#include <stdbool.h>
> +
> +extern const char* test_name;
> +
> +void __attribute__((noreturn)) quit_qemu(void);
> +void _test_assert(bool expr, const char* text, int line);
> +void _test_assert_nonfatal(bool expr, const char* text, int line);
> +
> +#define test_assert(x) \
> +    _test_assert((x), #x, __LINE__)
> +
> +#define test_assert_nonfatal(x) \
> +    _test_assert_nonfatal((x), #x, __LINE__)
> +
> +#endif
> diff --git a/tests/lib/testlib.c b/tests/lib/testlib.c
> new file mode 100644
> index 0000000..450d25b
> --- /dev/null
> +++ b/tests/lib/testlib.c
> @@ -0,0 +1,59 @@
> +/*
> + * Copyright (c) 2011 The tyndur Project. All rights reserved.
> + *
> + * This code is derived from software contributed to the tyndur Project
> + * by Kevin Wolf.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
> + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#include "testlib.h"
> +
> +#include <syscall.h>
> +#include <ports.h>
> +#include <stdio.h>
> +
> +void __attribute__((noreturn)) quit_qemu(void)
> +{
> +    request_ports(0xb000, 8);
> +    outw(0xb004, 0x2000);
> +
> +    /* Wird nie erreicht */
> +    while(1) {
> +        asm volatile("ud2");
> +    }
> +}
> +
> +void _test_assert(bool expr, const char* text, int line)
> +{
> +    if (!expr) {
> +        printf("* FAIL %s: %s [" __FILE__ ":%d]\n", test_name, text, line);
> +        quit_qemu();
> +    }
> +}
> +
> +void _test_assert_nonfatal(bool expr, const char* text, int line)
> +{
> +    if (!expr) {
> +        printf("* FAIL %s: %s [" __FILE__ ":%d]\n", test_name, text, line);
> +    }
> +}
> diff --git a/tests/libc/Makefile b/tests/libc/Makefile
> new file mode 100644
> index 0000000..32f39b4
> --- /dev/null
> +++ b/tests/libc/Makefile
> @@ -0,0 +1,21 @@
> +-include ../../Makefile.local
> +
> +QEMU=qemu
> +CC=$(CC_BINARY)
> +LD=$(LD_BINARY)
LD_BINARY gibts bei mir nicht

> +
> +LIBGCC=$(shell $(CC) -print-libgcc-file-name)
> +
> +CFLAGS=-I ../include -I ../../src/include -I../../src/modules/include -I ../../src/include/arch/i386 -I../../src/modules/include/arch/i386
> +LDFLAGS=-T ../../src/modules/user-i386.ld --start-group ../../src/lib/library.a ../../src/modules/lib/library.a ../../src/modules/lib/crt0.o $(LIBGCC) --end-group
> +
> +qemu: main
> +	@./run_test.sh
> +
> +main: main.o ../lib/testlib.o
> +	@$(LD) $^ $(LDFLAGS) -o $@
> +
> +%.o: %.c
> +	@$(CC) $(CFLAGS) -o $@ $^
> +
> +.PHONY: qemu
> diff --git a/tests/libc/main.c b/tests/libc/main.c
> new file mode 100644
> index 0000000..355ad0b
> --- /dev/null
> +++ b/tests/libc/main.c
> @@ -0,0 +1,58 @@
> +/*
> + * Copyright (c) 2011 The tyndur Project. All rights reserved.
> + *
> + * This code is derived from software contributed to the tyndur Project
> + * by Kevin Wolf.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
> + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +
> +#include "testlib.h"
> +
> +const char* test_name;
> +
> +static void test1(void)
> +{
> +}
> +
> +int main(int argc, char* argv[])
> +{
> +    if (argc < 2) {
> +        printf("* ERROR Zu wenige Parameter\n");
> +        quit_qemu();
> +    }
> +
> +    switch (atoi(argv[1])) {
> +        case 1:
> +            test1();
> +            break;
> +
> +        default:
> +            printf("* ERROR Unbekannter Testfall\n");
> +            break;
> +    }
> +
> +    quit_qemu();
> +}
> diff --git a/tests/libc/run_test.sh b/tests/libc/run_test.sh
> new file mode 100755
> index 0000000..f10b354
> --- /dev/null
> +++ b/tests/libc/run_test.sh
> @@ -0,0 +1,25 @@
> +#!/bin/bash
> +
> +export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin
Wofür das? qemu, grep und sed liegen bei mir zumindest nicht in '*/sbin'

> +
> +kernel=../../build/output/kernel/tyndur2
> +modules="../../build/output/modules/init,../../build/output/modules/pci,../../build/output/modules/ata,../../build/output/modules/ext2,../../build/output/modules/servmgr root out ata pci ext2"
> +
> +function filter_output()
> +{
> +    grep '^*' |\
> +         sed -e "s/PASS/\x1b[32mPASS\x1b[0m/" |\
> +         sed -e "s/FAIL/\x1b[31mFAIL\x1b[0m/" |\
> +         sed -e "s/ERROR/\x1b[33mERROR\x1b[0m/"
> +}
> +
> +function run_test()
> +{
> +    local testcase=$1
> +    local subtest=$2
> +
> +    $QEMU -nographic -kernel $kernel -initrd "$modules","$testcase $subtest" | filter_output
und $QEMU gibts auch nicht

> +#    $QEMU -kernel $kernel -initrd "$modules","$testcase $subtest" -serial stdio | filter_output
> +}
> +
> +run_test main 1