1#include <sys/types.h>
2
3#include <assert.h>
4#include <stdlib.h>
5#include <string.h>
6
7#include "db.h"
8
9#define	ENV {								\
10	if (dbenv != NULL)						\
11		assert(dbenv->close(dbenv, 0) == 0);			\
12	assert(db_env_create(&dbenv, 0) == 0);				\
13	dbenv->set_errfile(dbenv, stderr);				\
14}
15
16int
17main()
18{
19	const u_int8_t *lk_conflicts;
20	DB_ENV *dbenv;
21	db_timeout_t timeout;
22	u_int32_t a, b, c, v;
23	int nmodes, lk_modes;
24	u_int8_t conflicts[40];
25
26	dbenv = NULL;
27
28	/* tx_max: NOT reset at run-time. */
29	system("rm -rf TESTDIR; mkdir TESTDIR");
30	ENV
31	assert(dbenv->set_tx_max(dbenv, 37) == 0);
32	assert(dbenv->open(dbenv,
33	    "TESTDIR", DB_CREATE | DB_INIT_TXN, 0666) == 0);
34	assert(dbenv->get_tx_max(dbenv, &v) == 0);
35	assert(v == 37);
36	ENV
37	assert(dbenv->set_tx_max(dbenv, 63) == 0);
38	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
39	assert(dbenv->get_tx_max(dbenv, &v) == 0);
40	assert(v == 37);
41
42	/* lg_max: reset at run-time. */
43	system("rm -rf TESTDIR; mkdir TESTDIR");
44	ENV
45	assert(dbenv->set_lg_max(dbenv, 37 * 1024 * 1024) == 0);
46	assert(dbenv->open(dbenv,
47	    "TESTDIR", DB_CREATE | DB_INIT_LOG, 0666) == 0);
48	assert(dbenv->get_lg_max(dbenv, &v) == 0);
49	assert(v == 37 * 1024 * 1024);
50	ENV
51	assert(dbenv->set_lg_max(dbenv, 63 * 1024 * 1024) == 0);
52	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
53	assert(dbenv->get_lg_max(dbenv, &v) == 0);
54	assert(v == 63 * 1024 * 1024);
55
56	/* lg_bsize: NOT reset at run-time. */
57	system("rm -rf TESTDIR; mkdir TESTDIR");
58	ENV
59	assert(dbenv->set_lg_bsize(dbenv, 37 * 1024) == 0);
60	assert(dbenv->open(dbenv,
61	    "TESTDIR", DB_CREATE | DB_INIT_LOG, 0666) == 0);
62	assert(dbenv->get_lg_bsize(dbenv, &v) == 0);
63	assert(v == 37 * 1024);
64	ENV
65	assert(dbenv->set_lg_bsize(dbenv, 63 * 1024) == 0);
66	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
67	assert(dbenv->get_lg_bsize(dbenv, &v) == 0);
68	assert(v == 37 * 1024);
69
70	/* lg_regionmax: NOT reset at run-time. */
71	system("rm -rf TESTDIR; mkdir TESTDIR");
72	ENV
73	assert(dbenv->set_lg_regionmax(dbenv, 137 * 1024) == 0);
74	assert(dbenv->open(dbenv,
75	    "TESTDIR", DB_CREATE | DB_INIT_LOG, 0666) == 0);
76	assert(dbenv->get_lg_regionmax(dbenv, &v) == 0);
77	assert(v == 137 * 1024);
78	ENV
79	assert(dbenv->set_lg_regionmax(dbenv, 163 * 1024) == 0);
80	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
81	assert(dbenv->get_lg_regionmax(dbenv, &v) == 0);
82	assert(v == 137 * 1024);
83
84	/* lk_get_lk_conflicts: NOT reset at run-time. */
85	system("rm -rf TESTDIR; mkdir TESTDIR");
86	ENV
87	memset(conflicts, 'a', sizeof(conflicts));
88	nmodes = 6;
89	assert(dbenv->set_lk_conflicts(dbenv, conflicts, nmodes) == 0);
90	assert(dbenv->open(dbenv,
91	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
92	assert(dbenv->get_lk_conflicts(dbenv, &lk_conflicts, &lk_modes) == 0);
93	assert(lk_conflicts[0] == 'a');
94	assert(lk_modes == 6);
95	ENV
96	memset(conflicts, 'b', sizeof(conflicts));
97	nmodes = 8;
98	assert(dbenv->set_lk_conflicts(dbenv, conflicts, nmodes) == 0);
99	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
100	assert(dbenv->get_lk_conflicts(dbenv, &lk_conflicts, &lk_modes) == 0);
101	assert(lk_conflicts[0] == 'a');
102	assert(lk_modes == 6);
103
104	/* lk_detect: NOT reset at run-time. */
105	system("rm -rf TESTDIR; mkdir TESTDIR");
106	ENV
107	assert(dbenv->set_lk_detect(dbenv, DB_LOCK_MAXLOCKS) == 0);
108	assert(dbenv->open(dbenv,
109	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
110	assert(dbenv->get_lk_detect(dbenv, &v) == 0);
111	assert(v == DB_LOCK_MAXLOCKS);
112	ENV
113	assert(dbenv->set_lk_detect(dbenv, DB_LOCK_DEFAULT) == 0);
114	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
115	assert(dbenv->get_lk_detect(dbenv, &v) == 0);
116	assert(v == DB_LOCK_MAXLOCKS);
117
118	/* lk_max_locks: NOT reset at run-time. */
119	system("rm -rf TESTDIR; mkdir TESTDIR");
120	ENV
121	assert(dbenv->set_lk_max_locks(dbenv, 37) == 0);
122	assert(dbenv->open(dbenv,
123	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
124	assert(dbenv->get_lk_max_locks(dbenv, &v) == 0);
125	assert(v == 37);
126	ENV
127	assert(dbenv->set_lk_max_locks(dbenv, 63) == 0);
128	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
129	assert(dbenv->get_lk_max_locks(dbenv, &v) == 0);
130	assert(v == 37);
131
132	/* lk_max_lockers: NOT reset at run-time. */
133	system("rm -rf TESTDIR; mkdir TESTDIR");
134	ENV
135	assert(dbenv->set_lk_max_lockers(dbenv, 37) == 0);
136	assert(dbenv->open(dbenv,
137	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
138	assert(dbenv->get_lk_max_lockers(dbenv, &v) == 0);
139	assert(v == 37);
140	ENV
141	assert(dbenv->set_lk_max_lockers(dbenv, 63) == 0);
142	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
143	assert(dbenv->get_lk_max_lockers(dbenv, &v) == 0);
144	assert(v == 37);
145
146	/* lk_max_objects: NOT reset at run-time. */
147	system("rm -rf TESTDIR; mkdir TESTDIR");
148	ENV
149	assert(dbenv->set_lk_max_objects(dbenv, 37) == 0);
150	assert(dbenv->open(dbenv,
151	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
152	assert(dbenv->get_lk_max_objects(dbenv, &v) == 0);
153	assert(v == 37);
154	ENV
155	assert(dbenv->set_lk_max_objects(dbenv, 63) == 0);
156	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
157	assert(dbenv->get_lk_max_objects(dbenv, &v) == 0);
158	assert(v == 37);
159
160	/* lock timeout: reset at run-time. */
161	system("rm -rf TESTDIR; mkdir TESTDIR");
162	ENV
163	assert(dbenv->set_timeout(dbenv, 37, DB_SET_LOCK_TIMEOUT) == 0);
164	assert(dbenv->open(dbenv,
165	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
166	assert(dbenv->get_timeout(dbenv, &timeout, DB_SET_LOCK_TIMEOUT) == 0);
167	assert(timeout == 37);
168	ENV
169	assert(dbenv->set_timeout(dbenv, 63, DB_SET_LOCK_TIMEOUT) == 0);
170	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
171	assert(dbenv->get_timeout(dbenv, &timeout, DB_SET_LOCK_TIMEOUT) == 0);
172	assert(timeout == 63);
173
174	/* txn timeout: reset at run-time. */
175	system("rm -rf TESTDIR; mkdir TESTDIR");
176	ENV
177	assert(dbenv->set_timeout(dbenv, 37, DB_SET_TXN_TIMEOUT) == 0);
178	assert(dbenv->open(dbenv,
179	    "TESTDIR", DB_CREATE | DB_INIT_LOCK, 0666) == 0);
180	assert(dbenv->get_timeout(dbenv, &timeout, DB_SET_TXN_TIMEOUT) == 0);
181	assert(timeout == 37);
182	ENV
183	assert(dbenv->set_timeout(dbenv, 63, DB_SET_TXN_TIMEOUT) == 0);
184	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
185	assert(dbenv->get_timeout(dbenv, &timeout, DB_SET_TXN_TIMEOUT) == 0);
186	assert(timeout == 63);
187
188	/* cache size: NOT reset at run-time. */
189	system("rm -rf TESTDIR; mkdir TESTDIR");
190	ENV
191	assert(dbenv->set_cachesize(dbenv, 1, 37, 3) == 0);
192	assert(dbenv->open(dbenv,
193	    "TESTDIR", DB_CREATE | DB_INIT_MPOOL, 0666) == 0);
194	assert(dbenv->get_cachesize(dbenv, &a, &b, &c) == 0);
195	assert(a == 1 && b == 37 && c == 3);
196	ENV
197	assert(dbenv->set_cachesize(dbenv, 2, 63, 1) == 0);
198	assert(dbenv->open(dbenv, "TESTDIR", DB_JOINENV, 0666) == 0);
199	assert(dbenv->get_cachesize(dbenv, &a, &b, &c) == 0);
200	assert(a == 1 && b == 37 && c == 3);
201
202	return (0);
203}
204