You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/05/02 15:44:48 UTC
[2/2] qpid-proton git commit: PROTON-1470: C test_tools added test
macros for checking pn_condition
PROTON-1470: C test_tools added test macros for checking pn_condition
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/0cf7ea63
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/0cf7ea63
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/0cf7ea63
Branch: refs/heads/master
Commit: 0cf7ea634842d00b4609401aa8a2aa5e187a678a
Parents: 1991745
Author: Alan Conway <ac...@redhat.com>
Authored: Tue May 2 11:18:48 2017 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue May 2 11:28:14 2017 -0400
----------------------------------------------------------------------
proton-c/src/tests/proactor.c | 29 ++++++------
proton-c/src/tests/test_tools.h | 90 +++++++++++++++++++++---------------
2 files changed, 66 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0cf7ea63/proton-c/src/tests/proactor.c
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/proactor.c b/proton-c/src/tests/proactor.c
index b70bf61..01332cb 100644
--- a/proton-c/src/tests/proactor.c
+++ b/proton-c/src/tests/proactor.c
@@ -347,16 +347,14 @@ static void test_abort(test_t *t) {
pn_proactor_connect(client, pn_connection(), port.host_port);
/* server transport closes */
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts));
- if (TEST_CHECK(t, last_condition) && TEST_CHECK(t, pn_condition_is_set(last_condition))) {
- TEST_STR_EQUAL(t, "amqp:connection:framing-error", pn_condition_get_name(last_condition));
- TEST_STR_IN(t, "abort", pn_condition_get_description(last_condition));
- }
+ TEST_COND_NAME(t, "amqp:connection:framing-error",last_condition);
+ TEST_COND_DESC(t, "abort", last_condition);
+
/* client transport closes */
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts)); /* client */
- if (TEST_CHECK(t, last_condition) && TEST_CHECK(t, pn_condition_is_set(last_condition))) {
- TEST_STR_EQUAL(t, "amqp:connection:framing-error", pn_condition_get_name(last_condition));
- TEST_STR_IN(t, "abort", pn_condition_get_description(last_condition));
- }
+ TEST_COND_NAME(t, "amqp:connection:framing-error", last_condition);
+ TEST_COND_DESC(t, "abort", last_condition);
+
pn_listener_close(l);
PROACTOR_TEST_DRAIN(pts);
@@ -415,9 +413,8 @@ static void test_refuse(test_t *t) {
/* client transport closes */
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts)); /* client */
- if (TEST_CHECK(t, last_condition) && TEST_CHECK(t, pn_condition_is_set(last_condition))) {
- TEST_STR_EQUAL(t, "amqp:connection:framing-error", pn_condition_get_name(last_condition));
- }
+ TEST_COND_NAME(t, "amqp:connection:framing-error", last_condition);
+
pn_listener_close(l.listener);
PROACTOR_TEST_DRAIN(pts);
@@ -551,15 +548,14 @@ static void test_ipv4_ipv6(test_t *t) {
#define EXPECT_CONNECT(TP, HOST) do { \
pn_proactor_connect(client, pn_connection(), test_port_use_host(&(TP), (HOST))); \
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts)); \
- TEST_CHECK(t, !pn_condition_is_set(last_condition)); \
+ TEST_COND_EMPTY(t, last_condition); \
PROACTOR_TEST_DRAIN(pts); \
} while(0)
#define EXPECT_FAIL(TP, HOST) do { \
pn_proactor_connect(client, pn_connection(), test_port_use_host(&(TP), (HOST))); \
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts)); \
- if (TEST_CHECK(t, pn_condition_is_set(last_condition))) \
- TEST_STR_IN(t, "refused", pn_condition_get_description(last_condition)); \
+ TEST_COND_DESC(t, "refused", last_condition); \
PROACTOR_TEST_DRAIN(pts); \
} while(0)
@@ -684,9 +680,10 @@ static void test_ssl(test_t *t) {
pn_proactor_connect(client, c, port.host_port);
/* Open ok at both ends */
TEST_ETYPE_EQUAL(t, PN_CONNECTION_REMOTE_OPEN, PROACTOR_TEST_RUN(pts));
- TEST_CHECK(t, !pn_condition_is_set(last_condition));
+ TEST_COND_EMPTY(t, last_condition);
TEST_ETYPE_EQUAL(t, PN_CONNECTION_REMOTE_OPEN, PROACTOR_TEST_RUN(pts));
- TEST_CHECK(t, !pn_condition_is_set(last_condition));
+ TEST_COND_EMPTY(t, last_condition);
+
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts));
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts));
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0cf7ea63/proton-c/src/tests/test_tools.h
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/test_tools.h b/proton-c/src/tests/test_tools.h
index c5c8364..0663fc4 100644
--- a/proton-c/src/tests/test_tools.h
+++ b/proton-c/src/tests/test_tools.h
@@ -42,7 +42,7 @@ typedef struct test_t {
*/
void test_vlogf_(test_t *t, const char *prefix, const char* expr,
- const char* file, int line, const char *fmt, va_list ap)
+ const char* file, int line, const char *fmt, va_list ap)
{
fprintf(stderr, "%s:%d", file, line);
if (prefix && *prefix) fprintf(stderr, ": %s", prefix);
@@ -57,7 +57,7 @@ void test_vlogf_(test_t *t, const char *prefix, const char* expr,
}
void test_errorf_(test_t *t, const char* expr,
- const char* file, int line, const char *fmt, ...) {
+ const char* file, int line, const char *fmt, ...) {
++t->errors;
va_list ap;
va_start(ap, fmt);
@@ -66,7 +66,7 @@ void test_errorf_(test_t *t, const char* expr,
}
bool test_check_(test_t *t, bool expr, const char *sexpr,
- const char *file, int line, const char* fmt, ...) {
+ const char *file, int line, const char* fmt, ...) {
if (!expr) {
++t->errors;
va_list ap;
@@ -78,7 +78,7 @@ bool test_check_(test_t *t, bool expr, const char *sexpr,
}
void test_logf_(test_t *t, const char *prefix, const char* expr,
- const char* file, int line, const char *fmt, ...) {
+ const char* file, int line, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
test_vlogf_(t, prefix, expr, file, line, fmt, ap);
@@ -95,35 +95,39 @@ void assert_fail_(const char* expr, const char* file, int line, const char *fmt,
}
/* Unconditional assert (does not depend on NDEBUG) for tests. */
-#define TEST_ASSERT(expr) \
+#define TEST_ASSERT(expr) \
((expr) ? (void)0 : assert_fail_(#expr, __FILE__, __LINE__, NULL))
/* Unconditional assert with printf-style message (does not depend on NDEBUG) for tests. */
-#define TEST_ASSERTF(expr, ...) \
+#define TEST_ASSERTF(expr, ...) \
((expr) ? (void)0 : assert_fail_(#expr, __FILE__, __LINE__, __VA_ARGS__))
/* Like TEST_ASSERT but includes errno string for err */
/* TODO aconway 2017-02-16: not thread safe, replace with safe strerror_r or similar */
-#define TEST_ASSERT_ERRNO(expr, err) \
+#define TEST_ASSERT_ERRNO(expr, err) \
TEST_ASSERTF((expr), "%s", strerror(err))
/* Print a message but don't mark the test as having an error */
-#define TEST_LOGF(TEST, ...) \
+#define TEST_LOGF(TEST, ...) \
test_logf_((TEST), "info", NULL, __FILE__, __LINE__, __VA_ARGS__)
/* Print an error with printf-style message, increment TEST->errors */
-#define TEST_ERRORF(TEST, ...) \
+#define TEST_ERRORF(TEST, ...) \
test_errorf_((TEST), NULL, __FILE__, __LINE__, __VA_ARGS__)
-/* If EXPR is false, print and record an error for t */
-#define TEST_CHECKF(TEST, EXPR, ...) \
+/* If EXPR is false, print and record an error for t including #EXPR */
+#define TEST_CHECKF(TEST, EXPR, ...) \
test_check_((TEST), (EXPR), #EXPR, __FILE__, __LINE__, __VA_ARGS__)
/* If EXPR is false, print and record an error for t including EXPR */
-#define TEST_CHECK(TEST, EXPR) \
+#define TEST_CHECK(TEST, EXPR) \
test_check_((TEST), (EXPR), #EXPR, __FILE__, __LINE__, "")
+/* If EXPR is false, print and record an error for t NOT including #EXPR */
+#define TEST_CHECKNF(TEST, EXPR, ...) \
+ test_check_((TEST), (EXPR), NULL, __FILE__, __LINE__, __VA_ARGS__)
+
bool test_etype_equal_(test_t *t, pn_event_type_t want, pn_event_type_t got, const char *file, int line) {
return test_check_(t, want == got, NULL, file, line, "want %s got %s",
pn_event_type_name(want),
@@ -153,18 +157,18 @@ bool test_etypes_equal_(test_t *t, const pn_event_type_t* want, size_t want_len,
return want_len == got_len;
}
-#define TEST_STR_EQUAL(TEST, WANT, GOT) \
+#define TEST_STR_EQUAL(TEST, WANT, GOT) \
test_check_((TEST), !strcmp((WANT), (GOT)), NULL, __FILE__, __LINE__, "want '%s', got '%s'", (WANT), (GOT))
-#define TEST_STR_IN(TEST, WANT, GOT) \
+#define TEST_STR_IN(TEST, WANT, GOT) \
test_check_((TEST), strstr((GOT), (WANT)), NULL, __FILE__, __LINE__, "'%s' not in '%s'", (WANT), (GOT))
-#define TEST_ETYPE_EQUAL(TEST, WANT, GOT) \
+#define TEST_ETYPE_EQUAL(TEST, WANT, GOT) \
test_etype_equal_((TEST), (WANT), (GOT), __FILE__, __LINE__)
/* Compare arrays of pn_event_type_t */
-#define TEST_ETYPES_EQUAL(TEST, WANT, WLEN, GOT, GLEN) \
+#define TEST_ETYPES_EQUAL(TEST, WANT, WLEN, GOT, GLEN) \
test_etypes_equal_((TEST), (WANT), (WLEN), (GOT), (GLEN), __FILE__, __LINE__)
pn_event_t *test_event_type_(test_t *t, pn_event_type_t want, pn_event_t *got, const char *file, int line) {
@@ -182,35 +186,47 @@ pn_event_t *test_event_type_(test_t *t, pn_event_type_t want, pn_event_t *got, c
return got;
}
-#define TEST_EVENT_TYPE(TEST, WANT, GOT) \
+#define TEST_EVENT_TYPE(TEST, WANT, GOT) \
test_event_type_((TEST), (WANT), (GOT), __FILE__, __LINE__)
+#define TEST_COND_EMPTY(TEST, C) \
+ TEST_CHECKNF((TEST), (!(C) || !pn_condition_is_set(C)), "Unexpected condition - %s:%s", \
+ pn_condition_get_name(C), pn_condition_get_description(C))
+
+#define TEST_COND_DESC(TEST, WANT, C) \
+ (TEST_CHECKNF(t, pn_condition_is_set((C)), "No condition, expected :%s", (WANT)) ? \
+ TEST_STR_IN(t, (WANT), pn_condition_get_description(C)) : 0);
+
+#define TEST_COND_NAME(TEST, WANT, C) \
+ (TEST_CHECKNF(t, pn_condition_is_set((C)), "No condition, expected %s:", (WANT)) ? \
+ TEST_STR_EQUAL(t, (WANT), pn_condition_get_name(C)) : 0);
+
/* T is name of a test_t variable, EXPR is the test expression (which should update T)
FAILED is incremented if the test has errors
*/
-#define RUN_TEST(FAILED, T, EXPR) do { \
- fprintf(stderr, "TEST: %s\n", #EXPR); \
- fflush(stdout); \
- test_t T = { #EXPR, 0 }; \
- (EXPR); \
- if (T.errors) { \
- fprintf(stderr, "FAIL: %s (%d errors)\n", #EXPR, T.errors); \
- ++(FAILED); \
- } \
+#define RUN_TEST(FAILED, T, EXPR) do { \
+ fprintf(stderr, "TEST: %s\n", #EXPR); \
+ fflush(stdout); \
+ test_t T = { #EXPR, 0 }; \
+ (EXPR); \
+ if (T.errors) { \
+ fprintf(stderr, "FAIL: %s (%d errors)\n", #EXPR, T.errors); \
+ ++(FAILED); \
+ } \
} while(0)
/* Like RUN_TEST but only if one of the argv strings is found in the test EXPR */
-#define RUN_ARGV_TEST(FAILED, T, EXPR) do { \
- if (argc == 1) { \
- RUN_TEST(FAILED, T, EXPR); \
- } else { \
- for (int i = 1; i < argc; ++i) { \
- if (strstr(#EXPR, argv[i])) { \
- RUN_TEST(FAILED, T, EXPR); \
- break; \
- } \
- } \
- } \
+#define RUN_ARGV_TEST(FAILED, T, EXPR) do { \
+ if (argc == 1) { \
+ RUN_TEST(FAILED, T, EXPR); \
+ } else { \
+ for (int i = 1; i < argc; ++i) { \
+ if (strstr(#EXPR, argv[i])) { \
+ RUN_TEST(FAILED, T, EXPR); \
+ break; \
+ } \
+ } \
+ } \
} while(0)
/* Some very simple platform-secifics to acquire an unused socket */
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org