All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Cc: linux-sgx@vger.kernel.org, Cedric Xing <cedric.xing@intel.com>,
	Andy Lutomirski <luto@kernel.org>
Subject: [PATCH for_v2? v2 09/14] selftests/x86/sgx: Use kselftest operators to check test results
Date: Wed, 16 Oct 2019 20:03:35 -0700	[thread overview]
Message-ID: <20191017030340.18301-10-sean.j.christopherson@intel.com> (raw)
In-Reply-To: <20191017030340.18301-1-sean.j.christopherson@intel.com>

Use kselftest's operators, e.g. ASSERT_EQ, EXPECT_EQ, etc... to check
test results.  Implement a custom __EXPECT() macro instead of using the
framework defined in kselftest_harness.h.  The harness framework is
designed for tests that are short and sweet, e.g. true unit tests, and
don't work well with SGX's need for a large, run-once setup.  The
harness code will also be problematic when tests for the vDSO's callback
code are added in the future.

Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
---
 tools/testing/selftests/x86/sgx/main.c | 52 ++++++++++++++++++++------
 1 file changed, 40 insertions(+), 12 deletions(-)

diff --git a/tools/testing/selftests/x86/sgx/main.c b/tools/testing/selftests/x86/sgx/main.c
index 664a2ed98915..f1bd74913ec3 100644
--- a/tools/testing/selftests/x86/sgx/main.c
+++ b/tools/testing/selftests/x86/sgx/main.c
@@ -18,6 +18,7 @@
 #include <sys/auxv.h>
 
 #include "../../kselftest.h"
+#include "../../kselftest_operators.h"
 
 #include "defines.h"
 #include "../../../../../arch/x86/kernel/cpu/sgx/arch.h"
@@ -26,6 +27,41 @@
 
 #define PAGE_SIZE  4096
 
+#define EXPECT_FAILED(_assert, fmt, ...)			\
+do {								\
+	if (_assert)						\
+		ksft_exit_fail_msg(fmt, ##__VA_ARGS__);		\
+	else							\
+		ksft_test_result_fail(fmt, ##__VA_ARGS__);	\
+} while (0)
+
+#define __EXPECT(_expected, _expected_str, _seen, _seen_str, _t, _assert)     \
+do {									      \
+	/* Avoid multiple evaluation of the cases */			      \
+	__typeof__(_expected) __exp = (_expected);			      \
+	__typeof__(_seen) __seen = (_seen);				      \
+	if (passed && !(__exp _t __seen)) {				      \
+		unsigned long long __exp_print = (uintptr_t)__exp;	      \
+		unsigned long long __seen_print = (uintptr_t)__seen;	      \
+		EXPECT_FAILED(_assert,					      \
+			      "Expected '%s (%llu) %s %s (%llu)' at %s:%u\n", \
+			      _expected_str, __exp_print, #_t, _seen_str,     \
+			      __seen_print, __FILE__, __LINE__);	      \
+		passed = false;						      \
+	}								      \
+} while (0)
+
+#define RUN_TEST(test_name)						\
+({									\
+	passed = true;							\
+									\
+	test_name(&secs);						\
+	if (passed)							\
+		ksft_test_result_pass("%s: Passed\n", #test_name);	\
+})
+
+static bool passed = true;
+
 static const uint64_t MAGIC = 0x1122334455667788ULL;
 void *eenter;
 
@@ -339,11 +375,7 @@ static void test_sgx_basic(struct sgx_secs *secs)
 	uint64_t result = 0;
 
 	sgx_call_eenter((void *)&MAGIC, &result, (void *)secs->base);
-	if (result != MAGIC) {
-		ksft_test_result_error("0x%lx != 0x%lx\n", result, MAGIC);
-		return;
-	}
-	ksft_test_result_pass("%s: Passed\n", __func__);
+	EXPECT_EQ(result, MAGIC);
 }
 
 static void test_sgx_vdso(struct sgx_secs *secs)
@@ -355,11 +387,7 @@ static void test_sgx_vdso(struct sgx_secs *secs)
 
 	sgx_call_vdso((void *)&MAGIC, &result, NULL, NULL, NULL, NULL,
 		      (void *)secs->base, &exception, NULL);
-	if (result != MAGIC) {
-		ksft_test_result_error("0x%lx != 0x%lx\n", result, MAGIC);
-		return;
-	}
-	ksft_test_result_pass("%s: Passed\n", __func__);
+	EXPECT_EQ(result, MAGIC);
 }
 
 int main(int argc, char *argv[], char *envp[])
@@ -381,12 +409,12 @@ int main(int argc, char *argv[], char *envp[])
 	if (!encl_build(&secs, bin, bin_size, &sigstruct))
 		exit(1);
 
-	test_sgx_basic(&secs);
+	RUN_TEST(test_sgx_basic);
 
 	if (!setup_vdso())
 		exit(1);
 
-	test_sgx_vdso(&secs);
+	RUN_TEST(test_sgx_vdso);
 
 	return ksft_exit_pass();
 }
-- 
2.22.0


  parent reply	other threads:[~2019-10-17  3:03 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-17  3:03 [PATCH for_v2? v2 00/14] selftests/x86/sgx: Improve tests Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 01/14] selftests/x86/sgx: Fix a benign linker warning Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 02/14] selftests/x86/sgx: Use getauxval() to retrieve the vDSO base address Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 03/14] selftests/x86/sgx: Sanitize the types for sgx_vdso_call()'s input params Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 04/14] selftests/x86/sgx: Mark helper functions as static Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 05/14] selftests/x86/sgx: Move vDSO setup to a helper function Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 06/14] selftests/x86/sgx: Move individual tests into helper functions Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 07/14] selftests/x86/sgx: Use standard helper function to signal pass/fail Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 08/14] selftests/harness: Move operator macros to their own header file Sean Christopherson
2019-10-17 16:53   ` Jarkko Sakkinen
2019-10-17 18:13     ` Sean Christopherson
2019-10-21 11:08       ` Jarkko Sakkinen
2019-10-22  3:20         ` Sean Christopherson
2019-10-17  3:03 ` Sean Christopherson [this message]
2019-10-17  3:03 ` [PATCH for_v2? v2 10/14] selftests/x86/sgx: Handle setup failures via kselftest assertions Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 11/14] selftests/x86/sgx: Add a check on the vDSO exception reporting mechanism Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 12/14] selftests/x86/sgx: Add test of vDSO with basic exit handler Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 13/14] selftests/x86/sgx: Add check to verify exit handler stack alignment Sean Christopherson
2019-10-17  3:03 ` [PATCH for_v2? v2 14/14] selftests/x86/sgx: Add test for exception behavior with exit handler Sean Christopherson
2019-10-18 10:12 ` [PATCH for_v2? v2 00/14] selftests/x86/sgx: Improve tests Jarkko Sakkinen
2019-10-18 10:20   ` Jarkko Sakkinen
2019-10-22 22:41     ` Sean Christopherson
2019-10-23 12:39       ` Jarkko Sakkinen
2019-10-26 14:08         ` Andy Lutomirski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191017030340.18301-10-sean.j.christopherson@intel.com \
    --to=sean.j.christopherson@intel.com \
    --cc=cedric.xing@intel.com \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=linux-sgx@vger.kernel.org \
    --cc=luto@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.