diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2001-10-17 11:30:37 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2001-10-17 11:30:37 +0000 |
commit | ab7488efa556f86d18c253b80e7b3591e255546a (patch) | |
tree | eeea3ad27883f41d55b0d043a2d82988b998b7bf | |
parent | 85c11fa20605e0b4fafc680627bd4b66933ac67e (diff) | |
download | android_external_libxml2-ab7488efa556f86d18c253b80e7b3591e255546a.tar.gz android_external_libxml2-ab7488efa556f86d18c253b80e7b3591e255546a.tar.bz2 android_external_libxml2-ab7488efa556f86d18c253b80e7b3591e255546a.zip |
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-- | ChangeLog | 6 | ||||
-rw-r--r-- | Makefile.am | 15 | ||||
-rw-r--r-- | configure.in | 11 | ||||
-rw-r--r-- | test/threads/a.example.org.xml | 6 | ||||
-rw-r--r-- | test/threads/a/a.dtd | 1 | ||||
-rw-r--r-- | test/threads/abc.dtd | 7 | ||||
-rw-r--r-- | test/threads/abc.xml | 7 | ||||
-rw-r--r-- | test/threads/acb.dtd | 7 | ||||
-rw-r--r-- | test/threads/acb.xml | 7 | ||||
-rw-r--r-- | test/threads/b.example.org.xml | 6 | ||||
-rw-r--r-- | test/threads/b/b.dtd | 1 | ||||
-rw-r--r-- | test/threads/bac.dtd | 7 | ||||
-rw-r--r-- | test/threads/bac.xml | 7 | ||||
-rw-r--r-- | test/threads/bca.dtd | 7 | ||||
-rw-r--r-- | test/threads/bca.xml | 7 | ||||
-rw-r--r-- | test/threads/c.example.org.xml | 6 | ||||
-rw-r--r-- | test/threads/c/c.dtd | 1 | ||||
-rw-r--r-- | test/threads/cab.dtd | 7 | ||||
-rw-r--r-- | test/threads/cab.xml | 7 | ||||
-rw-r--r-- | test/threads/cba.dtd | 7 | ||||
-rw-r--r-- | test/threads/cba.xml | 7 | ||||
-rw-r--r-- | test/threads/complex.xml | 6 | ||||
-rw-r--r-- | test/threads/example.org.xml | 9 | ||||
-rw-r--r-- | test/threads/invalid.xml | 2 | ||||
-rw-r--r-- | testThreads.c | 87 |
25 files changed, 235 insertions, 6 deletions
@@ -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 |