Annotation of embedaddon/libxml2/python/tests/thread2.py, revision 1.1.1.1
1.1 misho 1: #!/usr/bin/python -u
2: import string, sys, time
3: import thread
4: from threading import Thread, Lock
5:
6: import libxml2
7:
8: THREADS_COUNT = 15
9:
10: failed = 0
11:
12: class ErrorHandler:
13:
14: def __init__(self):
15: self.errors = []
16: self.lock = Lock()
17:
18: def handler(self,ctx,str):
19: self.lock.acquire()
20: self.errors.append(str)
21: self.lock.release()
22:
23: def getLineNumbersDefault():
24: old = libxml2.lineNumbersDefault(0)
25: libxml2.lineNumbersDefault(old)
26: return old
27:
28: def test(expectedLineNumbersDefault):
29: time.sleep(1)
30: global failed
31: # check a per thread-global
32: if expectedLineNumbersDefault != getLineNumbersDefault():
33: failed = 1
34: print "FAILED to obtain correct value for " \
35: "lineNumbersDefault in thread %d" % thread.get_ident()
36: # check ther global error handler
37: # (which is NOT per-thread in the python bindings)
38: try:
39: doc = libxml2.parseFile("bad.xml")
40: except:
41: pass
42: else:
43: assert "failed"
44:
45: # global error handler
46: eh = ErrorHandler()
47: libxml2.registerErrorHandler(eh.handler,"")
48:
49: # set on the main thread only
50: libxml2.lineNumbersDefault(1)
51: test(1)
52: ec = len(eh.errors)
53: if ec == 0:
54: print "FAILED: should have obtained errors"
55: sys.exit(1)
56:
57: ts = []
58: for i in range(THREADS_COUNT):
59: # expect 0 for lineNumbersDefault because
60: # the new value has been set on the main thread only
61: ts.append(Thread(target=test,args=(0,)))
62: for t in ts:
63: t.start()
64: for t in ts:
65: t.join()
66:
67: if len(eh.errors) != ec+THREADS_COUNT*ec:
68: print "FAILED: did not obtain the correct number of errors"
69: sys.exit(1)
70:
71: # set lineNumbersDefault for future new threads
72: libxml2.thrDefLineNumbersDefaultValue(1)
73: ts = []
74: for i in range(THREADS_COUNT):
75: # expect 1 for lineNumbersDefault
76: ts.append(Thread(target=test,args=(1,)))
77: for t in ts:
78: t.start()
79: for t in ts:
80: t.join()
81:
82: if len(eh.errors) != ec+THREADS_COUNT*ec*2:
83: print "FAILED: did not obtain the correct number of errors"
84: sys.exit(1)
85:
86: if failed:
87: print "FAILED"
88: sys.exit(1)
89:
90: # Memory debug specific
91: libxml2.cleanupParser()
92: if libxml2.debugMemory(1) == 0:
93: print "OK"
94: else:
95: print "Memory leak %d bytes" % (libxml2.debugMemory(1))
96: libxml2.dumpMemory()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>