Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Jul 2006 13:11:43 GMT
From:      Michael Bushkov <bushman@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 100393 for review
Message-ID:  <200607011311.k61DBhDV083162@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=100393

Change 100393 by bushman@bushman_nss_ldap_cached on 2006/07/01 13:11:36

	"services" database test finished

Affected files ...

.. //depot/projects/soc2006/nss_ldap_cached/src/tools/regression/lib/libc/nss/test-getserv.c#4 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/tools/regression/lib/libc/nss/test-getserv.t#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/tools/regression/lib/libc/nss/testutil.h#4 edit

Differences ...

==== //depot/projects/soc2006/nss_ldap_cached/src/tools/regression/lib/libc/nss/test-getserv.c#4 (text+ko) ====

@@ -51,7 +51,7 @@
 static enum test_methods method = TEST_GETSERVENT;
 
 DECLARE_TEST_DATA(servent)
-DECLARE_FILE_SNAPSHOT(servent)
+DECLARE_TEST_FILE_SNAPSHOT(servent)
 DECLARE_1PASS_TEST(servent)
 DECLARE_2PASS_TEST(servent)
 
@@ -63,10 +63,8 @@
 static void sdump_servent(struct servent *, char *, size_t);
 static int servent_read_snapshot_func(struct servent *, char *);
 
-static int check_servent_ambiguity_func(struct servent *, void *);
 static int servent_check_ambiguity(struct servent_test_data *, 
 	struct servent *);
-
 static int servent_fill_test_data(struct servent_test_data *);
 static int servent_test_correctness(struct servent *, void *);
 static int servent_test_getservbyname(struct servent *, void *);
@@ -76,7 +74,7 @@
 static void usage(void)  __attribute__((__noreturn__));
 
 IMPLEMENT_TEST_DATA(servent)
-IMPLEMENT_FILE_SNAPSHOT(servent)
+IMPLEMENT_TEST_FILE_SNAPSHOT(servent)
 IMPLEMENT_1PASS_TEST(servent)
 IMPLEMENT_2PASS_TEST(servent)
 
@@ -284,7 +282,7 @@
 		
 	setservent(1);
 	while ((serv = getservent()) != NULL) {
-		test_data_append(td, serv);
+		TEST_DATA_APPEND(servent, td, serv);
 	}
 	endservent();
 	
@@ -321,16 +319,6 @@
 	return (-1);
 }
 
-static int
-check_servent_ambiguity_func(struct servent *serv, void *mdata)
-{
-	
-	assert(serv != NULL);
-	assert(mdata != NULL);
-	
-	return (!compare_servent(serv, (struct servent *)mdata, mdata));
-}
-
 /* servent_check_ambiguity() is needed when one port+proto is associated with
  * more than one service (these cases are usually marked as PROBLEM in
  * /etc/services. This functions is needed also when one service+proto is 
@@ -340,8 +328,8 @@
 servent_check_ambiguity(struct servent_test_data *td, struct servent *serv)
 {
 	
-	return (test_data_foreach(td, check_servent_ambiguity_func, 
-		(void *)serv) == 0 ? -1 : 0);
+	return (TEST_DATA_FIND(servent, td, serv, compare_servent,
+		NULL) != NULL ? 0 : -1);
 }
 
 static int
@@ -415,8 +403,8 @@
 static int 
 servent_test_getservent(struct servent *serv, void *mdata)
 {
-	/* Only correctness should be checked when doing 1-pass test for
-	 * getservent(). Correctness is always checked in servent_1pass_test */
+	/* Only correctness can be checked when doing 1-pass test for
+	 * getservent(). */
 	return (servent_test_correctness(serv, NULL));
 }
 
@@ -424,7 +412,7 @@
 usage(void)
 {
 	(void)fprintf(stderr,
-	    "Usage: %s [-dnpe2]\n",
+	    "Usage: %s [-dnpe2] [-s <file>]\n",
 	    getprogname());
 	exit(1);
 }
@@ -465,8 +453,8 @@
 			usage();
 		}
 	
-	test_data_init(&td, clone_servent, free_servent);
-	test_data_init(&td_snap, clone_servent, free_servent);
+	TEST_DATA_INIT(servent, &td, clone_servent, free_servent);
+	TEST_DATA_INIT(servent, &td_snap, clone_servent, free_servent);
 	if (snapshot_file != NULL) {
 		if (access(snapshot_file, W_OK | R_OK) != 0) {		
 			if (errno == ENOENT)
@@ -480,54 +468,55 @@
 				goto fin;
 			}
 		} else
-			snapshot_read(snapshot_file, &td_snap,
-				servent_read_snapshot_func);
+			TEST_SNAPSHOT_FILE_READ(servent, snapshot_file,
+				&td_snap, servent_read_snapshot_func);
 	}
 		
 	servent_fill_test_data(&td);
 	switch (method) {
 	case TEST_GETSERVBYNAME:
 		if (snapshot_file == NULL)
-			rv = servent_1pass_test(&td,
+			rv = DO_1PASS_TEST(servent, &td,
 				servent_test_getservbyname, (void *)&td);
 		else
-			rv = servent_1pass_test(&td_snap, 
+			rv = DO_1PASS_TEST(servent, &td_snap, 
 				servent_test_getservbyname, (void *)&td_snap);
 		break;
 	case TEST_GETSERVBYPORT:
 		if (snapshot_file == NULL)
-			rv = servent_1pass_test(&td,
+			rv = DO_1PASS_TEST(servent, &td,
 				servent_test_getservbyport, (void *)&td);
 		else
-			rv = servent_1pass_test(&td_snap, 
+			rv = DO_1PASS_TEST(servent, &td_snap, 
 				servent_test_getservbyport, (void *)&td_snap);
 		break;
 	case TEST_GETSERVENT:
 		if (snapshot_file == NULL)
-			rv = servent_1pass_test(&td, servent_test_getservent,
+			rv = DO_1PASS_TEST(servent, &td, servent_test_getservent,
 				(void *)&td);
 		else
-			rv = servent_2pass_test(&td, &td_snap,
+			rv = DO_2PASS_TEST(servent, &td, &td_snap,
 				compare_servent, NULL);
 		break;
 	case TEST_GETSERVENT_2PASS:
-			test_data_init(&td_2pass, clone_servent, free_servent);
+			TEST_DATA_INIT(servent, &td_2pass, clone_servent, free_servent);
 			servent_fill_test_data(&td_2pass);			
-			rv = servent_2pass_test(&td, &td_2pass,
+			rv = DO_2PASS_TEST(servent, &td, &td_2pass,
 				compare_servent, NULL);
-			test_data_destroy(&td_2pass);
+			TEST_DATA_DESTROY(servent, &td_2pass);
 		break;
 	case TEST_BUILD_SNAPSHOT:
-		rv = snapshot_write(snapshot_file, &td, sdump_servent);
+		rv = TEST_SNAPSHOT_FILE_WRITE(servent, snapshot_file, &td, 
+			sdump_servent);
 		break;
 	default:
-		rv = -1;
+		rv = 0;
 		break;
 	};
 
 fin:
-	test_data_destroy(&td_snap);
-	test_data_destroy(&td);
+	TEST_DATA_DESTROY(servent, &td_snap);
+	TEST_DATA_DESTROY(servent, &td);
 	free(snapshot_file);	
 	return (rv);
 }

==== //depot/projects/soc2006/nss_ldap_cached/src/tools/regression/lib/libc/nss/test-getserv.t#3 (text+ko) ====

@@ -18,8 +18,12 @@
 
 make $executable 2>&1 > /dev/null
 
-echo 1..4
+echo 1..8
 do_test 1 'getservbyname()'        '-n'
 do_test 2 'getservbyport()'        '-p'
 do_test 3 'getservent()'           '-e'
 do_test 4 'getservent() 2-pass'    '-2'
+do_test 5 'building snapshot, if needed'  '-s snapshot'
+do_test 6 'getservbyname() snapshot'      '-n -s snapshot'
+do_test 7 'getservbyport() snapshot'      '-p -s snapshot'
+do_test 8 'getservent() snapshot'         '-e -s snapshot'

==== //depot/projects/soc2006/nss_ldap_cached/src/tools/regression/lib/libc/nss/testutil.h#4 (text+ko) ====

@@ -41,22 +41,36 @@
 	STAILQ_HEAD(ent_head, ent##_entry) snapshot_data;		\
 };									\
 									\
-static void test_data_init(struct ent##_test_data *, 			\
+void __##ent##_test_data_init(struct ent##_test_data *, 			\
 	void (*)(struct ent *, struct ent const *),			\
 	void (*freef)(struct ent *));		 			\
-static void test_data_destroy(struct ent##_test_data *);		\
+void __##ent##_test_data_destroy(struct ent##_test_data *);		\
 									\
-static void test_data_append(struct ent##_test_data *, struct ent *data);\
-static int test_data_foreach(struct ent##_test_data *, int (*)(struct ent *,\
+void __##ent##_test_data_append(struct ent##_test_data *, struct ent *data);\
+int __##ent##_test_data_foreach(struct ent##_test_data *, int (*)(struct ent *,\
 	void *), void *);						\
-static int test_data_compare(struct ent##_test_data *,			\
+int __##ent##_test_data_compare(struct ent##_test_data *,			\
 	struct ent##_test_data *, int (*)(struct ent *, struct ent *,	\
 	void *), void *);						\
-static void test_data_clear(struct ent##_test_data *);			
+struct ent *__##ent##_test_data_find(struct ent##_test_data *, struct ent *,\
+	int (*)(struct ent *, struct ent *, void *), void *);		\
+void __##ent##_test_data_clear(struct ent##_test_data *);			
+	
+#define TEST_DATA_INIT(ent, td, clonef, freef)\
+	__##ent##_test_data_init(td, clonef, freef)
+#define TEST_DATA_DESTROY(ent, td) __##ent##_test_data_destroy(td)
+#define TEST_DATA_APPEND(ent, td, d) __##ent##_test_data_append(td, d)
+#define TEST_DATA_FOREACH(ent, td, f, mdata)\
+	__##ent##_test_data_foreach(td, f, mdata)
+#define TEST_DATA_COMPARE(ent, td1, td2, fcmp, mdata)\
+	__##ent##_test_data_compare(td1, td2, fcmp, mdata);
+#define TEST_DATA_FIND(ent, td, d, fcmp, mdata)\
+	__##ent##_test_data_find(td, d, fcmp, mdata)
+#define TEST_DATA_CLEAR(ent, td) __##ent##_test_data_clear(td)
 
 #define IMPLEMENT_TEST_DATA(ent)					\
-static void								\
-test_data_init(struct ent##_test_data *td,				\
+void								\
+__##ent##_test_data_init(struct ent##_test_data *td,				\
 	void (*clonef)(struct ent *, struct ent const *),		\
 	void (*freef)(struct ent *))					\
 {									\
@@ -70,14 +84,14 @@
 	STAILQ_INIT(&td->snapshot_data);				\
 }									\
 									\
-static void 								\
-test_data_destroy(struct ent##_test_data *td)				\
+void 								\
+__##ent##_test_data_destroy(struct ent##_test_data *td)				\
 {									\
-	test_data_clear(td);						\
+	__##ent##_test_data_clear(td);						\
 }									\
 									\
-static void 								\
-test_data_append(struct ent##_test_data *td, struct ent *app_data)	\
+void 								\
+__##ent##_test_data_append(struct ent##_test_data *td, struct ent *app_data)	\
 {									\
 	struct ent##_entry *e;						\
 									\
@@ -92,8 +106,8 @@
 	STAILQ_INSERT_TAIL(&td->snapshot_data, e, entries);		\
 }									\
 									\
-static int								\
-test_data_foreach(struct ent##_test_data *td,				\
+int								\
+__##ent##_test_data_foreach(struct ent##_test_data *td,				\
 	int (*forf)(struct ent *, void *), void *mdata)			\
 {									\
 	struct ent##_entry *e;						\
@@ -112,8 +126,8 @@
 	return (rv);							\
 }									\
 									\
-static int								\
-test_data_compare(struct ent##_test_data *td1, struct ent##_test_data *td2,\
+int								\
+__##ent##_test_data_compare(struct ent##_test_data *td1, struct ent##_test_data *td2,\
 	int (*cmp_func)(struct ent *, struct ent *, void *), void *mdata)\
 {									\
 	struct ent##_entry *e1, *e2;					\
@@ -143,8 +157,30 @@
 	return (rv);							\
 }									\
 									\
-static void								\
-test_data_clear(struct ent##_test_data *td)				\
+struct ent *							\
+__##ent##_test_data_find(struct ent##_test_data *td, struct ent *data,		\
+	int (*cmp)(struct ent *, struct ent *, void *), void *mdata)	\
+{									\
+	struct ent##_entry *e;						\
+	struct ent *result;						\
+									\
+	assert(td != NULL);						\
+	assert(cmp != NULL);						\
+									\
+	result = NULL;							\
+	STAILQ_FOREACH(e, &td->snapshot_data, entries) {		\
+		if (cmp(&e->data, data, mdata) == 0) {			\
+			result = &e->data;				\
+			break;						\
+		}							\
+	}								\
+									\
+	return (result);						\
+}									\
+									\
+									\
+void								\
+__##ent##_test_data_clear(struct ent##_test_data *td)				\
 {									\
 	struct ent##_entry *e;						\
 	assert(td != NULL);						\
@@ -159,27 +195,31 @@
 }									
 
 									\
-#define DECLARE_FILE_SNAPSHOT(ent)					\
+#define DECLARE_TEST_FILE_SNAPSHOT(ent)					\
 struct ent##_snp_param {						\
 	FILE *fp;							\
 	void (*sdump_func)(struct ent *, char *, size_t);		\
 };									\
 									\
-static int snapshot_write_func(struct ent *, void *);			\
-static int snapshot_write(char const *, struct ent##_test_data *,	\
+int __##ent##_snapshot_write_func(struct ent *, void *);			\
+int __##ent##_snapshot_write(char const *, struct ent##_test_data *,	\
 	void (*)(struct ent *, char *, size_t));			\
-static int snapshot_read(char const *, struct ent##_test_data *,	\
+int __##ent##_snapshot_read(char const *, struct ent##_test_data *,	\
 	int (*)(struct ent *, char *));	
+		
+#define TEST_SNAPSHOT_FILE_WRITE(ent, fname, td, f)\
+	__##ent##_snapshot_write(fname, td, f)
+#define TEST_SNAPSHOT_FILE_READ(ent, fname, td, f)\
+	__##ent##_snapshot_read(fname, td, f)
 
-#define IMPLEMENT_FILE_SNAPSHOT(ent)					\
-static int								\
-snapshot_write_func(struct ent *data, void *mdata)			\
+#define IMPLEMENT_TEST_FILE_SNAPSHOT(ent)					\
+int								\
+__##ent##_snapshot_write_func(struct ent *data, void *mdata)			\
 {									\
 	char buffer[1024];						\
 	struct ent##_snp_param *param;					\
 									\
 	assert(data != NULL);						\
-	assert(mdata != NULL);						\
 									\
 	param = (struct ent##_snp_param *)mdata;			\
 	param->sdump_func(data, buffer, sizeof(buffer));		\
@@ -189,8 +229,8 @@
 	return (0);							\
 }									\
 									\
-static int								\
-snapshot_write(char const *fname, struct ent##_test_data *td,		\
+int								\
+__##ent##_snapshot_write(char const *fname, struct ent##_test_data *td,		\
 	void (*sdump_func)(struct ent *, char *, size_t))		\
 {									\
 	struct ent##_snp_param	param;					\
@@ -203,14 +243,14 @@
 		return (-1);						\
 									\
 	param.sdump_func = sdump_func;					\
-	test_data_foreach(td, snapshot_write_func, &param);		\
+	__##ent##_test_data_foreach(td, __##ent##_snapshot_write_func, &param);		\
 	fclose(param.fp);						\
 									\
 	return (0);							\
 }									\
 									\
-static int								\
-snapshot_read(char const *fname, struct ent##_test_data *td,		\
+int								\
+__##ent##_snapshot_read(char const *fname, struct ent##_test_data *td,		\
 	int (*read_func)(struct ent *, char *))				\
 {									\
 	char buffer[1024];						\
@@ -239,7 +279,7 @@
 									\
 			rv = read_func(&data, s);			\
 			if (rv == 0) {					\
-				test_data_append(td, &data);		\
+				__##ent##_test_data_append(td, &data);		\
 				td->free_func(&data);			\
 			}						\
 		}							\
@@ -251,36 +291,42 @@
 }
 
 #define DECLARE_1PASS_TEST(ent)						\
-static int ent##_1pass_test(struct ent##_test_data *, 			\
+int __##ent##_1pass_test(struct ent##_test_data *, 			\
 	int (*)(struct servent *, void *),				\
 	void *);							
+	
+#define DO_1PASS_TEST(ent, td, f, mdata)\
+	__##ent##_1pass_test(td, f, mdata)
 
 #define IMPLEMENT_1PASS_TEST(ent)					\
-static int								\
-ent##_1pass_test(struct ent##_test_data *td, 				\
+int								\
+__##ent##_1pass_test(struct ent##_test_data *td, 				\
 	int (*tf)(struct servent *, void *),				\
 	void *mdata)							\
 {									\
 	int rv;								\
-	rv = test_data_foreach(td, tf, mdata);				\
+	rv = __##ent##_test_data_foreach(td, tf, mdata);				\
 									\
 	return (rv);							\
 }
 
 #define DECLARE_2PASS_TEST(ent)						\
-static int ent##_2pass_test(struct ent##_test_data *, 			\
+int __##ent##_2pass_test(struct ent##_test_data *, 			\
 	struct ent##_test_data *, 					\
 	int (*)(struct ent *, struct ent *, void *), void *);
 
+#define DO_2PASS_TEST(ent, td1, td2, f, mdata)\
+	__##ent##_2pass_test(td1, td2, f, mdata)
+	
 #define IMPLEMENT_2PASS_TEST(ent)					\
-static int								\
-ent##_2pass_test(struct ent##_test_data *td1,				\
+int								\
+__##ent##_2pass_test(struct ent##_test_data *td1,				\
 	struct ent##_test_data *td2,					\
 	int (*cmp_func)(struct ent *, struct ent *, void *),		\
 	void *cmp_mdata)						\
 {									\
 	int rv;								\
 									\
-	rv = test_data_compare(td1, td2, cmp_func, cmp_mdata);		\
+	rv = __##ent##_test_data_compare(td1, td2, cmp_func, cmp_mdata);		\
 	return (rv);							\
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607011311.k61DBhDV083162>