summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2001-10-17 11:30:37 +0000
committerDaniel Veillard <veillard@src.gnome.org>2001-10-17 11:30:37 +0000
commitab7488efa556f86d18c253b80e7b3591e255546a (patch)
treeeeea3ad27883f41d55b0d043a2d82988b998b7bf
parent85c11fa20605e0b4fafc680627bd4b66933ac67e (diff)
downloadlibxml2-ab7488efa556f86d18c253b80e7b3591e255546a.tar.gz
fixed some bugs in CFLAGS passing. added a specific threaded test case
* configure.in: fixed some bugs in CFLAGS passing. * test/threads Makefile.am testThreads.c: added a specific threaded test case (really nasty, guaranteed). Daniel
-rw-r--r--ChangeLog6
-rw-r--r--Makefile.am15
-rw-r--r--configure.in11
-rw-r--r--test/threads/a.example.org.xml6
-rw-r--r--test/threads/a/a.dtd1
-rw-r--r--test/threads/abc.dtd7
-rw-r--r--test/threads/abc.xml7
-rw-r--r--test/threads/acb.dtd7
-rw-r--r--test/threads/acb.xml7
-rw-r--r--test/threads/b.example.org.xml6
-rw-r--r--test/threads/b/b.dtd1
-rw-r--r--test/threads/bac.dtd7
-rw-r--r--test/threads/bac.xml7
-rw-r--r--test/threads/bca.dtd7
-rw-r--r--test/threads/bca.xml7
-rw-r--r--test/threads/c.example.org.xml6
-rw-r--r--test/threads/c/c.dtd1
-rw-r--r--test/threads/cab.dtd7
-rw-r--r--test/threads/cab.xml7
-rw-r--r--test/threads/cba.dtd7
-rw-r--r--test/threads/cba.xml7
-rw-r--r--test/threads/complex.xml6
-rw-r--r--test/threads/example.org.xml9
-rw-r--r--test/threads/invalid.xml2
-rw-r--r--testThreads.c87
25 files changed, 235 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 5bd17be4..849905ed 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Oct 17 13:29:02 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed some bugs in CFLAGS passing.
+ * test/threads Makefile.am testThreads.c: added a specific
+ threaded test case (really nasty, guaranteed).
+
Tue Oct 16 23:01:49 CEST 2001 Daniel Veillard <daniel@veillard.com>
* catalog.c: serious cleanup on the management of the
diff --git a/Makefile.am b/Makefile.am
index 7104fc0f..c87ca993 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,7 @@ SUBDIRS = include . doc example
INCLUDES = -I@srcdir@/include -I$(top_builddir)/include @THREAD_CFLAGS@ @Z_CFLAGS@
-noinst_PROGRAMS=testSAX testHTML testXPath testURI testDocbook
+noinst_PROGRAMS=testSAX testHTML testXPath testURI testDocbook testThreads
bin_PROGRAMS = xmllint xmlcatalog
@@ -72,6 +72,11 @@ testXPath_LDFLAGS =
testXPath_DEPENDENCIES = $(DEPS)
testXPath_LDADD= $(LDADDS)
+testThreads_SOURCES=testThreads.c
+testThreads_LDFLAGS =
+testThreads_DEPENDENCIES = $(DEPS)
+testThreads_LDADD= $(LDADDS)
+
testURI_SOURCES=testURI.c
testURI_LDFLAGS =
testURI_DEPENDENCIES = $(DEPS)
@@ -81,7 +86,7 @@ check-local: tests
testall : tests SVGtests SAXtests
-tests: XMLtests XMLenttests HTMLtests Validtests URItests XPathtests XPtrtests XIncludetests Scripttests Catatests
+tests: XMLtests XMLenttests HTMLtests Validtests URItests XPathtests XPtrtests XIncludetests Scripttests Catatests @TEST_THREADS@
HTMLtests : testHTML
@(echo > .memdump)
@@ -417,6 +422,12 @@ SVGtests : xmllint
rm result.$$name result2.$$name ; \
fi ; fi ; done)
+Threadtests : testThreads
+ @echo "##"
+ @echo "## Threaded regression tests"
+ @echo "##"
+ testThreads
+
SAXtests : testSAX
@(echo > .memdump)
@echo "##"
diff --git a/configure.in b/configure.in
index 45145ef9..39d36ce5 100644
--- a/configure.in
+++ b/configure.in
@@ -249,6 +249,7 @@ dnl
THREAD_LIBS=""
WITH_THREADS=0
THREAD_CFLAGS=""
+TEST_THREADS=""
AC_ARG_WITH(threads, [ --with-threads Add multithread support(off)])
if test "$with_threads" = "yes" ; then
@@ -259,20 +260,22 @@ if test "$with_threads" = "yes" ; then
THREAD_LIBS="-lpthread"
AC_DEFINE(HAVE_LIBPTHREAD)
AC_DEFINE(HAVE_PTHREAD_H)
- WITH_THREADS=1]))
+ WITH_THREADS="1"]))
if test "$WITH_THREADS" = "1" ; then
- THREAD_CFLAGS="$XML_CFLAGS -D_REENTRANT"
+ THREAD_CFLAGS="$THREAD_CFLAGS -D_REENTRANT"
+ TEST_THREADS="Threadtests"
fi
fi
AC_ARG_WITH(thread-alloc, [ --with-thread-alloc Add per-thread memory(off)])
-if test "$with_threads" = "yes" -a "$WITH_THREADS" = "1" ; then
- THREAD_CFLAGS="$XML_CFLAGS -DLIBXML_THREAD_ALLOC_ENABLED"
+if test "$with_threads_alloc" = "yes" -a "$WITH_THREADS" = "1" ; then
+ THREAD_CFLAGS="$THREAD_CFLAGS -DLIBXML_THREAD_ALLOC_ENABLED"
fi
AC_SUBST(THREAD_LIBS)
AC_SUBST(WITH_THREADS)
AC_SUBST(THREAD_CFLAGS)
+AC_SUBST(TEST_THREADS)
AC_ARG_WITH(history, [ --with-history Add history support to xmllint shell(off)])
if test "$with_history" = "yes" ; then
diff --git a/test/threads/a.example.org.xml b/test/threads/a.example.org.xml
new file mode 100644
index 00000000..3de2c453
--- /dev/null
+++ b/test/threads/a.example.org.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<rewriteSystem systemIdStartString="http://example.org/a" rewritePrefix="a"/>
+<nextCatalog catalog="c.example.org.xml"/>
+</catalog>
diff --git a/test/threads/a/a.dtd b/test/threads/a/a.dtd
new file mode 100644
index 00000000..7699a22f
--- /dev/null
+++ b/test/threads/a/a.dtd
@@ -0,0 +1 @@
+<!ELEMENT a EMPTY>
diff --git a/test/threads/abc.dtd b/test/threads/abc.dtd
new file mode 100644
index 00000000..b7a08fe9
--- /dev/null
+++ b/test/threads/abc.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ELEMENT abc (a, b, c)>
diff --git a/test/threads/abc.xml b/test/threads/abc.xml
new file mode 100644
index 00000000..1c3bb962
--- /dev/null
+++ b/test/threads/abc.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE abc SYSTEM "http://example.org/abc.dtd">
+<abc>
+ <a/>
+ <b/>
+ <c/>
+</abc>
+
diff --git a/test/threads/acb.dtd b/test/threads/acb.dtd
new file mode 100644
index 00000000..9fc77c55
--- /dev/null
+++ b/test/threads/acb.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ELEMENT acb (a, c, b)>
diff --git a/test/threads/acb.xml b/test/threads/acb.xml
new file mode 100644
index 00000000..af2030e3
--- /dev/null
+++ b/test/threads/acb.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE acb SYSTEM "http://example.org/acb.dtd">
+<acb>
+ <a/>
+ <c/>
+ <b/>
+</acb>
+
diff --git a/test/threads/b.example.org.xml b/test/threads/b.example.org.xml
new file mode 100644
index 00000000..2dfe5fc3
--- /dev/null
+++ b/test/threads/b.example.org.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<rewriteSystem systemIdStartString="http://example.org/b" rewritePrefix="b"/>
+<nextCatalog catalog="c.example.org.xml"/>
+</catalog>
diff --git a/test/threads/b/b.dtd b/test/threads/b/b.dtd
new file mode 100644
index 00000000..c1435a8b
--- /dev/null
+++ b/test/threads/b/b.dtd
@@ -0,0 +1 @@
+<!ELEMENT b EMPTY>
diff --git a/test/threads/bac.dtd b/test/threads/bac.dtd
new file mode 100644
index 00000000..d36a4e61
--- /dev/null
+++ b/test/threads/bac.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ELEMENT bac (b, a, c)>
diff --git a/test/threads/bac.xml b/test/threads/bac.xml
new file mode 100644
index 00000000..51799e44
--- /dev/null
+++ b/test/threads/bac.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE bac SYSTEM "http://example.org/bac.dtd">
+<bac>
+ <b/>
+ <a/>
+ <c/>
+</bac>
+
diff --git a/test/threads/bca.dtd b/test/threads/bca.dtd
new file mode 100644
index 00000000..239192ad
--- /dev/null
+++ b/test/threads/bca.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ELEMENT bca (b, c, a)>
diff --git a/test/threads/bca.xml b/test/threads/bca.xml
new file mode 100644
index 00000000..4f4f8bba
--- /dev/null
+++ b/test/threads/bca.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE bca SYSTEM "http://example.org/bca.dtd">
+<bca>
+ <b/>
+ <c/>
+ <a/>
+</bca>
+
diff --git a/test/threads/c.example.org.xml b/test/threads/c.example.org.xml
new file mode 100644
index 00000000..41348b13
--- /dev/null
+++ b/test/threads/c.example.org.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<rewriteSystem systemIdStartString="http://example.org/c" rewritePrefix="c"/>
+<rewriteSystem systemIdStartString="http://example.org/" rewritePrefix="./"/>
+</catalog>
diff --git a/test/threads/c/c.dtd b/test/threads/c/c.dtd
new file mode 100644
index 00000000..7248a5bf
--- /dev/null
+++ b/test/threads/c/c.dtd
@@ -0,0 +1 @@
+<!ELEMENT c EMPTY>
diff --git a/test/threads/cab.dtd b/test/threads/cab.dtd
new file mode 100644
index 00000000..0a62e91a
--- /dev/null
+++ b/test/threads/cab.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ELEMENT cab (c, a, b)>
diff --git a/test/threads/cab.xml b/test/threads/cab.xml
new file mode 100644
index 00000000..81f45d07
--- /dev/null
+++ b/test/threads/cab.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE cab SYSTEM "http://example.org/cab.dtd">
+<cab>
+ <c/>
+ <a/>
+ <b/>
+</cab>
+
diff --git a/test/threads/cba.dtd b/test/threads/cba.dtd
new file mode 100644
index 00000000..71b96b47
--- /dev/null
+++ b/test/threads/cba.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ELEMENT cba (c, b, a)>
diff --git a/test/threads/cba.xml b/test/threads/cba.xml
new file mode 100644
index 00000000..5bbd570f
--- /dev/null
+++ b/test/threads/cba.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE cba SYSTEM "http://example.org/cba.dtd">
+<cba>
+ <c/>
+ <b/>
+ <a/>
+</cba>
+
diff --git a/test/threads/complex.xml b/test/threads/complex.xml
new file mode 100644
index 00000000..0174e906
--- /dev/null
+++ b/test/threads/complex.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<delegateSystem systemIdStartString="http://example.org/"
+ catalog="example.org.xml"/>
+</catalog>
diff --git a/test/threads/example.org.xml b/test/threads/example.org.xml
new file mode 100644
index 00000000..21c26023
--- /dev/null
+++ b/test/threads/example.org.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<delegateSystem systemIdStartString="http://example.org/a"
+ catalog="a.example.org.xml"/>
+<delegateSystem systemIdStartString="http://example.org/b"
+ catalog="b.example.org.xml"/>
+<nextCatalog catalog="c.example.org.xml"/>
+</catalog>
diff --git a/test/threads/invalid.xml b/test/threads/invalid.xml
new file mode 100644
index 00000000..91232755
--- /dev/null
+++ b/test/threads/invalid.xml
@@ -0,0 +1,2 @@
+<!-- Well formed but invalid -->
+<doc/>
diff --git a/testThreads.c b/testThreads.c
new file mode 100644
index 00000000..e0c06fb2
--- /dev/null
+++ b/testThreads.c
@@ -0,0 +1,87 @@
+#include <stdlib.h>
+#include <features.h>
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_THREAD_ENABLED
+#include <libxml/globals.h>
+#include <libxml/threads.h>
+#include <libxml/parser.h>
+#include <libxml/catalog.h>
+#include <pthread.h>
+#include <string.h>
+#include <unistd.h>
+#include <assert.h>
+
+#define MAX_ARGC 20
+static pthread_t tid[MAX_ARGC];
+
+static const char *catalog = "test/threads/complex.xml";
+static const char *testfiles[] = {
+ "test/threads/abc.xml",
+ "test/threads/acb.xml",
+ "test/threads/bac.xml",
+ "test/threads/bca.xml",
+ "test/threads/cab.xml",
+ "test/threads/cba.xml",
+ "test/threads/invalid.xml",
+};
+
+static void *
+thread_specific_data(void *private_data)
+{
+ xmlDocPtr myDoc;
+ const char *filename = (const char *) private_data;
+
+ if (!strcmp(filename, "test/thread/invalid.xml") == 0) {
+ xmlDoValidityCheckingDefaultValue = 0;
+ xmlGenericErrorContext = stdout;
+ } else {
+ xmlDoValidityCheckingDefaultValue = 1;
+ xmlGenericErrorContext = stderr;
+ }
+ myDoc = xmlParseFile(filename);
+ if (myDoc) {
+ xmlFreeDoc(myDoc);
+ } else
+ printf("parse failed\n");
+ if (!strcmp(filename, "test/thread/invalid.xml") == 0) {
+ if (xmlDoValidityCheckingDefaultValue != 0)
+ printf("ValidityCheckingDefaultValue override failed\n");
+ if (xmlGenericErrorContext != stdout)
+ printf("ValidityCheckingDefaultValue override failed\n");
+ } else {
+ if (xmlDoValidityCheckingDefaultValue != 1)
+ printf("ValidityCheckingDefaultValue override failed\n");
+ if (xmlGenericErrorContext != stderr)
+ printf("ValidityCheckingDefaultValue override failed\n");
+ }
+ return (NULL);
+}
+
+int
+main()
+{
+ unsigned int i;
+ unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
+
+ xmlInitParser();
+ xmlLoadCatalog(catalog);
+
+ for (i = 0; i < num_threads; i++)
+ pthread_create(&tid[i], 0, thread_specific_data, (void *) testfiles[i]);
+ for (i = 0; i < num_threads; i++)
+ pthread_join(tid[i], NULL);
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+ return (0);
+}
+
+#else /* !LIBXML_THREADS_ENABLED */
+int
+main()
+{
+ fprintf(stderr, "libxml was not compiled with thread support\n");
+ return (0);
+}
+#endif