ยปCore Development>Code coverage>Lib/bsddb/test/test_all.py

Python code coverage for Lib/bsddb/test/test_all.py

#countcontent
1n/a"""Run all test cases.
2n/a"""
3n/a
4n/aimport sys
5n/aimport os
6n/aimport unittest
7n/atry:
8n/a # For Pythons w/distutils pybsddb
9n/a import bsddb3 as bsddb
10n/aexcept ImportError:
11n/a # For Python 2.3
12n/a import bsddb
13n/a
14n/a
15n/aif sys.version_info[0] >= 3 :
16n/a charset = "iso8859-1" # Full 8 bit
17n/a
18n/a class logcursor_py3k(object) :
19n/a def __init__(self, env) :
20n/a self._logcursor = env.log_cursor()
21n/a
22n/a def __getattr__(self, v) :
23n/a return getattr(self._logcursor, v)
24n/a
25n/a def __next__(self) :
26n/a v = getattr(self._logcursor, "next")()
27n/a if v is not None :
28n/a v = (v[0], v[1].decode(charset))
29n/a return v
30n/a
31n/a next = __next__
32n/a
33n/a def first(self) :
34n/a v = self._logcursor.first()
35n/a if v is not None :
36n/a v = (v[0], v[1].decode(charset))
37n/a return v
38n/a
39n/a def last(self) :
40n/a v = self._logcursor.last()
41n/a if v is not None :
42n/a v = (v[0], v[1].decode(charset))
43n/a return v
44n/a
45n/a def prev(self) :
46n/a v = self._logcursor.prev()
47n/a if v is not None :
48n/a v = (v[0], v[1].decode(charset))
49n/a return v
50n/a
51n/a def current(self) :
52n/a v = self._logcursor.current()
53n/a if v is not None :
54n/a v = (v[0], v[1].decode(charset))
55n/a return v
56n/a
57n/a def set(self, lsn) :
58n/a v = self._logcursor.set(lsn)
59n/a if v is not None :
60n/a v = (v[0], v[1].decode(charset))
61n/a return v
62n/a
63n/a class cursor_py3k(object) :
64n/a def __init__(self, db, *args, **kwargs) :
65n/a self._dbcursor = db.cursor(*args, **kwargs)
66n/a
67n/a def __getattr__(self, v) :
68n/a return getattr(self._dbcursor, v)
69n/a
70n/a def _fix(self, v) :
71n/a if v is None : return None
72n/a key, value = v
73n/a if isinstance(key, bytes) :
74n/a key = key.decode(charset)
75n/a return (key, value.decode(charset))
76n/a
77n/a def __next__(self) :
78n/a v = getattr(self._dbcursor, "next")()
79n/a return self._fix(v)
80n/a
81n/a next = __next__
82n/a
83n/a def previous(self) :
84n/a v = self._dbcursor.previous()
85n/a return self._fix(v)
86n/a
87n/a def last(self) :
88n/a v = self._dbcursor.last()
89n/a return self._fix(v)
90n/a
91n/a def set(self, k) :
92n/a if isinstance(k, str) :
93n/a k = bytes(k, charset)
94n/a v = self._dbcursor.set(k)
95n/a return self._fix(v)
96n/a
97n/a def set_recno(self, num) :
98n/a v = self._dbcursor.set_recno(num)
99n/a return self._fix(v)
100n/a
101n/a def set_range(self, k, dlen=-1, doff=-1) :
102n/a if isinstance(k, str) :
103n/a k = bytes(k, charset)
104n/a v = self._dbcursor.set_range(k, dlen=dlen, doff=doff)
105n/a return self._fix(v)
106n/a
107n/a def dup(self, flags=0) :
108n/a cursor = self._dbcursor.dup(flags)
109n/a return dup_cursor_py3k(cursor)
110n/a
111n/a def next_dup(self) :
112n/a v = self._dbcursor.next_dup()
113n/a return self._fix(v)
114n/a
115n/a def next_nodup(self) :
116n/a v = self._dbcursor.next_nodup()
117n/a return self._fix(v)
118n/a
119n/a def put(self, key, data, flags=0, dlen=-1, doff=-1) :
120n/a if isinstance(key, str) :
121n/a key = bytes(key, charset)
122n/a if isinstance(data, str) :
123n/a value = bytes(data, charset)
124n/a return self._dbcursor.put(key, data, flags=flags, dlen=dlen,
125n/a doff=doff)
126n/a
127n/a def current(self, flags=0, dlen=-1, doff=-1) :
128n/a v = self._dbcursor.current(flags=flags, dlen=dlen, doff=doff)
129n/a return self._fix(v)
130n/a
131n/a def first(self) :
132n/a v = self._dbcursor.first()
133n/a return self._fix(v)
134n/a
135n/a def pget(self, key=None, data=None, flags=0) :
136n/a # Incorrect because key can be a bare number,
137n/a # but enough to pass testsuite
138n/a if isinstance(key, int) and (data is None) and (flags == 0) :
139n/a flags = key
140n/a key = None
141n/a if isinstance(key, str) :
142n/a key = bytes(key, charset)
143n/a if isinstance(data, int) and (flags==0) :
144n/a flags = data
145n/a data = None
146n/a if isinstance(data, str) :
147n/a data = bytes(data, charset)
148n/a v=self._dbcursor.pget(key=key, data=data, flags=flags)
149n/a if v is not None :
150n/a v1, v2, v3 = v
151n/a if isinstance(v1, bytes) :
152n/a v1 = v1.decode(charset)
153n/a if isinstance(v2, bytes) :
154n/a v2 = v2.decode(charset)
155n/a
156n/a v = (v1, v2, v3.decode(charset))
157n/a
158n/a return v
159n/a
160n/a def join_item(self) :
161n/a v = self._dbcursor.join_item()
162n/a if v is not None :
163n/a v = v.decode(charset)
164n/a return v
165n/a
166n/a def get(self, *args, **kwargs) :
167n/a l = len(args)
168n/a if l == 2 :
169n/a k, f = args
170n/a if isinstance(k, str) :
171n/a k = bytes(k, "iso8859-1")
172n/a args = (k, f)
173n/a elif l == 3 :
174n/a k, d, f = args
175n/a if isinstance(k, str) :
176n/a k = bytes(k, charset)
177n/a if isinstance(d, str) :
178n/a d = bytes(d, charset)
179n/a args =(k, d, f)
180n/a
181n/a v = self._dbcursor.get(*args, **kwargs)
182n/a if v is not None :
183n/a k, v = v
184n/a if isinstance(k, bytes) :
185n/a k = k.decode(charset)
186n/a v = (k, v.decode(charset))
187n/a return v
188n/a
189n/a def get_both(self, key, value) :
190n/a if isinstance(key, str) :
191n/a key = bytes(key, charset)
192n/a if isinstance(value, str) :
193n/a value = bytes(value, charset)
194n/a v=self._dbcursor.get_both(key, value)
195n/a return self._fix(v)
196n/a
197n/a class dup_cursor_py3k(cursor_py3k) :
198n/a def __init__(self, dbcursor) :
199n/a self._dbcursor = dbcursor
200n/a
201n/a class DB_py3k(object) :
202n/a def __init__(self, *args, **kwargs) :
203n/a args2=[]
204n/a for i in args :
205n/a if isinstance(i, DBEnv_py3k) :
206n/a i = i._dbenv
207n/a args2.append(i)
208n/a args = tuple(args2)
209n/a for k, v in kwargs.items() :
210n/a if isinstance(v, DBEnv_py3k) :
211n/a kwargs[k] = v._dbenv
212n/a
213n/a self._db = bsddb._db.DB_orig(*args, **kwargs)
214n/a
215n/a def __contains__(self, k) :
216n/a if isinstance(k, str) :
217n/a k = bytes(k, charset)
218n/a return getattr(self._db, "has_key")(k)
219n/a
220n/a def __getitem__(self, k) :
221n/a if isinstance(k, str) :
222n/a k = bytes(k, charset)
223n/a v = self._db[k]
224n/a if v is not None :
225n/a v = v.decode(charset)
226n/a return v
227n/a
228n/a def __setitem__(self, k, v) :
229n/a if isinstance(k, str) :
230n/a k = bytes(k, charset)
231n/a if isinstance(v, str) :
232n/a v = bytes(v, charset)
233n/a self._db[k] = v
234n/a
235n/a def __delitem__(self, k) :
236n/a if isinstance(k, str) :
237n/a k = bytes(k, charset)
238n/a del self._db[k]
239n/a
240n/a def __getattr__(self, v) :
241n/a return getattr(self._db, v)
242n/a
243n/a def __len__(self) :
244n/a return len(self._db)
245n/a
246n/a def has_key(self, k, txn=None) :
247n/a if isinstance(k, str) :
248n/a k = bytes(k, charset)
249n/a return self._db.has_key(k, txn=txn)
250n/a
251n/a def set_re_delim(self, c) :
252n/a if isinstance(c, str) : # We can use a numeric value byte too
253n/a c = bytes(c, charset)
254n/a return self._db.set_re_delim(c)
255n/a
256n/a def set_re_pad(self, c) :
257n/a if isinstance(c, str) : # We can use a numeric value byte too
258n/a c = bytes(c, charset)
259n/a return self._db.set_re_pad(c)
260n/a
261n/a def get_re_source(self) :
262n/a source = self._db.get_re_source()
263n/a return source.decode(charset)
264n/a
265n/a def put(self, key, data, txn=None, flags=0, dlen=-1, doff=-1) :
266n/a if isinstance(key, str) :
267n/a key = bytes(key, charset)
268n/a if isinstance(data, str) :
269n/a value = bytes(data, charset)
270n/a return self._db.put(key, data, flags=flags, txn=txn, dlen=dlen,
271n/a doff=doff)
272n/a
273n/a def append(self, value, txn=None) :
274n/a if isinstance(value, str) :
275n/a value = bytes(value, charset)
276n/a return self._db.append(value, txn=txn)
277n/a
278n/a def get_size(self, key) :
279n/a if isinstance(key, str) :
280n/a key = bytes(key, charset)
281n/a return self._db.get_size(key)
282n/a
283n/a def exists(self, key, *args, **kwargs) :
284n/a if isinstance(key, str) :
285n/a key = bytes(key, charset)
286n/a return self._db.exists(key, *args, **kwargs)
287n/a
288n/a def get(self, key, default="MagicCookie", txn=None, flags=0, dlen=-1, doff=-1) :
289n/a if isinstance(key, str) :
290n/a key = bytes(key, charset)
291n/a if default != "MagicCookie" : # Magic for 'test_get_none.py'
292n/a v=self._db.get(key, default=default, txn=txn, flags=flags,
293n/a dlen=dlen, doff=doff)
294n/a else :
295n/a v=self._db.get(key, txn=txn, flags=flags,
296n/a dlen=dlen, doff=doff)
297n/a if (v is not None) and isinstance(v, bytes) :
298n/a v = v.decode(charset)
299n/a return v
300n/a
301n/a def pget(self, key, txn=None) :
302n/a if isinstance(key, str) :
303n/a key = bytes(key, charset)
304n/a v=self._db.pget(key, txn=txn)
305n/a if v is not None :
306n/a v1, v2 = v
307n/a if isinstance(v1, bytes) :
308n/a v1 = v1.decode(charset)
309n/a
310n/a v = (v1, v2.decode(charset))
311n/a return v
312n/a
313n/a def get_both(self, key, value, txn=None, flags=0) :
314n/a if isinstance(key, str) :
315n/a key = bytes(key, charset)
316n/a if isinstance(value, str) :
317n/a value = bytes(value, charset)
318n/a v=self._db.get_both(key, value, txn=txn, flags=flags)
319n/a if v is not None :
320n/a v = v.decode(charset)
321n/a return v
322n/a
323n/a def delete(self, key, txn=None) :
324n/a if isinstance(key, str) :
325n/a key = bytes(key, charset)
326n/a return self._db.delete(key, txn=txn)
327n/a
328n/a def keys(self) :
329n/a k = self._db.keys()
330n/a if len(k) and isinstance(k[0], bytes) :
331n/a return [i.decode(charset) for i in self._db.keys()]
332n/a else :
333n/a return k
334n/a
335n/a def items(self) :
336n/a data = self._db.items()
337n/a if not len(data) : return data
338n/a data2 = []
339n/a for k, v in data :
340n/a if isinstance(k, bytes) :
341n/a k = k.decode(charset)
342n/a data2.append((k, v.decode(charset)))
343n/a return data2
344n/a
345n/a def associate(self, secondarydb, callback, flags=0, txn=None) :
346n/a class associate_callback(object) :
347n/a def __init__(self, callback) :
348n/a self._callback = callback
349n/a
350n/a def callback(self, key, data) :
351n/a if isinstance(key, str) :
352n/a key = key.decode(charset)
353n/a data = data.decode(charset)
354n/a key = self._callback(key, data)
355n/a if (key != bsddb._db.DB_DONOTINDEX) :
356n/a if isinstance(key, str) :
357n/a key = bytes(key, charset)
358n/a elif isinstance(key, list) :
359n/a key2 = []
360n/a for i in key :
361n/a if isinstance(i, str) :
362n/a i = bytes(i, charset)
363n/a key2.append(i)
364n/a key = key2
365n/a return key
366n/a
367n/a return self._db.associate(secondarydb._db,
368n/a associate_callback(callback).callback, flags=flags,
369n/a txn=txn)
370n/a
371n/a def cursor(self, txn=None, flags=0) :
372n/a return cursor_py3k(self._db, txn=txn, flags=flags)
373n/a
374n/a def join(self, cursor_list) :
375n/a cursor_list = [i._dbcursor for i in cursor_list]
376n/a return dup_cursor_py3k(self._db.join(cursor_list))
377n/a
378n/a class DBEnv_py3k(object) :
379n/a def __init__(self, *args, **kwargs) :
380n/a self._dbenv = bsddb._db.DBEnv_orig(*args, **kwargs)
381n/a
382n/a def __getattr__(self, v) :
383n/a return getattr(self._dbenv, v)
384n/a
385n/a def log_cursor(self, flags=0) :
386n/a return logcursor_py3k(self._dbenv)
387n/a
388n/a def get_lg_dir(self) :
389n/a return self._dbenv.get_lg_dir().decode(charset)
390n/a
391n/a def get_tmp_dir(self) :
392n/a return self._dbenv.get_tmp_dir().decode(charset)
393n/a
394n/a def get_data_dirs(self) :
395n/a # Have to use a list comprehension and not
396n/a # generators, because we are supporting Python 2.3.
397n/a return tuple(
398n/a [i.decode(charset) for i in self._dbenv.get_data_dirs()])
399n/a
400n/a class DBSequence_py3k(object) :
401n/a def __init__(self, db, *args, **kwargs) :
402n/a self._db=db
403n/a self._dbsequence = bsddb._db.DBSequence_orig(db._db, *args, **kwargs)
404n/a
405n/a def __getattr__(self, v) :
406n/a return getattr(self._dbsequence, v)
407n/a
408n/a def open(self, key, *args, **kwargs) :
409n/a return self._dbsequence.open(bytes(key, charset), *args, **kwargs)
410n/a
411n/a def get_key(self) :
412n/a return self._dbsequence.get_key().decode(charset)
413n/a
414n/a def get_dbp(self) :
415n/a return self._db
416n/a
417n/a import string
418n/a string.letters=[chr(i) for i in xrange(65,91)]
419n/a
420n/a bsddb._db.DBEnv_orig = bsddb._db.DBEnv
421n/a bsddb._db.DB_orig = bsddb._db.DB
422n/a if bsddb.db.version() <= (4, 3) :
423n/a bsddb._db.DBSequence_orig = None
424n/a else :
425n/a bsddb._db.DBSequence_orig = bsddb._db.DBSequence
426n/a
427n/a def do_proxy_db_py3k(flag) :
428n/a flag2 = do_proxy_db_py3k.flag
429n/a do_proxy_db_py3k.flag = flag
430n/a if flag :
431n/a bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = DBEnv_py3k
432n/a bsddb.DB = bsddb.db.DB = bsddb._db.DB = DB_py3k
433n/a bsddb._db.DBSequence = DBSequence_py3k
434n/a else :
435n/a bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = bsddb._db.DBEnv_orig
436n/a bsddb.DB = bsddb.db.DB = bsddb._db.DB = bsddb._db.DB_orig
437n/a bsddb._db.DBSequence = bsddb._db.DBSequence_orig
438n/a return flag2
439n/a
440n/a do_proxy_db_py3k.flag = False
441n/a do_proxy_db_py3k(True)
442n/a
443n/atry:
444n/a # For Pythons w/distutils pybsddb
445n/a from bsddb3 import db, dbtables, dbutils, dbshelve, \
446n/a hashopen, btopen, rnopen, dbobj
447n/aexcept ImportError:
448n/a # For Python 2.3
449n/a from bsddb import db, dbtables, dbutils, dbshelve, \
450n/a hashopen, btopen, rnopen, dbobj
451n/a
452n/atry:
453n/a from bsddb3 import test_support
454n/aexcept ImportError:
455n/a if sys.version_info[0] < 3 :
456n/a from test import test_support
457n/a else :
458n/a from test import support as test_support
459n/a
460n/a
461n/atry:
462n/a if sys.version_info[0] < 3 :
463n/a from threading import Thread, currentThread
464n/a del Thread, currentThread
465n/a else :
466n/a from threading import Thread, current_thread
467n/a del Thread, current_thread
468n/a have_threads = True
469n/aexcept ImportError:
470n/a have_threads = False
471n/a
472n/averbose = 0
473n/aif 'verbose' in sys.argv:
474n/a verbose = 1
475n/a sys.argv.remove('verbose')
476n/a
477n/aif 'silent' in sys.argv: # take care of old flag, just in case
478n/a verbose = 0
479n/a sys.argv.remove('silent')
480n/a
481n/a
482n/adef print_versions():
483n/a print
484n/a print '-=' * 38
485n/a print db.DB_VERSION_STRING
486n/a print 'bsddb.db.version(): %s' % (db.version(), )
487n/a print 'bsddb.db.__version__: %s' % db.__version__
488n/a print 'bsddb.db.cvsid: %s' % db.cvsid
489n/a
490n/a # Workaround for allowing generating an EGGs as a ZIP files.
491n/a suffix="__"
492n/a print 'py module: %s' % getattr(bsddb, "__file"+suffix)
493n/a print 'extension module: %s' % getattr(bsddb, "__file"+suffix)
494n/a
495n/a print 'python version: %s' % sys.version
496n/a print 'My pid: %s' % os.getpid()
497n/a print '-=' * 38
498n/a
499n/a
500n/adef get_new_path(name) :
501n/a get_new_path.mutex.acquire()
502n/a try :
503n/a import os
504n/a path=os.path.join(get_new_path.prefix,
505n/a name+"_"+str(os.getpid())+"_"+str(get_new_path.num))
506n/a get_new_path.num+=1
507n/a finally :
508n/a get_new_path.mutex.release()
509n/a return path
510n/a
511n/adef get_new_environment_path() :
512n/a path=get_new_path("environment")
513n/a import os
514n/a try:
515n/a os.makedirs(path,mode=0700)
516n/a except os.error:
517n/a test_support.rmtree(path)
518n/a os.makedirs(path)
519n/a return path
520n/a
521n/adef get_new_database_path() :
522n/a path=get_new_path("database")
523n/a import os
524n/a if os.path.exists(path) :
525n/a os.remove(path)
526n/a return path
527n/a
528n/a
529n/a# This path can be overriden via "set_test_path_prefix()".
530n/aimport os, os.path
531n/aget_new_path.prefix=os.path.join(os.sep,"tmp","z-Berkeley_DB")
532n/aget_new_path.num=0
533n/a
534n/adef get_test_path_prefix() :
535n/a return get_new_path.prefix
536n/a
537n/adef set_test_path_prefix(path) :
538n/a get_new_path.prefix=path
539n/a
540n/adef remove_test_path_directory() :
541n/a test_support.rmtree(get_new_path.prefix)
542n/a
543n/aif have_threads :
544n/a import threading
545n/a get_new_path.mutex=threading.Lock()
546n/a del threading
547n/aelse :
548n/a class Lock(object) :
549n/a def acquire(self) :
550n/a pass
551n/a def release(self) :
552n/a pass
553n/a get_new_path.mutex=Lock()
554n/a del Lock
555n/a
556n/a
557n/a
558n/aclass PrintInfoFakeTest(unittest.TestCase):
559n/a def testPrintVersions(self):
560n/a print_versions()
561n/a
562n/a
563n/a# This little hack is for when this module is run as main and all the
564n/a# other modules import it so they will still be able to get the right
565n/a# verbose setting. It's confusing but it works.
566n/aif sys.version_info[0] < 3 :
567n/a import test_all
568n/a test_all.verbose = verbose
569n/aelse :
570n/a import sys
571n/a print >>sys.stderr, "Work to do!"
572n/a
573n/a
574n/adef suite(module_prefix='', timing_check=None):
575n/a test_modules = [
576n/a 'test_associate',
577n/a 'test_basics',
578n/a 'test_dbenv',
579n/a 'test_db',
580n/a 'test_compare',
581n/a 'test_compat',
582n/a 'test_cursor_pget_bug',
583n/a 'test_dbobj',
584n/a 'test_dbshelve',
585n/a 'test_dbtables',
586n/a 'test_distributed_transactions',
587n/a 'test_early_close',
588n/a 'test_fileid',
589n/a 'test_get_none',
590n/a 'test_join',
591n/a 'test_lock',
592n/a 'test_misc',
593n/a 'test_pickle',
594n/a 'test_queue',
595n/a 'test_recno',
596n/a 'test_replication',
597n/a 'test_sequence',
598n/a 'test_thread',
599n/a ]
600n/a
601n/a alltests = unittest.TestSuite()
602n/a for name in test_modules:
603n/a #module = __import__(name)
604n/a # Do it this way so that suite may be called externally via
605n/a # python's Lib/test/test_bsddb3.
606n/a module = __import__(module_prefix+name, globals(), locals(), name)
607n/a
608n/a alltests.addTest(module.test_suite())
609n/a if timing_check:
610n/a alltests.addTest(unittest.makeSuite(timing_check))
611n/a return alltests
612n/a
613n/a
614n/adef test_suite():
615n/a suite = unittest.TestSuite()
616n/a suite.addTest(unittest.makeSuite(PrintInfoFakeTest))
617n/a return suite
618n/a
619n/a
620n/aif __name__ == '__main__':
621n/a print_versions()
622n/a unittest.main(defaultTest='suite')