1# See the file LICENSE for redistribution information.
2#
3# Copyright (c) 2001,2008 Oracle.  All rights reserved.
4#
5# $Id: env016.tcl,v 1.1 2008/02/01 19:03:40 sue Exp $
6#
7# TEST	env016
8# TEST	Replication settings and DB_CONFIG
9# TEST
10# TEST	Create a DB_CONFIG for various replication settings.  Use
11# TEST	rep_stat or getter functions to verify they're set correctly.
12#
13proc env016 { } {
14	source ./include.tcl
15
16	puts "Env016: Replication DB_CONFIG settings."
17
18	#
19	# Test options that we query via rep_stat.
20	# Structure of the list is:
21	#	0. Arg used in DB_CONFIG.
22	#	1. Value assigned in DB_CONFIG.
23	#	2. Message output during test.
24	#	3. String to search for in stat output.
25	#
26	set slist {
27		{ "rep_set_priority" "1" "Env016.a0: Priority"
28		    "Environment priority" }
29	}
30	puts "\tEnv016.a: Check settings via rep_stat."
31	foreach l $slist {
32		set carg [lindex $l 0]
33		set val [lindex $l 1]
34		set msg [lindex $l 2]
35		set str [lindex $l 3]
36		env_cleanup $testdir
37		replsetup $testdir/MSGQUEUEDIR
38		set masterdir $testdir/MASTERDIR
39		file mkdir $masterdir
40		repladd 1
41
42		# Open a master.
43		puts "\t\t$msg"
44		#
45		# Create DB_CONFIG.
46		#
47		env016_make_config $masterdir $carg $val
48		#
49		# Open env.
50		#
51		set ma_envcmd "berkdb_env_noerr -create -txn nosync \
52		    -home $masterdir -errpfx MASTER -rep_master \
53		    -rep_transport \[list 1 replsend\]"
54		set masterenv [eval $ma_envcmd]
55		#
56		# Verify value
57		#
58		set gval [stat_field $masterenv rep_stat $str]
59		error_check_good stat_get $gval $val
60
61		error_check_good masterenv_close [$masterenv close] 0
62		replclose $testdir/MSGQUEUEDIR
63	}
64
65	# Test options that we query via getter functions.
66	# Structure of the list is:
67	#	0. Arg used in DB_CONFIG.
68	#	1. Value assigned in DB_CONFIG.
69	#	2. Message output during test.
70	#	3. Getter command.
71	#	4. Getter results expected if different from #1 value.
72	set glist {
73		{ "rep_set_clockskew" "102 100" "Env016.b0: Rep clockskew"
74		    "rep_get_clockskew" }
75		{ "rep_set_config" "db_rep_conf_bulk" "Env016.b1: Rep config"
76		    "rep_get_config bulk" "1" }
77		{ "rep_set_limit" "0 1048576" "Env016.b2: Rep limit"
78		    "rep_get_limit" }
79		{ "rep_set_nsites" "6" "Env016.b3: Rep nsites"
80		    "rep_get_nsites" }
81		{ "rep_set_request" "4000 128000" "Env016.b4: Rep request"
82		    "rep_get_request" }
83		{ "rep_set_timeout" "db_rep_election_timeout 500000"
84		    "Env016.b5: Rep elect timeout" "rep_get_timeout election"
85		    "500000" }
86		{ "rep_set_timeout" "db_rep_checkpoint_delay 500000"
87		    "Env016.b6: Rep ckp timeout"
88		    "rep_get_timeout checkpoint_delay" "500000" }
89	}
90	puts "\tEnv016.b: Check settings via getter functions."
91	foreach l $glist {
92		set carg [lindex $l 0]
93		set val [lindex $l 1]
94		set msg [lindex $l 2]
95		set getter [lindex $l 3]
96		if { [llength $l] > 4 } {
97			set getval [lindex $l 4]
98		} else {
99			set getval $val
100		}
101		env_cleanup $testdir
102		replsetup $testdir/MSGQUEUEDIR
103		set masterdir $testdir/MASTERDIR
104		file mkdir $masterdir
105		repladd 1
106
107		# Open a master.
108		puts "\t\t$msg"
109		#
110		# Create DB_CONFIG.
111		#
112		env016_make_config $masterdir $carg $val
113		#
114		# Open env.
115		#
116		set ma_envcmd "berkdb_env_noerr -create -txn nosync \
117		    -home $masterdir -errpfx MASTER -rep_master \
118		    -rep_transport \[list 1 replsend\]"
119		set masterenv [eval $ma_envcmd]
120		#
121		# Verify value
122		#
123		set gval [eval $masterenv $getter]
124		error_check_good stat_get $gval $getval
125
126		error_check_good masterenv_close [$masterenv close] 0
127		replclose $testdir/MSGQUEUEDIR
128	}
129}
130
131proc env016_make_config { dir carg cval } {
132	set cid [open $dir/DB_CONFIG w]
133	puts $cid "$carg $cval"
134	close $cid
135}
136