summaryrefslogtreecommitdiff
path: root/test/tcl/env014.tcl
blob: 2ee3967a0c6108836ac2d1fa9e20624732027a30 (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
# See the file LICENSE for redistribution information.
#
# Copyright (c) 2005, 2015 Oracle and/or its affiliates.  All rights reserved.
#
# $Id$
#
# TEST	env014
# TEST
# TEST	Make sure that attempts to open an environment with
# TEST	incompatible flags (e.g. replication without transactions)
# TEST	fail with the appropriate messages.
# TEST
# TEST	A new thread of control joining an env automatically
# TEST	initializes the same subsystems as the original env.
# TEST	Make sure that the attempt to change subsystems when
# TEST	joining an env fails with the appropriate messages.
# TEST
# TEST  Make sure that full blob logging is enabled when replication
# TEST  is enabled, and that it cannot be disabled.

proc env014 { } {
	source ./include.tcl

	set tnum "014"
	puts "Env$tnum: Environment subsystem initialization and env joins."
	env_cleanup $testdir

	# Open an env with -recover but not -create; should fail.
	puts "\tEnv$tnum.a: Open env with -recover but not -create."
	catch {set env [berkdb_env_noerr -recover -txn -home $testdir]} ret
	error_check_good recover_wo_create \
	    [is_substr $ret "requires the create flag"] 1

	# Open an env with -recover but not -txn; should fail.
	puts "\tEnv$tnum.b: Open env with -recover but not -txn."
	catch {set env [berkdb_env_noerr -create -recover -home $testdir]} ret
	error_check_good recover_wo_txn \
	    [is_substr $ret "requires transaction support"] 1

	# Open an env with -replication but not -lock; should fail.
	puts "\tEnv$tnum.c: Open env with -rep but not -lock."
	catch {set env\
	    [berkdb_env_noerr -create -rep_master -home $testdir]} ret
	error_check_good rep_wo_lock \
	    [is_substr $ret "requires locking support"] 1

	# Open an env with -replication but not -txn; should fail.
	puts "\tEnv$tnum.d: Open env with -rep but not -txn."
	catch {set env\
	    [berkdb_env_noerr -create -rep_master -lock -home $testdir]} ret
	error_check_good rep_wo_txn \
	    [is_substr $ret "requires transaction support"] 1

	# Skip remainder of test for HP-UX; HP-UX does not allow
	# opening a second handle on an environment.
	if { $is_hp_test == 1 } {
		puts "Skipping remainder of env$tnum for HP-UX."
		return
	}

	# Join -txn env with -cdb; should fail.
	puts "\tEnv$tnum.e: Join -txn env with -cdb."
	set env [berkdb_env_noerr -create -home $testdir -txn]
	error_check_good env_open [is_valid_env $env] TRUE

	catch {set env2 [berkdb_env_noerr -home $testdir -cdb]} ret
	error_check_good txn+cdb [is_substr $ret "incompatible"] 1
	error_check_good env_close [$env close] 0
	error_check_good env_remove [berkdb envremove -force -home $testdir] 0

	# Join -cdb env with -txn; should fail.
	puts "\tEnv$tnum.f: Join -cdb env with -txn."
	set env [berkdb_env_noerr -create -home $testdir -cdb]
	error_check_good env_open [is_valid_env $env] TRUE

	catch {set env2 [berkdb_env_noerr -home $testdir -txn]} ret
	error_check_good cdb+txn [is_substr $ret "incompatible"] 1
	error_check_good env_close [$env close] 0
	error_check_good env_remove [berkdb envremove -force -home $testdir] 0

	# Open an env with -txn.  Join the env, and start a txn.
	puts "\tEnv$tnum.g: Join -txn env, and start a txn."
	set env [berkdb_env_noerr -create -home $testdir -txn]
	error_check_good env_open [is_valid_env $env] TRUE
	set env2 [berkdb_env_noerr -home $testdir]
	error_check_good env2_open [is_valid_env $env2] TRUE

	set txn [$env2 txn]
	error_check_good env2_txn [is_valid_txn $txn $env2] TRUE
	error_check_good txn_commit [$txn commit] 0

	error_check_good env2_close [$env2 close] 0
	error_check_good env_close [$env close] 0
	error_check_good env_remove [berkdb envremove -force -home $testdir] 0

	# Join -txn env with -lock; should succeed and use txns.
	puts "\tEnv$tnum.h: Join -txn env with -lock, and start a txn."
	set env [berkdb_env_noerr -create -home $testdir -txn]
	error_check_good env_open [is_valid_env $env] TRUE
	set env2 [berkdb_env_noerr -home $testdir -lock]
	error_check_good env2_open [is_valid_env $env2] TRUE

	set txn [$env2 txn]
	error_check_good env2_txn [is_valid_txn $txn $env2] TRUE
	error_check_good txn_commit [$txn commit] 0

	error_check_good env2_close [$env2 close] 0
	error_check_good env_close [$env close] 0
	error_check_good env_remove [berkdb envremove -force -home $testdir] 0

  	# Join plain vanilla env with -txn; should fail.
	puts "\tEnv$tnum.i: Join plain vanilla env with -txn."
	set env [berkdb_env_noerr -create -home $testdir]
	error_check_good env_open [is_valid_env $env] TRUE
	catch {set env2 [berkdb_env_noerr -home $testdir -txn]} ret
	error_check_good ds+txn [is_substr $ret "incompatible"] 1

	error_check_good env_close [$env close] 0
	error_check_good env_remove [berkdb envremove -force -home $testdir] 0

  	# Enabling replication enables DB_LOG_BLOB, and it cannot be disabled
	puts "\tEnv$tnum.i: Replication enables DB_LOG_BLOB."
	set env [berkdb_env_noerr -create -rep_master \
	    -rep_transport [list 1 replsend]  -lock -txn -home $testdir]
	error_check_good env_open [is_valid_env $env] TRUE
	error_check_good log_blob_on [$env log_get_config blob] 1
	catch {$env log_config blob off} ret
	error_check_good log_blob_enable \
	    [is_substr $ret "DB_LOG_BLOB must be enabled"] 1

	error_check_good env_close [$env close] 0
	error_check_good env_remove [berkdb envremove -force -home $testdir] 0
}