From 97421601b74265678fe3a38e531e95186bdbb484 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Thu, 12 May 2016 15:42:09 -0700 Subject: [PATCH] cunit: add test result JSON formatting Change-Id: I3ccafd2f22447dbb178c7627352a4ced0d25b73f Signed-off-by: Daniel Verkamp --- lib/Makefile | 2 +- lib/cunit/Makefile | 40 +++++++++++++++ lib/cunit/spdk_cunit.c | 111 +++++++++++++++++++++++++++++++++++++++++ test/spdk_cunit.h | 2 + 4 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 lib/cunit/Makefile create mode 100644 lib/cunit/spdk_cunit.c diff --git a/lib/Makefile b/lib/Makefile index ccad71a82..22c06e23f 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -DIRS-y += conf json log memory trace util nvme ioat +DIRS-y += conf cunit json log memory trace util nvme ioat .PHONY: all clean $(DIRS-y) diff --git a/lib/cunit/Makefile b/lib/cunit/Makefile new file mode 100644 index 000000000..b89f6c973 --- /dev/null +++ b/lib/cunit/Makefile @@ -0,0 +1,40 @@ +# +# BSD LICENSE +# +# Copyright (c) Intel Corporation. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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 +# OWNER 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. +# + +SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) + +CFLAGS += -I$(SPDK_ROOT_DIR)/test +C_SRCS = spdk_cunit.c +LIBNAME = cunit + +include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk diff --git a/lib/cunit/spdk_cunit.c b/lib/cunit/spdk_cunit.c new file mode 100644 index 000000000..6d9b7fcc1 --- /dev/null +++ b/lib/cunit/spdk_cunit.c @@ -0,0 +1,111 @@ +/*- + * BSD LICENSE + * + * Copyright (c) Intel Corporation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 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 + * OWNER 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 "spdk_cunit.h" + +static int +spdk_cunit_get_test_result(CU_pTest test) +{ + CU_pFailureRecord failure = CU_get_failure_list(); + + while (failure != NULL) { + if (failure->pTest == test) { + return 1; + } + failure = failure->pNext; + } + + return 0; +} + +static void +spdk_cunit_print_test_result(FILE *out, CU_pTest test) +{ + fprintf(out, " {\n"); + fprintf(out, " \"Name\" : \"%s\",\n", test->pName); + fprintf(out, " \"Result\" : \"%s\"\n", + spdk_cunit_get_test_result(test) ? "FAIL" : "PASS"); + fprintf(out, " }\n"); +} + +static void +spdk_cunit_print_suite_result(FILE *out, CU_pSuite suite) +{ + CU_pTest test = suite->pTest; + + while (test != NULL) { + spdk_cunit_print_test_result(out, test); + test = test->pNext; + if (test != NULL) { + fprintf(out, " ,\n"); + } + } +} + +static void +spdk_cunit_print_registry_result(FILE *out, CU_pTestRegistry registry) +{ + CU_pSuite suite = registry->pSuite; + + if (suite == NULL) { + return; + } + + fprintf(out, "{\n"); + fprintf(out, " \"%s unit tests\": [\n", suite->pName); + + while (suite != NULL) { + spdk_cunit_print_suite_result(out, suite); + suite = suite->pNext; + } + + fprintf(out, " ]\n"); + fprintf(out, "}\n"); +} + +int +spdk_cunit_print_results(const char *filename) +{ + FILE *out; + + out = fopen(filename, "w"); + if (out == NULL) { + fprintf(stderr, "could not open results file %s\n", filename); + return -1; + } + + spdk_cunit_print_registry_result(out, CU_get_registry()); + fclose(out); + return 0; +} + diff --git a/test/spdk_cunit.h b/test/spdk_cunit.h index 031904a7f..832f9a3a2 100644 --- a/test/spdk_cunit.h +++ b/test/spdk_cunit.h @@ -45,4 +45,6 @@ */ #define SPDK_CU_ASSERT_FATAL(cond) do { CU_ASSERT_FATAL(cond); if (!(cond)) { abort(); } } while (0) +int spdk_cunit_print_results(const char *filename); + #endif /* SPDK_CUNIT_H */