summaryrefslogtreecommitdiff
path: root/db/test/sdb001.tcl
blob: 4ebb24dea295006ef9557b0a545b02a1c480bd71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# See the file LICENSE for redistribution information.
#
# Copyright (c) 1999-2004
#	Sleepycat Software.  All rights reserved.
#
# $Id: sdb001.tcl,v 11.23 2004/04/05 17:49:25 carol Exp $
#
# TEST	sdb001	Tests mixing db and subdb operations
# TEST	Tests mixing db and subdb operations
# TEST	Create a db, add data, try to create a subdb.
# TEST	Test naming db and subdb with a leading - for correct parsing
# TEST	Existence check -- test use of -excl with subdbs
# TEST
# TEST	Test non-subdb and subdb operations
# TEST	Test naming (filenames begin with -)
# TEST	Test existence (cannot create subdb of same name with -excl)
proc sdb001 { method args } {
	source ./include.tcl
	global errorInfo

	set args [convert_args $method $args]
	set omethod [convert_method $method]

	if { [is_queue $method] == 1 } {
		puts "Subdb001: skipping for method $method"
		return
	}
	puts "Subdb001: $method ($args) subdb and non-subdb tests"

	set testfile $testdir/subdb001.db
	set eindex [lsearch -exact $args "-env"]
	if { $eindex != -1 } {
		set env NULL
		incr eindex
		set env [lindex $args $eindex]
		puts "Subdb001 skipping for env $env"
		return
	}
	# Create the database and open the dictionary
	set subdb subdb0
	cleanup $testdir NULL
	puts "\tSubdb001.a: Non-subdb database and subdb operations"
	#
	# Create a db with no subdbs.  Add some data.  Close.  Try to
	# open/add with a subdb.  Should fail.
	#
	puts "\tSubdb001.a.0: Create db, add data, close, try subdb"
	set db [eval {berkdb_open -create -mode 0644} \
	    $args {$omethod $testfile}]
	error_check_good dbopen [is_valid_db $db] TRUE

	set did [open $dict]

	set pflags ""
	set gflags ""
	set count 0

	if { [is_record_based $method] == 1 } {
		append gflags " -recno"
	}
	while { [gets $did str] != -1 && $count < 5 } {
		if { [is_record_based $method] == 1 } {
			global kvals

			set key [expr $count + 1]
			set kvals($key) $str
		} else {
			set key $str
		}
		set ret [eval \
		    {$db put} $pflags {$key [chop_data $method $str]}]
		error_check_good put $ret 0

		set ret [eval {$db get} $gflags {$key}]
		error_check_good \
		    get $ret [list [list $key [pad_data $method $str]]]
		incr count
	}
	close $did
	error_check_good db_close [$db close] 0
	set ret [catch {eval {berkdb_open_noerr -create -mode 0644} $args \
	    {$omethod $testfile $subdb}} db]
	error_check_bad dbopen $ret 0
	#
	# Create a db with no subdbs.  Add no data.  Close.  Try to
	# open/add with a subdb.  Should fail.
	#
	set testfile $testdir/subdb001a.db
	puts "\tSubdb001.a.1: Create db, close, try subdb"
	#
	# !!!
	# Using -truncate is illegal when opening for subdbs, but we
	# can use it here because we are not using subdbs for this
	# create.
	#
	set db [eval {berkdb_open -create -truncate -mode 0644} $args \
	    {$omethod $testfile}]
	error_check_good dbopen [is_valid_db $db] TRUE
	error_check_good db_close [$db close] 0

	set ret [catch {eval {berkdb_open_noerr -create -mode 0644} $args \
	    {$omethod $testfile $subdb}} db]
	error_check_bad dbopen $ret 0

	if { [is_queue $method] == 1 } {
		puts "Subdb001: skipping remainder of test for method $method"
		return
	}

	#
	# Test naming, db and subdb names beginning with -.
	#
	puts "\tSubdb001.b: Naming"
	set cwd [pwd]
	cd $testdir
	set testfile1 -subdb001.db
	set subdb -subdb
	puts "\tSubdb001.b.0: Create db and subdb with -name, no --"
	set ret [catch {eval {berkdb_open -create -mode 0644} $args \
	    {$omethod $testfile1 $subdb}} db]
	error_check_bad dbopen $ret 0
	puts "\tSubdb001.b.1: Create db and subdb with -name, with --"
	set db [eval {berkdb_open -create -mode 0644} $args \
	    {$omethod -- $testfile1 $subdb}]
	error_check_good dbopen [is_valid_db $db] TRUE
	error_check_good db_close [$db close] 0

	cd $cwd

	#
	# Create 1 db with 1 subdb.  Try to create another subdb of
	# the same name.  Should fail.
	#

	puts "\tSubdb001.c: Existence check"
	set testfile $testdir/subdb001d.db
	set subdb subdb
	set ret [catch {eval {berkdb_open -create -excl -mode 0644} $args \
	    {$omethod $testfile $subdb}} db]
	error_check_good dbopen [is_valid_db $db] TRUE
	set ret [catch {eval {berkdb_open_noerr -create -excl -mode 0644} \
	    $args {$omethod $testfile $subdb}} db1]
	error_check_bad dbopen $ret 0
	error_check_good db_close [$db close] 0

	return
}