diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
commit | 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch) | |
tree | 18147b92b969d25ffbe61935fb63035cac820dd0 /db-4.8.30/test/TESTS |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/TESTS')
-rw-r--r-- | db-4.8.30/test/TESTS | 3199 |
1 files changed, 3199 insertions, 0 deletions
diff --git a/db-4.8.30/test/TESTS b/db-4.8.30/test/TESTS new file mode 100644 index 0000000..1a7efa2 --- /dev/null +++ b/db-4.8.30/test/TESTS @@ -0,0 +1,3199 @@ +# Automatically built by dist/s_test; may require local editing. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +Allocate and lock a self-blocking mutex. Start another process. + Try to lock the mutex again -- it will block. + Unlock the mutex from the other process, and the blocked + lock should be obtained. Clean up. + Do another test with a "-process-only" mutex. The second + process should not be able to unlock the mutex. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +Allocate, lock, unlock, and free a bunch of mutexes. + Set basic configuration options and check mutex_stat and + the mutex getters for the correct values. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +backup + Test of hotbackup functionality. + + Do all the of the following tests with and without + the -c (checkpoint) option. Make sure that -c and + -d (data_dir) are not allowed together. + + (1) Test that plain and simple hotbackup works. + (2) Test with -data_dir (-d). + (3) Test updating an existing hot backup (-u). + (4) Test with absolute path. + (5) Test with DB_CONFIG (-D), setting log_dir (-l) + and data_dir (-d). + (6) DB_CONFIG and update. + (7) Repeat hot backup (non-update) with DB_CONFIG and + existing directories. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +bigfile001 + Create a database greater than 4 GB in size. Close, verify. + Grow the database somewhat. Close, reverify. Lather, rinse, + repeat. Since it will not work on all systems, this test is + not run by default. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +bigfile002 + This one should be faster and not require so much disk space, + although it doesn't test as extensively. Create an mpool file + with 1K pages. Dirty page 6000000. Sync. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +dbm + Historic DBM interface test. Use the first 1000 entries from the + dictionary. Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Then reopen the file, re-retrieve everything. Finally, delete + everything. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +db_reptest + Wrapper to configure and run the db_reptest program. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +dead001 + Use two different configurations to test deadlock detection among a + variable number of processes. One configuration has the processes + deadlocked in a ring. The other has the processes all deadlocked on + a single resource. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +dead002 + Same test as dead001, but use "detect on every collision" instead + of separate deadlock detector. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +dead003 + + Same test as dead002, but explicitly specify DB_LOCK_OLDEST and + DB_LOCK_YOUNGEST. Verify the correct lock was aborted/granted. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +dead006 + use timeouts rather than the normal dd algorithm. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +dead007 + Tests for locker and txn id wraparound. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env001 + Test of env remove interface (formerly env_remove). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env002 + Test of DB_LOG_DIR and env name resolution. + With an environment path specified using -home, and then again + with it specified by the environment variable DB_HOME: + 1) Make sure that the set_lg_dir option is respected + a) as a relative pathname. + b) as an absolute pathname. + 2) Make sure that the DB_LOG_DIR db_config argument is respected, + again as relative and absolute pathnames. + 3) Make sure that if -both- db_config and a file are present, + only the file is respected (see doc/env/naming.html). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env003 + Test DB_TMP_DIR and env name resolution + With an environment path specified using -home, and then again + with it specified by the environment variable DB_HOME: + 1) Make sure that the DB_TMP_DIR config file option is respected + a) as a relative pathname. + b) as an absolute pathname. + 2) Make sure that the -tmp_dir config option is respected, + again as relative and absolute pathnames. + 3) Make sure that if -both- -tmp_dir and a file are present, + only the file is respected (see doc/env/naming.html). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env004 + Test multiple data directories. Do a bunch of different opens + to make sure that the files are detected in different directories. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env005 + Test that using subsystems without initializing them correctly + returns an error. Cannot test mpool, because it is assumed in + the Tcl code. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env006 + Make sure that all the utilities exist and run. + Test that db_load -r options don't blow up. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env007 + Test DB_CONFIG config file options for berkdb env. + 1) Make sure command line option is respected + 2) Make sure that config file option is respected + 3) Make sure that if -both- DB_CONFIG and the set_<whatever> + method is used, only the file is respected. + Then test all known config options. + Also test config options on berkdb open. This isn't + really env testing, but there's no better place to put it. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env008 + Test environments and subdirectories. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env009 + Test calls to all the various stat functions. We have several + sprinkled throughout the test suite, but this will ensure that + we run all of them at least once. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env010 + Run recovery in an empty directory, and then make sure we can still + create a database in that directory. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env011 + Run with region overwrite flag. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env012 + Test DB_REGISTER. + + DB_REGISTER will fail on systems without fcntl. If it + fails, make sure we got the expected DB_OPNOTSUP return. + + Then, the real tests: + For each test, we start a process that opens an env with -register. + + 1. Verify that a 2nd process can enter the existing env with -register. + + 2. Kill the 1st process, and verify that the 2nd process can enter + with "-register -recover". + + 3. Kill the 1st process, and verify that the 2nd process cannot + enter with just "-register". + + 4. While the 1st process is still running, a 2nd process enters + with "-register". Kill the 1st process. Verify that a 3rd process + can enter with "-register -recover". Verify that the 3rd process, + entering, causes process 2 to fail with the message DB_RUNRECOVERY. + + 5. We had a bug where recovery was always run with -register + if there were empty slots in the process registry file. Verify + that recovery doesn't automatically run if there is an empty slot. + + 6. Verify process cannot connect when specifying -failchk and an + isalive function has not been declared. + + 7. Verify that a 2nd process can enter the existing env with -register + and -failchk and having specified an isalive function + + 8. Kill the 1st process, and verify that the 2nd process can enter + with "-register -failchk -recover" + + 9. 2nd process enters with "-register -failchk". Kill the 1st process. + 2nd process may get blocked on a mutex held by process one. Verify + 3rd process can enter with "-register -recover -failchk". 3rd process + should run failchk, clear out open txn/log from process 1. It will + enter env without need for any additional recovery. We look for + "Freeing log information .." sentence in the log for 3rd process as + an indication that failchk ran. If DB_RUNRECOVERY were returned + instead it would mean failchk could not recover. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env013 + Test of basic functionality of fileid_reset. + + Create a database in an env. Copy it to a new file within + the same env. Reset the file id and make sure it has changed. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env014 + + Make sure that attempts to open an environment with + incompatible flags (e.g. replication without transactions) + fail with the appropriate messages. + + A new thread of control joining an env automatically + initializes the same subsystems as the original env. + Make sure that the attempt to change subsystems when + joining an env fails with the appropriate messages. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env015 + Rename the underlying directory of an env, make sure everything + still works. Test runs with regular named databases and with + in-memory named databases. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env016 + Replication settings and DB_CONFIG + + Create a DB_CONFIG for various replication settings. Use + rep_stat or getter functions to verify they're set correctly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env017 + Check documented "stat" fields against the fields + returned by the "stat" functions. Make sure they + match, and that none are missing. + These are the stat functions we test: + env log_stat + env lock_stat + env txn_stat + env mutex_stat + env rep_stat + env repmgr_stat + env mpool_stat + db_stat + seq_stat + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +env018 + Test getters when joining an env. When a second handle is + opened on an existing env, get_open_flags needs to return + the correct flags to the second handle so it knows what sort + of environment it's just joined. + + For several different flags to env_open, open an env. Open + a second handle on the same env, get_open_flags and verify + the flag is returned. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop001.tcl + Test file system operations, combined in a transaction. [#7363] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop002.tcl + Test file system operations in the presence of bad permissions. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop003 + + Test behavior of create and truncate for compatibility + with sendmail. + 1. DB_TRUNCATE is not allowed with locking or transactions. + 2. Can -create into zero-length existing file. + 3. Can -create into non-zero-length existing file if and + only if DB_TRUNCATE is specified. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop004 + Test of DB->rename(). (formerly test075) + Test that files can be renamed from one directory to another. + Test that files can be renamed using absolute or relative + pathnames. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop005 + Test of DB->remove() + Formerly test080. + Test use of dbremove with and without envs, with absolute + and relative paths, and with subdirectories. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop006 + Test file system operations in multiple simultaneous + transactions. Start one transaction, do a file operation. + Start a second transaction, do a file operation. Abort + or commit txn1, then abort or commit txn2, and check for + appropriate outcome. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop007 + Test file system operations on named in-memory databases. + Combine two ops in one transaction. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +fop008 + Test file system operations on named in-memory databases. + Combine two ops in one transaction. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +jointest + Test duplicate assisted joins. Executes 1, 2, 3 and 4-way joins + with differing index orders and selectivity. + + We'll test 2-way, 3-way, and 4-way joins and figure that if those + work, everything else does as well. We'll create test databases + called join1.db, join2.db, join3.db, and join4.db. The number on + the database describes the duplication -- duplicates are of the + form 0, N, 2N, 3N, ... where N is the number of the database. + Primary.db is the primary database, and null.db is the database + that has no matching duplicates. + + We should test this on all btrees, all hash, and a combination thereof + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +lock001 + Make sure that the basic lock tests work. Do some simple gets + and puts for a single locker. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +lock002 + Exercise basic multi-process aspects of lock. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +lock003 + Exercise multi-process aspects of lock. Generate a bunch of parallel + testers that try to randomly obtain locks; make sure that the locks + correctly protect corresponding objects. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +lock004 + Test locker ids wraping around. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +lock005 + Check that page locks are being released properly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +lock006 + Test lock_vec interface. We do all the same things that + lock001 does, using lock_vec instead of lock_get and lock_put, + plus a few more things like lock-coupling. + 1. Get and release one at a time. + 2. Release with put_obj (all locks for a given locker/obj). + 3. Release with put_all (all locks for a given locker). + Regularly check lock_stat to verify all locks have been + released. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log001 + Read/write log records. + Test with and without fixed-length, in-memory logging, + and encryption. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log002 + Tests multiple logs + Log truncation + LSN comparison and file functionality. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log003 + Verify that log_flush is flushing records correctly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log004 + Make sure that if we do PREVs on a log, but the beginning of the + log has been truncated, we do the right thing. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log005 + Check that log file sizes can change on the fly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log006 + Test log file auto-remove. + Test normal operation. + Test a long-lived txn. + Test log_archive flags. + Test db_archive flags. + Test turning on later. + Test setting via DB_CONFIG. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log007 + Test of in-memory logging bugs. [#11505] + + Test db_printlog with in-memory logs. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log008 + Test what happens if a txn_ckp record falls into a + different log file than the DBREG_CKP records generated + by the same checkpoint. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +log009 + Test of logging and getting log file version information. + Each time we cross a log file boundary verify we can + get the version via the log cursorlag. + Do this both forward and backward. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +memp001 + Randomly updates pages. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +memp002 + Tests multiple processes accessing and modifying the same files. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +memp003 + Test reader-only/writer process combinations; we use the access methods + for testing. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +memp004 + Test that small read-only databases are mapped into memory. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +mut001 + Exercise the mutex API. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +mut002 + Two-process mutex test. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +mut003 + Try doing mutex operations out of order. Make sure + we get appropriate errors. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +plat001 + + Test of portability of sequences. + + Create and dump a database containing sequences. Save the dump. + This test is used in conjunction with the upgrade tests, which + will compare the saved dump to a locally created dump. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd001 + Per-operation recovery tests for non-duplicate, non-split + messages. Makes sure that we exercise redo, undo, and do-nothing + condition. Any test that appears with the message (change state) + indicates that we've already run the particular test, but we are + running it again so that we can change the state of the data base + to prepare for the next test (this applies to all other recovery + tests as well). + + These are the most basic recovery tests. We do individual recovery + tests for each operation in the access method interface. First we + create a file and capture the state of the database (i.e., we copy + it. Then we run a transaction containing a single operation. In + one test, we abort the transaction and compare the outcome to the + original copy of the file. In the second test, we restore the + original copy of the database and then run recovery and compare + this against the actual database. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd002 + Split recovery tests. For every known split log message, makes sure + that we exercise redo, undo, and do-nothing condition. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd003 + Duplicate recovery tests. For every known duplicate log message, + makes sure that we exercise redo, undo, and do-nothing condition. + + Test all the duplicate log messages and recovery operations. We make + sure that we exercise all possible recovery actions: redo, undo, undo + but no fix necessary and redo but no fix necessary. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd004 + Big key test where big key gets elevated to internal page. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd005 + Verify reuse of file ids works on catastrophic recovery. + + Make sure that we can do catastrophic recovery even if we open + files using the same log file id. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd006 + Nested transactions. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd007 + File create/delete tests. + + This is a recovery test for create/delete of databases. We have + hooks in the database so that we can abort the process at various + points and make sure that the transaction doesn't commit. We + then need to recover and make sure the file is correctly existing + or not, as the case may be. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd008 + Test deeply nested transactions and many-child transactions. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd009 + Verify record numbering across split/reverse splits and recovery. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd010 + Test stability of btree duplicates across btree off-page dup splits + and reverse splits and across recovery. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd011 + Verify that recovery to a specific timestamp works. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd012 + Test of log file ID management. [#2288] + Test recovery handling of file opens and closes. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd013 + Test of cursor adjustment on child transaction aborts. [#2373] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd014 + This is a recovery test for create/delete of queue extents. We + then need to recover and make sure the file is correctly existing + or not, as the case may be. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd015 + This is a recovery test for testing lots of prepared txns. + This test is to force the use of txn_recover to call with the + DB_FIRST flag and then DB_NEXT. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd016 + Test recovery after checksum error. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd017 + Test recovery and security. This is basically a watered + down version of recd001 just to verify that encrypted environments + can be recovered. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd018 + Test recover of closely interspersed checkpoints and commits. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd019 + Test txn id wrap-around and recovery. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd020 + Test creation of intermediate directories -- an + undocumented, UNIX-only feature. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd021 + Test of failed opens in recovery. + + If a file was deleted through the file system (and not + within Berkeley DB), an error message should appear. + Test for regular files and subdbs. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd022 + Test that pages allocated by an aborted subtransaction + within an aborted prepared parent transaction are returned + to the free list after recovery. This exercises + __db_pg_prepare in systems without FTRUNCATE. [#7403] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd023 + Test recover of reverse split. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +recd024 + Test recovery of streaming partial insert operations. These are + operations that do multiple partial puts that append to an existing + data item (as long as the data item is on an overflow page). + The interesting cases are: + * Simple streaming operations + * Operations that cause the overflow item to flow onto another page. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep001 + Replication rename and forced-upgrade test. + + Run rep_test in a replicated master environment. + Verify that the database on the client is correct. + Next, remove the database, close the master, upgrade the + client, reopen the master, and make sure the new master can + correctly run rep_test and propagate it in the other direction. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep002 + Basic replication election test. + + Run a modified version of test001 in a replicated master + environment; hold an election among a group of clients to + make sure they select a proper master from amongst themselves, + in various scenarios. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep003 + Repeated shutdown/restart replication test + + Run a quick put test in a replicated master environment; + start up, shut down, and restart client processes, with + and without recovery. To ensure that environment state + is transient, use DB_PRIVATE. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep005 + Replication election test with error handling. + + Run rep_test in a replicated master environment; + hold an election among a group of clients to make sure they select + a proper master from amongst themselves, forcing errors at various + locations in the election path. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep006 + Replication and non-rep env handles. + + Run a modified version of test001 in a replicated master + environment; verify that the database on the client is correct. + Next, create a non-rep env handle to the master env. + Attempt to open the database r/w to force error. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep007 + Replication and bad LSNs + + Run rep_test in a replicated master env. + Close the client. Make additional changes to master. + Close the master. Open the client as the new master. + Make several different changes. Open the old master as + the client. Verify periodically that contents are correct. + This test is not appropriate for named in-memory db testing + because the databases are lost when both envs are closed. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep008 + Replication, back up and synchronizing + + Run a modified version of test001 in a replicated master + environment. + Close master and client. + Copy the master log to the client. + Clean the master. + Reopen the master and client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep009 + Replication and DUPMASTERs + Run test001 in a replicated environment. + + Declare one of the clients to also be a master. + Close a client, clean it and then declare it a 2nd master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep010 + Replication and ISPERM + + With consecutive message processing, make sure every + DB_REP_PERMANENT is responded to with an ISPERM when + processed. With gaps in the processing, make sure + every DB_REP_PERMANENT is responded to with an ISPERM + or a NOTPERM. Verify in both cases that the LSN returned + with ISPERM is found in the log. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep011 + Replication: test open handle across an upgrade. + + Open and close test database in master environment. + Update the client. Check client, and leave the handle + to the client open as we close the masterenv and upgrade + the client to master. Reopen the old master as client + and catch up. Test that we can still do a put to the + handle we created on the master while it was still a + client, and then make sure that the change can be + propagated back to the new client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep012 + Replication and dead DB handles. + + Run a modified version of test001 in a replicated master env. + Run in replicated environment with secondary indices too. + Make additional changes to master, but not to the client. + Downgrade the master and upgrade the client with open db handles. + Verify that the roll back on clients gives dead db handles. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep013 + Replication and swapping master/clients with open dbs. + + Run a modified version of test001 in a replicated master env. + Make additional changes to master, but not to the client. + Swap master and client. + Verify that the roll back on clients gives dead db handles. + Rerun the test, turning on client-to-client synchronization. + Swap and verify several times. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep014 + Replication and multiple replication handles. + Test multiple client handles, opening and closing to + make sure we get the right openfiles. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep015 + Locking across multiple pages with replication. + + Open master and client with small pagesize and + generate more than one page and generate off-page + dups on the first page (second key) and last page + (next-to-last key). + Within a single transaction, for each database, open + 2 cursors and delete the first and last entries (this + exercises locks on regular pages). Intermittently + update client during the process. + Within a single transaction, for each database, open + 2 cursors. Walk to the off-page dups and delete one + from each end (this exercises locks on off-page dups). + Intermittently update client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep016 + Replication election test with varying required nvotes. + + Run a modified version of test001 in a replicated master environment; + hold an election among a group of clients to make sure they select + the master with varying required participants. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep017 + Concurrency with checkpoints. + + Verify that we achieve concurrency in the presence of checkpoints. + Here are the checks that we wish to make: + While dbenv1 is handling the checkpoint record: + Subsequent in-order log records are accepted. + Accepted PERM log records get NOTPERM + A subsequent checkpoint gets NOTPERM + After checkpoint completes, next txn returns PERM + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep018 + Replication with dbremove. + + Verify that the attempt to remove a database file + on the master hangs while another process holds a + handle on the client. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep019 + Replication and multiple clients at same LSN. + Have several clients at the same LSN. Run recovery at + different times. Declare a client master and after sync-up + verify all client logs are identical. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep020 + Replication elections - test election generation numbers. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep021 + Replication and multiple environments. + Run similar tests in separate environments, making sure + that some data overlaps. Then, "move" one client env + from one replication group to another and make sure that + we do not get divergent logs. We either match the first + record and end up with identical logs or we get an error. + Verify all client logs are identical if successful. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep022 + Replication elections - test election generation numbers + during simulated network partition. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep023 + Replication using two master handles. + + Open two handles on one master env. Create two + databases, one through each master handle. Process + all messages through the first master handle. Make + sure changes made through both handles are picked + up properly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep024 + Replication page allocation / verify test + + Start a master (site 1) and a client (site 2). Master + closes (simulating a crash). Site 2 becomes the master + and site 1 comes back up as a client. Verify database. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep025 + Test of DB_REP_JOIN_FAILURE. + + One master, one client. + Generate several log files. + Remove old master log files. + Delete client files and restart client. + Put one more record to the master. At the next + processing of messages, the client should get JOIN_FAILURE. + Recover with a hot failover. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep026 + Replication elections - simulate a crash after sending + a vote. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep027 + Replication and secondary indexes. + + Set up a secondary index on the master and make sure + it can be accessed from the client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep028 + Replication and non-rep env handles. (Also see rep006.) + + Open second non-rep env on client, and create a db + through this handle. Open the db on master and put + some data. Check whether the non-rep handle keeps + working. Also check if opening the client database + in the non-rep env writes log records. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep029 + Test of internal initialization. + + One master, one client. + Generate several log files. + Remove old master log files. + Delete client files and restart client. + Put one more record to the master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep030 + Test of internal initialization multiple files and pagesizes. + Hold some databases open on master. + + One master, one client using a data_dir for internal init. + Generate several log files. + Remove old master log files. + Delete client files and restart client. + Put one more record to the master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep031 + Test of internal initialization and blocked operations. + + One master, one client. + Put one more record to the master. + Test that internal initialization blocks: + log_archive, rename, remove, fileid_reset, lsn_reset. + Sleep 30+ seconds. + Test that blocked operations are now unblocked. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep032 + Test of log gap processing. + + One master, one client. + Run rep_test. + Run rep_test without sending messages to client. + Make sure client missing the messages catches up properly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep033 + Test of internal initialization with rename and remove of dbs. + + One master, one client. + Generate several databases. Replicate to client. + Do some renames and removes, both before and after + closing the client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep034 + Test of STARTUPDONE notification. + + STARTUPDONE can now be recognized without the need for new "live" log + records from the master (under favorable conditions). The response to + the ALL_REQ at the end of synchronization includes an end-of-log marker + that now triggers it. However, the message containing that end marker + could get lost, so live log records still serve as a back-up mechanism. + The end marker may also be set under c2c sync, but only if the serving + client has itself achieved STARTUPDONE. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep035 + Test sync-up recovery in replication. + + We need to fork off 3 child tclsh processes to operate + on Site 3's (client always) home directory: + Process 1 continually calls lock_detect. + Process 2 continually calls txn_checkpoint. + Process 3 continually calls memp_trickle. + Process 4 continually calls log_archive. + Sites 1 and 2 will continually swap being master + (forcing site 3 to continually run sync-up recovery) + New master performs 1 operation, replicates and downgrades. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep036 + Multiple master processes writing to the database. + One process handles all message processing. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep037 + Test of internal initialization and page throttling. + + One master, one client, force page throttling. + Generate several log files. + Remove old master log files. + Delete client files and restart client. + Put one more record to the master. + Verify page throttling occurred. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep038 + Test of internal initialization and ongoing master updates. + + One master, one client. + Generate several log files. + Remove old master log files. + Delete client files and restart client. + Put more records on master while initialization is in progress. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep039 + Test of interrupted internal initialization. The + interruption is due to a changed master, or the client crashing, + or both. + + One master, two clients. + Generate several log files. Remove old master log files. + Restart client, optionally having "cleaned" client env dir. Either + way, this has the effect of forcing an internal init. + Interrupt the internal init. + Vary the number of times we process messages to make sure + the interruption occurs at varying stages of the first internal + initialization. + + Run for btree and queue only because of the number of permutations. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep040 + Test of racing rep_start and transactions. + + One master, one client. + Have master in the middle of a transaction. + Call rep_start to make master a client. + Commit the transaction. + Call rep_start to make master the master again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep041 + Turn replication on and off at run-time. + + Start a master with replication OFF (noop transport function). + Run rep_test to advance log files and archive. + Start up client; change master to working transport function. + Now replication is ON. + Do more ops, make sure client is up to date. + Close client, turn replication OFF on master, do more ops. + Repeat from point A. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep042 + Concurrency with updates. + + Verify racing role changes and updates don't result in + pages with LSN 0,1. Set up an environment that is master. + Spawn child process that does a delete, but using the + $env check so that it sleeps in the middle of the call. + Master downgrades and then sleeps as a client so that + child will run. Verify child does not succeed (should + get read-only error) due to role change in the middle of + its call. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep043 + + Constant writes during upgrade/downgrade. + + Three envs take turns being master. Each env + has a child process which does writes all the + time. They will succeed when that env is master + and fail when it is not. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep044 + + Test rollbacks with open file ids. + + We have one master with two handles and one client. + Each time through the main loop, we open a db, write + to the db, and close the db. Each one of these actions + is propagated to the client, or a roll back is forced + by swapping masters. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep045 + + Replication with versions. + + Mimic an application where a database is set up in the + background and then put into a replication group for use. + The "version database" identifies the current live + version, the database against which queries are made. + For example, the version database might say the current + version is 3, and queries would then be sent to db.3. + Version 4 is prepared for use while version 3 is in use. + When version 4 is complete, the version database is updated + to point to version 4 so queries can be directed there. + + This test has a master and two clients. One client swaps + roles with the master, and the other client runs constantly + in another process. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep046 + Replication and basic bulk transfer. + Set bulk transfer replication option. + Run long txns on master and then commit. Process on client + and verify contents. Run a very long txn so that logging + must send the log. Process and verify on client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep047 + Replication and log gap bulk transfers. + Set bulk transfer replication option. + Run test. Start a new client (to test ALL_REQ and bulk). + Run small test again. Clear messages for 1 client. + Run small test again to test LOG_REQ gap processing and bulk. + Process and verify on clients. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep048 + Replication and log gap bulk transfers. + Have two master env handles. Turn bulk on in + one (turns it on for both). Turn it off in the other. + While toggling, send log records from both handles. + Process message and verify master and client match. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep049 + Replication and delay syncing clients - basic test. + + Open and start up a master and two clients. Turn on delay sync + in the delayed client. Change master, add data and process messages. + Verify delayed client does not match. Make additional changes and + update the delayted client. Verify all match. + Add in a fresh delayed client to test delay of ALL_REQ. + Process startup messages and verify freshc client has no database. + Sync and verify fresh client matches. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep050 + Replication and delay syncing clients - change master test. + + Open and start up master and 4 clients. Turn on delay for 3 clients. + Switch masters, add data and verify delayed clients are out of date. + Make additional changes to master. And change masters again. + Sync/update delayed client and verify. The 4th client is a brand + new delayed client added in to test the non-verify path. + + Then test two different things: + 1. Swap master again while clients are still delayed. + 2. Swap master again while sync is proceeding for one client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep051 + Test of compaction with replication. + + Run rep_test in a replicated master environment. + Delete a large number of entries and compact with -freespace. + Propagate the changes to the client and make sure client and + master match. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep052 + Test of replication with NOWAIT. + + One master, one client. After initializing + everything normally, close client and let the + master get ahead -- far enough that the master + no longer has the client's last log file. + Reopen the client and turn on NOWAIT. + Process a few messages to get the client into + recovery mode, and verify that lockout occurs + on a txn API call (txn_begin) and an env API call. + Process all the messages and verify that lockout + is over. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep053 + Replication and basic client-to-client synchronization. + + Open and start up master and 1 client. + Start up a second client later and verify it sync'ed from + the original client, not the master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep054 + Test of internal initialization where a far-behind + client takes over as master. + + One master, two clients. + Run rep_test and process. + Close client 1. + Run rep_test, opening new databases, and processing + messages. Archive as we go so that log files get removed. + Close master and reopen client 1 as master. Process messages. + Verify that new master and client are in sync. + Run rep_test again, adding data to one of the new + named databases. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep055 + Test of internal initialization and log archiving. + + One master, one client. + Generate several log files. + Remove old master log files and generate several more. + Get list of archivable files from db_archive and restart client. + As client is in the middle of internal init, remove + the log files returned earlier by db_archive. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep058 + + Replication with early databases + + Mimic an application where they create a database before + calling rep_start, thus writing log records on a client + before it is a client. Verify we cannot join repl group. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep060 + Test of normally running clients and internal initialization. + Have a client running normally, but slow/far behind the master. + Then the master checkpoints and archives, causing the client + to suddenly be thrown into internal init. This test tests + that we clean up the old files/pages in mpool and dbreg. + Also test same thing but the app holding an open dbp as well. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep061 + Test of internal initialization multiple files and pagesizes + with page gaps. + + One master, one client. + Generate several log files. + Remove old master log files. + Delete client files and restart client. + Put one more record to the master. + Force some page messages to get dropped. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep062 + Test of internal initialization where client has a different + kind of database than the master. + + Create a master of one type, and let the client catch up. + Close the client. + Remove the database on the master, and create a new + database of the same name but a different type. + Run the master ahead far enough that internal initialization + will be required on the reopen of the client. + Reopen the client and verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep063 + Replication election test with simulated different versions + for each site. This tests that old sites with real priority + trump ELECTABLE sites with zero priority even with greater LSNs. + There is a special case in the code for testing that if the + priority is <= 10, we simulate mixed versions for elections. + + Run a rep_test in a replicated master environment and close; + hold an election among a group of clients to make sure they select + the master with varying LSNs and priorities. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep064 + Replication rename and forced-upgrade test. + + The test verifies that the client correctly + (internally) closes files when upgrading to master. + It does this by having the master have a database + open, then crashing. The client upgrades to master, + and attempts to remove the open database. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep065 + Tests replication running with different versions. + This capability is introduced with 4.5. + + Start a replication group of 1 master and N sites, all + running some historical version greater than or equal to 4.4. + Take down a client and bring it up again running current. + Run some upgrades, make sure everything works. + + Each site runs the tcllib of its own version, but uses + the current tcl code (e.g. test.tcl). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep066 + Replication and dead log handles. + + Run rep_test on master and a client. + Simulate client crashes (master continues) until log 2. + Open 2nd master env handle and put something in log and flush. + Downgrade master, restart client as master. + Run rep_test on newmaster until log 2. + New master writes log records, newclient processes records + and 2nd newclient env handle calls log_flush. + New master commits, newclient processes and should succeed. + Make sure 2nd handle detects the old log handle and doesn't + write to a stale handle (if it does, the processing of the + commit will fail). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep067 + Replication election test with large timeouts. + + Test replication elections among clients with widely varying + timeouts. This test is used to simulate a customer that + wants to force full participation in an election, but only + if all sites are present (i.e. if all sites are restarted + together). If any site has already been part of the group, + then we want to be able to elect a master based on majority. + Using varied timeouts, we can force full participation if + all sites are present with "long_timeout" amount of time and + then revert to majority. + + A long_timeout would be several minutes whereas a normal + short timeout would be a few seconds. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep068 + Verify replication of dbreg operations does not hang clients. + In a simple replication group, create a database with very + little data. With DB_TXN_NOSYNC the database can be created + at the client even though the log is not flushed. If we crash + and restart, the application of the log starts over again, even + though the database is still there. The application can open + the database before replication tries to re-apply the create. + This causes a hang as replication waits to be able to get a + handle lock. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep069 + Test of internal initialization and elections. + + If a client is in a recovery mode of any kind, it + participates in elections at priority 0 so it can + never be elected master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep070 + Test of startup_done condition with idle master. + + Join a client to an existing master, and verify that + the client detects startup_done even if the master + does not execute any new transactions. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep071 + Test of multiple simultaneous client env handles and + upgrading/downgrading. Tests use of temp db handle + internally. + + Open a master and 2 handles to the same client env. + Run rep_test. + Close master and upgrade client to master using one env handle. + Run rep_test again, and then downgrade back to client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep072 + Verify that internal init does not leak resources from + the locking subsystem. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep073 + + Test of allowing clients to create and update their own scratch + databases within the environment. Doing so requires the use + use of the DB_TXN_NOT_DURABLE flag for those databases. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep074 + Verify replication withstands send errors processing requests. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep075 + Replication and prepared transactions. + Test having outstanding prepared transactions and simulating + crashing or upgrading or downgrading sites. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep076 + Replication elections - what happens if elected client + does not become master? + + Set up a master and 3 clients. Take down master, run election. + The elected client will ignore the fact that it's been elected, + so we still have 2 clients. + + Run another election, a regular election that allows the winner + to become master, and make sure it goes okay. We do this both + for the client that ignored its election and for the other client. + + This simulates what would happen if, say, we had a temporary + network partition and lost the winner. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep077 + + Replication, recovery and applying log records immediately. + Master and 1 client. Start up both sites. + Close client and run rep_test on the master so that the + log record is the same LSN the client would be expecting. + Reopen client with recovery and verify the client does not + try to apply that "expected" record before it synchronizes + with the master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep078 + + Replication and basic lease test. + Set leases on master and 2 clients. + Do a lease operation and process to all clients. + Read with lease on master. Do another lease operation + and don't process on any client. Try to read with + on the master and verify it fails. Process the messages + to the clients and retry the read. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep079 + Replication leases and invalid usage. + + Open a client without leases. Attempt to set leases after rep_start. + Attempt to declare as master without election. + Run an election with an nsites parameter value. + Elect a master with leases. Put some data and send to clients. + Cleanly shutdown master env. Restart without + recovery and verify leases are expired and refreshed. + Add a new client without leases to a group using leases. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep080 + NOAUTOINIT with empty client logs. + + Verify that a fresh client trying to join the group for + the first time observes the setting of DELAY_SYNC and NOAUTOINIT + properly. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep081 + Test of internal initialization and missing database files. + + One master, one client, two databases. + Generate several log files. + Remove old master log files. + Start up client. + Remove or replace one master database file while client initialization + is in progress, make sure other master database can keep processing. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep082 + Sending replication requests to correct master site. + + Regression test for a bug [#16592] where a client could send an + UPDATE_REQ to another client instead of the master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep083 + Replication clients must never send VERIFY_FAIL to a c2c request. + + Regression test for a bug [#16592] where a client could send a + VERIFY_FAIL to another client, which is illegal. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep084 + Abbreviated internal init for named in-memory databases (NIMDBs). + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep085 + Skipping unnecessary abbreviated internal init. + + Make sure that once we've materialized NIMDBs, we don't bother + trying to do it again on subsequent sync without recovery. Make + sure we do probe for the need to materialize NIMDBs, but don't do + any internal init at all if there are no NIMDBs. Note that in order to + do this test we don't even need any NIMDBs. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep086 + Interrupted abbreviated internal init. + + Make sure we cleanly remove partially loaded named in-memory + databases (NIMDBs). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep087 + Abbreviated internal init with open file handles. + + Client has open handle to an on-disk DB when abbreviated + internal init starts. Make sure we lock out access, and make sure + it ends up as HANDLE_DEAD. Also, make sure that if there are + no NIMDBs, that we *don't* get HANDLE_DEAD. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rep088 + Replication roll-back preserves checkpoint. + + Create a situation where a client has to roll back its + log, discarding some existing transactions, in order to sync + with a new master. + + 1. When the client still has its entire log file history, all + the way back to log file #1, it's OK if the roll-back discards + any/all checkpoints. + 2. When old log files have been archived, if the roll-back would + remove all existing checkpoints it must be forbidden. The log + must always have a checkpoint (or all files back through #1). + The client must do internal init or return JOIN_FAILURE. + 3. (the normal case) Old log files archived, and a checkpoint + still exists in the portion of the log which will remain after + the roll-back: no internal-init/JOIN_FAILURE necessary. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr001 + Basic repmgr test. + + Create an appointed master and two clients, process some records and + verify resulting databases. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr002 + Basic repmgr election test. + + Open three clients of different priorities and make sure repmgr + elects expected master. Shut master down, make sure repmgr elects + expected remaining client master, make sure former master can join + as client. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr003 + Basic repmgr internal init test. + + Start an appointed master site and two clients, processing + transactions between each additional site. Verify all expected + transactions are replicated. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr004 + Basic repmgr test with in-memory logs. + + Create an appointed master and two clients, process some records and + verify resulting databases. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr005 + Basic repmgr test with in-memory databases. + + Create an appointed master and two clients, process some records and + verify resulting databases. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr006 + Basic repmgr test with bulk processing. + + Create an appointed master and two clients, process some records and + verify resulting databases. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr007 + Basic repmgr client shutdown/restart test. + + Start an appointed master site and two clients. Shutdown and + restart each client, processing transactions after each restart. + Verify all expected transactions are replicated. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr008 + Basic repmgr test with client-to-client configuration. + + Create a master and two clients, process some records and verify + resulting databases. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr009 + repmgr API error test. + + Try a variety of repmgr calls that result in errors. Also + try combinations of repmgr and base replication API calls + that result in errors. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr010 + Acknowledgement policy and timeout test. + + Verify that "quorum" acknowledgement policy succeeds with fewer than + nsites running. Verify that "all" acknowledgement policy results in + ack failures with fewer than nsites running. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr011 + repmgr two site strict majority test. + + Start an appointed master and one client with 2 site strict + majority set. Shut down the master site, wait and verify that + the client site was not elected master. Start up master site + and verify that transactions are processed as expected. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr012 + repmgr heartbeat test. + + Start an appointed master and one client site. Set heartbeat + send and monitor values and process some transactions. Stop + sending heartbeats from master and verify that client sees + a dropped connection. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr013 + Site list test. + + Configure a master and two clients where one client is a peer of + the other and verify resulting site lists. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr014 + Basic repmgr in-memory test. + + Create an appointed master and two clients, process some records and + verify resulting databases. Put databases, logs and replication files + in-memory. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr015 + Basic repmgr in-memory election test. + + Open three clients of different priorities and make sure repmgr + elects expected master. Shut master down, make sure repmgr elects + expected remaining client master, make sure former master can join + as client. Replication files are in-memory; databases, logs and + environment regions are on-disk. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr016 + Basic repmgr in-memory internal init test. + + Start an appointed master site and two clients, processing + transactions between each additional site. Verify all expected + transactions are replicated. Replication files are in-memory; + databases, logs and environment regions are on-disk. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr017 + repmgr in-memory cache overflow test. + + Start an appointed master site and one client, putting databases, + environment regions, logs and replication files in-memory. Set + very small cachesize and run enough transactions to overflow cache. + Shut down and restart master and client, giving master a larger cache. + Run and verify a small number of transactions. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr018 + Check repmgr stats. + + Start an appointed master and one client. Shut down the client, + run some transactions at the master and verify that there are + acknowledgement failures and one dropped connection. Shut down + and restart client again and verify that there are two dropped + connections. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr019 + Basic repmgr test with in-memory databases and in-memory logs. + + Create an appointed master and two clients, process some records and + verify resulting databases. + + Run for btree only because access method shouldn't matter. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr022 + Basic test of repmgr's multi-process master support. + + Set up a simple 2-site group, create data and replicate it. + Add a second process at the master and have it write some + updates. It does not explicitly start repmgr (nor do any + replication configuration, for that matter). Its first + update triggers initiation of connections, and so it doesn't + get to the client without a log request. But later updates + should go directly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr023 + Repmgr support for multi-process master. + + Start two processes at the master. + Add a client site (not previously known to the master + processes), and make sure + both master processes connect to it. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr024 + Ensuring exactly one listener process. + + Start a repmgr process with a listener. + Start a second process, and see that it does not become the listener. + Shut down the first process (gracefully). Now a second process should + become listener. + Kill the listener process abruptly. Running failchk should show that + recovery is necessary. Run recovery and start a clean listener. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr025 + Repmgr site address discovery via handshakes. + + Master with 2 processes, does not know client's address. + Client processes start in either order, connect to master. + Master learns of client's address via handshake message. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr026 + Repmgr site address discovery via NEWSITE + + New client, previously unknown to (main) master process, connects to an + existing client, which broadcasts NEWSITE message. + This causes master to discover its address, and connect to it. + Other new clients may also have been added to master's configuration in + the interim (via a subordinate master process). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr027 + Repmgr recognition of peer setting, across processes. + + Set up a master and two clients, synchronized with some data. + Add a new client, configured to use c2c sync with one of the original + clients. Check stats to make sure the correct c2c peer was used. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr028 + Simple smoke test for repmgr elections with multi-process envs. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr029 + Repmgr combined with replication-unaware process at master. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr030 + Subordinate connections and processes should not trigger elections. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr031 + Test repmgr's internal juggling of peer EID's. + + Set up master and 2 clients, A and B. + Add a third client (C), with two processes. + The first process will be configured to know about A. + The second process will know about B, and set that as peer, + but when it joins the env site B will have to be shuffled + into a later position in the list, because A is already first. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +repmgr032 + Multi-process repmgr start-up policies. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rpc001 + Test RPC server timeouts for cursor, txn and env handles. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rpc002 + Test invalid RPC functions and make sure we error them correctly + Test server home directory error cases + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rpc003 + Test RPC and secondary indices. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rpc004 + Test RPC server and security + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rpc005 + Test RPC server handle ID sharing + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rpc006 + Test RPC server and multiple operations to server. + Make sure the server doesn't deadlock itself, but + returns DEADLOCK to the client. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rsrc001 + Recno backing file test. Try different patterns of adding + records and making sure that the corresponding file matches. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rsrc002 + Recno backing file test #2: test of set_re_delim. Specify a backing + file with colon-delimited records, and make sure they are correctly + interpreted. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rsrc003 + Recno backing file test. Try different patterns of adding + records and making sure that the corresponding file matches. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +rsrc004 + Recno backing file test for EOF-terminated records. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +scr### + The scr### directories are shell scripts that test a variety of + things, including things about the distribution itself. These + tests won't run on most systems, so don't even try to run them. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb001 Tests mixing db and subdb operations + Tests mixing db and subdb operations + Create a db, add data, try to create a subdb. + Test naming db and subdb with a leading - for correct parsing + Existence check -- test use of -excl with subdbs + + Test non-subdb and subdb operations + Test naming (filenames begin with -) + Test existence (cannot create subdb of same name with -excl) + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb002 + Tests basic subdb functionality + Small keys, small data + Put/get per key + Dump file + Close, reopen + Dump file + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Close file, reopen, do retrieve and re-verify. + Then repeat using an environment. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb003 + Tests many subdbs + Creates many subdbs and puts a small amount of + data in each (many defaults to 1000) + + Use the first 1000 entries from the dictionary as subdbnames. + Insert each with entry as name of subdatabase and a partial list + as key/data. After all are entered, retrieve all; compare output + to original. Close file, reopen, do retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb004 + Tests large subdb names + subdb name = filecontents, + key = filename, data = filecontents + Put/get per key + Dump file + Dump subdbs, verify data and subdb name match + + Create 1 db with many large subdbs. Use the contents as subdb names. + Take the source files and dbtest executable and enter their names as + the key with their contents as data. After all are entered, retrieve + all; compare output to original. Close file, reopen, do retrieve and + re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb005 + Tests cursor operations in subdbs + Put/get per key + Verify cursor operations work within subdb + Verify cursor operations do not work across subdbs + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb006 + Tests intra-subdb join + + We'll test 2-way, 3-way, and 4-way joins and figure that if those work, + everything else does as well. We'll create test databases called + sub1.db, sub2.db, sub3.db, and sub4.db. The number on the database + describes the duplication -- duplicates are of the form 0, N, 2N, 3N, + ... where N is the number of the database. Primary.db is the primary + database, and sub0.db is the database that has no matching duplicates. + All of these are within a single database. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb007 + Tests page size difference errors between subdbs. + If the physical file already exists, we ignore pagesize specifications + on any subsequent -creates. + + 1. Create/open a subdb with system default page size. + Create/open a second subdb specifying a different page size. + The create should succeed, but the pagesize of the new db + will be the system default page size. + 2. Create/open a subdb with a specified, non-default page size. + Create/open a second subdb specifying a different page size. + The create should succeed, but the pagesize of the new db + will be the specified page size from the first create. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb008 + Tests explicit setting of lorders for subdatabases -- the + lorder should be ignored. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb009 + Test DB->rename() method for subdbs + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb010 + Test DB->remove() method and DB->truncate() for subdbs + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb011 + Test deleting Subdbs with overflow pages + Create 1 db with many large subdbs. + Test subdatabases with overflow pages. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb012 + Test subdbs with locking and transactions + Tests creating and removing subdbs while handles + are open works correctly, and in the face of txns. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb013 + Tests in-memory subdatabases. + Create an in-memory subdb. Test for persistence after + overflowing the cache. Test for conflicts when we have + two in-memory files. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb014 + Tests mixing in-memory named and in-memory unnamed dbs. + Create a regular in-memory db, add data. + Create a named in-memory db. + Try to create the same named in-memory db again (should fail). + Try to create a different named in-memory db (should succeed). + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb015 + Tests basic in-memory named database functionality + Small keys, small data + Put/get per key + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Close file, reopen, do retrieve and re-verify. + Then repeat using an environment. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb016 + Creates many in-memory named dbs and puts a small amount of + data in each (many defaults to 100) + + Use the first 100 entries from the dictionary as names. + Insert each with entry as name of subdatabase and a partial list + as key/data. After all are entered, retrieve all; compare output + to original. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb017 + Test DB->rename() for in-memory named databases. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb018 + Tests join of in-memory named databases. + + We'll test 2-way, 3-way, and 4-way joins and figure that if those work, + everything else does as well. We'll create test databases called + sub1.db, sub2.db, sub3.db, and sub4.db. The number on the database + describes the duplication -- duplicates are of the form 0, N, 2N, 3N, + ... where N is the number of the database. Primary.db is the primary + database, and sub0.db is the database that has no matching duplicates. + All of these are within a single database. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb019 + Tests in-memory subdatabases. + Create an in-memory subdb. Test for persistence after + overflowing the cache. Test for conflicts when we have + two in-memory files. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdb020 + Tests in-memory subdatabases. + Create an in-memory subdb with one page size. Close, and + open with a different page size: should fail. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdbtest001 + Tests multiple access methods in one subdb + Open several subdbs, each with a different access method + Small keys, small data + Put/get per key per subdb + Dump file, verify per subdb + Close, reopen per subdb + Dump file, verify per subdb + + Make several subdb's of different access methods all in one DB. + Rotate methods and repeat [#762]. + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Close file, reopen, do retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sdbtest002 + Tests multiple access methods in one subdb access by multiple + processes. + Open several subdbs, each with a different access method + Small keys, small data + Put/get per key per subdb + Fork off several child procs to each delete selected + data from their subdb and then exit + Dump file, verify contents of each subdb is correct + Close, reopen per subdb + Dump file, verify per subdb + + Make several subdb's of different access methods all in one DB. + Fork of some child procs to each manipulate one subdb and when + they are finished, verify the contents of the databases. + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Close file, reopen, do retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sec001 + Test of security interface + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sec002 + Test of security interface and catching errors in the + face of attackers overwriting parts of existing files. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si001 + Secondary index put/delete with lorder test + + Put data in primary db and check that pget on secondary + index finds the right entries. Alter the primary in the + following ways, checking for correct data each time: + Overwrite data in primary database. + Delete half of entries through primary. + Delete half of remaining entries through secondary. + Append data (for record-based primaries only). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si002 + Basic cursor-based secondary index put/delete test + + Cursor put data in primary db and check that pget + on secondary index finds the right entries. + Open and use a second cursor to exercise the cursor + comparison API on secondaries. + Overwrite while walking primary, check pget again. + Overwrite while walking secondary (use c_pget), check + pget again. + Cursor delete half of entries through primary, check. + Cursor delete half of remainder through secondary, check. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si003 + si001 with secondaries created and closed mid-test + Basic secondary index put/delete test with secondaries + created mid-test. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si004 + si002 with secondaries created and closed mid-test + Basic cursor-based secondary index put/delete test, with + secondaries created mid-test. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si005 + Basic secondary index put/delete test with transactions + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si006 + + Test -immutable_key interface. + + DB_IMMUTABLE_KEY is an optimization to be used when a + secondary key will not be changed. It does not prevent + a deliberate change to the secondary key, it just does not + propagate that change when it is made to the primary. + This test verifies that a change to the primary is propagated + to the secondary or not as specified by -immutable_key. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si007 + Secondary index put/delete with lorder test + + This test is the same as si001 with the exception + that we create and populate the primary and THEN + create the secondaries and associate them with -create. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +si008 + Secondary index put/delete with lorder test + + This test is the same as si001 except that we + create the secondaries with different byte orders: + one native, one swapped. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +sijointest: Secondary index and join test. + This used to be si005.tcl. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test001 + Small keys/data + Put/get per key + Dump file + Close, reopen + Dump file + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Close file, reopen, do retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test002 + Small keys/medium data + Put/get per key + Dump file + Close, reopen + Dump file + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and a fixed, medium length data string; + retrieve each. After all are entered, retrieve all; compare output + to original. Close file, reopen, do retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test003 + Small keys/large data + Put/get per key + Dump file + Close, reopen + Dump file + + Take the source files and dbtest executable and enter their names + as the key with their contents as data. After all are entered, + retrieve all; compare output to original. Close file, reopen, do + retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test004 + Small keys/medium data + Put/get per key + Sequential (cursor) get/delete + + Check that cursor operations work. Create a database. + Read through the database sequentially using cursors and + delete each element. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test005 + Small keys/medium data + Put/get per key + Close, reopen + Sequential (cursor) get/delete + + Check that cursor operations work. Create a database; close + it and reopen it. Then read through the database sequentially + using cursors and delete each element. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test006 + Small keys/medium data + Put/get per key + Keyed delete and verify + + Keyed delete test. + Create database. + Go through database, deleting all entries by key. + Then do the same for unsorted and sorted dups. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test007 + Small keys/medium data + Put/get per key + Close, reopen + Keyed delete + + Check that delete operations work. Create a database; close + database and reopen it. Then issues delete by key for each + entry. (Test006 plus reopen) + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test008 + Small keys/large data + Put/get per key + Loop through keys by steps (which change) + ... delete each key at step + ... add each key back + ... change step + Confirm that overflow pages are getting reused + + Take the source files and dbtest executable and enter their names as + the key with their contents as data. After all are entered, begin + looping through the entries; deleting some pairs and then readding them. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test009 + Small keys/large data + Same as test008; close and reopen database + + Check that we reuse overflow pages. Create database with lots of + big key/data pairs. Go through and delete and add keys back + randomly. Then close the DB and make sure that we have everything + we think we should. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test010 + Duplicate test + Small key/data pairs. + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; add duplicate records for each. + After all are entered, retrieve all; verify output. + Close file, reopen, do retrieve and re-verify. + This does not work for recno + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test011 + Duplicate test + Small key/data pairs. + Test DB_KEYFIRST, DB_KEYLAST, DB_BEFORE and DB_AFTER. + To test off-page duplicates, run with small pagesize. + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; add duplicate records for each. + Then do some key_first/key_last add_before, add_after operations. + This does not work for recno + + To test if dups work when they fall off the main page, run this with + a very tiny page size. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test012 + Large keys/small data + Same as test003 except use big keys (source files and + executables) and small data (the file/executable names). + + Take the source files and dbtest executable and enter their contents + as the key with their names as data. After all are entered, retrieve + all; compare output to original. Close file, reopen, do retrieve and + re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test013 + Partial put test + Overwrite entire records using partial puts. + Make sure that NOOVERWRITE flag works. + + 1. Insert 10000 keys and retrieve them (equal key/data pairs). + 2. Attempt to overwrite keys with NO_OVERWRITE set (expect error). + 3. Actually overwrite each one with its datum reversed. + + No partial testing here. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test014 + Exercise partial puts on short data + Run 5 combinations of numbers of characters to replace, + and number of times to increase the size by. + + Partial put test, small data, replacing with same size. The data set + consists of the first nentries of the dictionary. We will insert them + (and retrieve them) as we do in test 1 (equal key/data pairs). Then + we'll try to perform partial puts of some characters at the beginning, + some at the end, and some at the middle. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test015 + Partial put test + Partial put test where the key does not initially exist. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test016 + Partial put test + Partial put where the datum gets shorter as a result of the put. + + Partial put test where partial puts make the record smaller. + Use the first 10,000 entries from the dictionary. + Insert each with self as key and a fixed, medium length data string; + retrieve each. After all are entered, go back and do partial puts, + replacing a random-length string with the key value. + Then verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test017 + Basic offpage duplicate test. + + Run duplicates with small page size so that we test off page duplicates. + Then after we have an off-page database, test with overflow pages too. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test018 + Offpage duplicate test + Key_{first,last,before,after} offpage duplicates. + Run duplicates with small page size so that we test off page + duplicates. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test019 + Partial get test. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test020 + In-Memory database tests. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test021 + Btree range tests. + + Use the first 10,000 entries from the dictionary. + Insert each with self, reversed as key and self as data. + After all are entered, retrieve each using a cursor SET_RANGE, and + getting about 20 keys sequentially after it (in some cases we'll + run out towards the end of the file). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test022 + Test of DB->getbyteswapped(). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test023 + Duplicate test + Exercise deletes and cursor operations within a duplicate set. + Add a key with duplicates (first time on-page, second time off-page) + Number the dups. + Delete dups and make sure that CURRENT/NEXT/PREV work correctly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test024 + Record number retrieval test. + Test the Btree and Record number get-by-number functionality. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test025 + DB_APPEND flag test. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test026 + Small keys/medium data w/duplicates + Put/get per key. + Loop through keys -- delete each key + ... test that cursors delete duplicates correctly + + Keyed delete test through cursor. If ndups is small; this will + test on-page dups; if it's large, it will test off-page dups. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test027 + Off-page duplicate test + Test026 with parameters to force off-page duplicates. + + Check that delete operations work. Create a database; close + database and reopen it. Then issues delete by key for each + entry. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test028 + Cursor delete test + Test put operations after deleting through a cursor. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test029 + Test the Btree and Record number renumbering. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test030 + Test DB_NEXT_DUP Functionality. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test031 + Duplicate sorting functionality + Make sure DB_NODUPDATA works. + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and "ndups" duplicates + For the data field, prepend random five-char strings (see test032) + that we force the duplicate sorting code to do something. + Along the way, test that we cannot insert duplicate duplicates + using DB_NODUPDATA. + + By setting ndups large, we can make this an off-page test + After all are entered, retrieve all; verify output. + Close file, reopen, do retrieve and re-verify. + This does not work for recno + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test032 + DB_GET_BOTH, DB_GET_BOTH_RANGE + + Use the first 10,000 entries from the dictionary. Insert each with + self as key and "ndups" duplicates. For the data field, prepend the + letters of the alphabet in a random order so we force the duplicate + sorting code to do something. By setting ndups large, we can make + this an off-page test. By setting overflow to be 1, we can make + this an overflow test. + + Test the DB_GET_BOTH functionality by retrieving each dup in the file + explicitly. Test the DB_GET_BOTH_RANGE functionality by retrieving + the unique key prefix (cursor only). Finally test the failure case. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test033 + DB_GET_BOTH without comparison function + + Use the first 10,000 entries from the dictionary. Insert each with + self as key and data; add duplicate records for each. After all are + entered, retrieve all and verify output using DB_GET_BOTH (on DB and + DBC handles) and DB_GET_BOTH_RANGE (on a DBC handle) on existent and + nonexistent keys. + + XXX + This does not work for rbtree. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test034 + test032 with off-page or overflow case with non-duplicates + and duplicates. + + DB_GET_BOTH, DB_GET_BOTH_RANGE functionality with off-page + or overflow case within non-duplicates and duplicates. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test035 + Test033 with off-page duplicates + DB_GET_BOTH functionality with off-page duplicates. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test036 + Test KEYFIRST and KEYLAST when the key doesn't exist + Put nentries key/data pairs (from the dictionary) using a cursor + and KEYFIRST and KEYLAST (this tests the case where use use cursor + put for non-existent keys). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test037 + Test DB_RMW + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test038 + DB_GET_BOTH, DB_GET_BOTH_RANGE on deleted items + + Use the first 10,000 entries from the dictionary. Insert each with + self as key and "ndups" duplicates. For the data field, prepend the + letters of the alphabet in a random order so we force the duplicate + sorting code to do something. By setting ndups large, we can make + this an off-page test + + Test the DB_GET_BOTH and DB_GET_BOTH_RANGE functionality by retrieving + each dup in the file explicitly. Then remove each duplicate and try + the retrieval again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test039 + DB_GET_BOTH/DB_GET_BOTH_RANGE on deleted items without comparison + function. + + Use the first 10,000 entries from the dictionary. Insert each with + self as key and "ndups" duplicates. For the data field, prepend the + letters of the alphabet in a random order so we force the duplicate + sorting code to do something. By setting ndups large, we can make + this an off-page test. + + Test the DB_GET_BOTH and DB_GET_BOTH_RANGE functionality by retrieving + each dup in the file explicitly. Then remove each duplicate and try + the retrieval again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test040 + Test038 with off-page duplicates + DB_GET_BOTH functionality with off-page duplicates. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test041 + Test039 with off-page duplicates + DB_GET_BOTH functionality with off-page duplicates. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test042 + Concurrent Data Store test (CDB) + + Multiprocess DB test; verify that locking is working for the + concurrent access method product. + + Use the first "nentries" words from the dictionary. Insert each with + self as key and a fixed, medium length data string. Then fire off + multiple processes that bang on the database. Each one should try to + read and write random keys. When they rewrite, they'll append their + pid to the data string (sometimes doing a rewrite sometimes doing a + partial put). Some will use cursors to traverse through a few keys + before finding one to write. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test043 + Recno renumbering and implicit creation test + Test the Record number implicit creation and renumbering options. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test044 + Small system integration tests + Test proper functioning of the checkpoint daemon, + recovery, transactions, etc. + + System integration DB test: verify that locking, recovery, checkpoint, + and all the other utilities basically work. + + The test consists of $nprocs processes operating on $nfiles files. A + transaction consists of adding the same key/data pair to some random + number of these files. We generate a bimodal distribution in key size + with 70% of the keys being small (1-10 characters) and the remaining + 30% of the keys being large (uniform distribution about mean $key_avg). + If we generate a key, we first check to make sure that the key is not + already in the dataset. If it is, we do a lookup. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test045 + Small random tester + Runs a number of random add/delete/retrieve operations. + Tests both successful conditions and error conditions. + + Run the random db tester on the specified access method. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test046 + Overwrite test of small/big key/data with cursor checks. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test047 + DBcursor->c_get get test with SET_RANGE option. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test048 + Cursor stability across Btree splits. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test049 + Cursor operations on uninitialized cursors. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test050 + Overwrite test of small/big key/data with cursor checks for Recno. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test051 + Fixed-length record Recno test. + 0. Test various flags (legal and illegal) to open + 1. Test partial puts where dlen != size (should fail) + 2. Partial puts for existent record -- replaces at beg, mid, and + end of record, as well as full replace + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test052 + Renumbering record Recno test. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test053 + Test of the DB_REVSPLITOFF flag in the Btree and Btree-w-recnum + methods. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test054 + Cursor maintenance during key/data deletion. + + This test checks for cursor maintenance in the presence of deletes. + There are N different scenarios to tests: + 1. No duplicates. Cursor A deletes a key, do a GET for the key. + 2. No duplicates. Cursor is positioned right before key K, Delete K, + do a next on the cursor. + 3. No duplicates. Cursor is positioned on key K, do a regular delete + of K, do a current get on K. + 4. Repeat 3 but do a next instead of current. + 5. Duplicates. Cursor A is on the first item of a duplicate set, A + does a delete. Then we do a non-cursor get. + 6. Duplicates. Cursor A is in a duplicate set and deletes the item. + do a delete of the entire Key. Test cursor current. + 7. Continue last test and try cursor next. + 8. Duplicates. Cursor A is in a duplicate set and deletes the item. + Cursor B is in the same duplicate set and deletes a different item. + Verify that the cursor is in the right place. + 9. Cursors A and B are in the place in the same duplicate set. A + deletes its item. Do current on B. + 10. Continue 8 and do a next on B. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test055 + Basic cursor operations. + This test checks basic cursor operations. + There are N different scenarios to tests: + 1. (no dups) Set cursor, retrieve current. + 2. (no dups) Set cursor, retrieve next. + 3. (no dups) Set cursor, retrieve prev. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test056 + Cursor maintenance during deletes. + Check if deleting a key when a cursor is on a duplicate of that + key works. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test057 + Cursor maintenance during key deletes. + 1. Delete a key with a cursor. Add the key back with a regular + put. Make sure the cursor can't get the new item. + 2. Put two cursors on one item. Delete through one cursor, + check that the other sees the change. + 3. Same as 2, with the two cursors on a duplicate. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test058 + Verify that deleting and reading duplicates results in correct ordering. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test059 + Cursor ops work with a partial length of 0. + Make sure that we handle retrieves of zero-length data items correctly. + The following ops, should allow a partial data retrieve of 0-length. + db_get + db_cget FIRST, NEXT, LAST, PREV, CURRENT, SET, SET_RANGE + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test060 + Test of the DB_EXCL flag to DB->open(). + 1) Attempt to open and create a nonexistent database; verify success. + 2) Attempt to reopen it; verify failure. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test061 + Test of txn abort and commit for in-memory databases. + a) Put + abort: verify absence of data + b) Put + commit: verify presence of data + c) Overwrite + abort: verify that data is unchanged + d) Overwrite + commit: verify that data has changed + e) Delete + abort: verify that data is still present + f) Delete + commit: verify that data has been deleted + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test062 + Test of partial puts (using DB_CURRENT) onto duplicate pages. + Insert the first 200 words into the dictionary 200 times each with + self as key and <random letter>:self as data. Use partial puts to + append self again to data; verify correctness. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test063 + Test of the DB_RDONLY flag to DB->open + Attempt to both DB->put and DBC->c_put into a database + that has been opened DB_RDONLY, and check for failure. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test064 + Test of DB->get_type + Create a database of type specified by method. + Make sure DB->get_type returns the right thing with both a normal + and DB_UNKNOWN open. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test065 + Test of DB->stat, both -DB_FAST_STAT and row + counts with DB->stat -txn. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test066 + Test of cursor overwrites of DB_CURRENT w/ duplicates. + + Make sure a cursor put to DB_CURRENT acts as an overwrite in a + database with duplicates. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test067 + Test of DB_CURRENT partial puts onto almost empty duplicate + pages, with and without DB_DUP_SORT. + + Test of DB_CURRENT partial puts on almost-empty duplicate pages. + This test was written to address the following issue, #2 in the + list of issues relating to bug #0820: + + 2. DBcursor->put, DB_CURRENT flag, off-page duplicates, hash and btree: + In Btree, the DB_CURRENT overwrite of off-page duplicate records + first deletes the record and then puts the new one -- this could + be a problem if the removal of the record causes a reverse split. + Suggested solution is to acquire a cursor to lock down the current + record, put a new record after that record, and then delete using + the held cursor. + + It also tests the following, #5 in the same list of issues: + 5. DBcursor->put, DB_AFTER/DB_BEFORE/DB_CURRENT flags, DB_DBT_PARTIAL + set, duplicate comparison routine specified. + The partial change does not change how data items sort, but the + record to be put isn't built yet, and that record supplied is the + one that's checked for ordering compatibility. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test068 + Test of DB_BEFORE and DB_AFTER with partial puts. + Make sure DB_BEFORE and DB_AFTER work properly with partial puts, and + check that they return EINVAL if DB_DUPSORT is set or if DB_DUP is not. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test069 + Test of DB_CURRENT partial puts without duplicates-- test067 w/ + small ndups to ensure that partial puts to DB_CURRENT work + correctly in the absence of duplicate pages. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test070 + Test of DB_CONSUME (Four consumers, 1000 items.) + + Fork off six processes, four consumers and two producers. + The producers will each put 20000 records into a queue; + the consumers will each get 10000. + Then, verify that no record was lost or retrieved twice. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test071 + Test of DB_CONSUME (One consumer, 10000 items.) + This is DB Test 70, with one consumer, one producers, and 10000 items. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test072 + Test of cursor stability when duplicates are moved off-page. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test073 + Test of cursor stability on duplicate pages. + + Does the following: + a. Initialize things by DB->putting ndups dups and + setting a reference cursor to point to each. + b. c_put ndups dups (and correspondingly expanding + the set of reference cursors) after the last one, making sure + after each step that all the reference cursors still point to + the right item. + c. Ditto, but before the first one. + d. Ditto, but after each one in sequence first to last. + e. Ditto, but after each one in sequence from last to first. + occur relative to the new datum) + f. Ditto for the two sequence tests, only doing a + DBC->c_put(DB_CURRENT) of a larger datum instead of adding a + new one. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test074 + Test of DB_NEXT_NODUP. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test076 + Test creation of many small databases in a single environment. [#1528]. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test077 + Test of DB_GET_RECNO [#1206]. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test078 + Test of DBC->c_count(). [#303] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test079 + Test of deletes in large trees. (test006 w/ sm. pagesize). + + Check that delete operations work in large btrees. 10000 entries + and a pagesize of 512 push this out to a four-level btree, with a + small fraction of the entries going on overflow pages. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test081 + Test off-page duplicates and overflow pages together with + very large keys (key/data as file contents). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test082 + Test of DB_PREV_NODUP (uses test074). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test083 + Test of DB->key_range. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test084 + Basic sanity test (test001) with large (64K) pages. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test085 + Test of cursor behavior when a cursor is pointing to a deleted + btree key which then has duplicates added. [#2473] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test086 + Test of cursor stability across btree splits/rsplits with + subtransaction aborts (a variant of test048). [#2373] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test087 + Test of cursor stability when converting to and modifying + off-page duplicate pages with subtransaction aborts. [#2373] + + Does the following: + a. Initialize things by DB->putting ndups dups and + setting a reference cursor to point to each. Do each put twice, + first aborting, then committing, so we're sure to abort the move + to off-page dups at some point. + b. c_put ndups dups (and correspondingly expanding + the set of reference cursors) after the last one, making sure + after each step that all the reference cursors still point to + the right item. + c. Ditto, but before the first one. + d. Ditto, but after each one in sequence first to last. + e. Ditto, but after each one in sequence from last to first. + occur relative to the new datum) + f. Ditto for the two sequence tests, only doing a + DBC->c_put(DB_CURRENT) of a larger datum instead of adding a + new one. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test088 + Test of cursor stability across btree splits with very + deep trees (a variant of test048). [#2514] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test089 + Concurrent Data Store test (CDB) + + Enhanced CDB testing to test off-page dups, cursor dups and + cursor operations like c_del then c_get. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test090 + Test for functionality near the end of the queue using test001. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test091 + Test of DB_CONSUME_WAIT. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test092 + Test of DB_DIRTY_READ [#3395] + + We set up a database with nentries in it. We then open the + database read-only twice. One with dirty reads and one without. + We open the database for writing and update some entries in it. + Then read those new entries via db->get (clean and dirty), and + via cursors (clean and dirty). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test093 + Test set_bt_compare (btree key comparison function) and + set_h_compare (hash key comparison function). + + Open a database with a comparison function specified, + populate, and close, saving a list with that key order as + we do so. Reopen and read in the keys, saving in another + list; the keys should be in the order specified by the + comparison function. Sort the original saved list of keys + using the comparison function, and verify that it matches + the keys as read out of the database. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test094 + Test using set_dup_compare. + + Use the first 10,000 entries from the dictionary. + Insert each with self as key and data; retrieve each. + After all are entered, retrieve all; compare output to original. + Close file, reopen, do retrieve and re-verify. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test095 + Bulk get test for methods supporting dups. [#2934] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test096 + Db->truncate test. + For all methods: + Test that truncate empties an existing database. + Test that truncate-write in an aborted txn doesn't + change the original contents. + Test that truncate-write in a committed txn does + overwrite the original contents. + For btree and hash, do the same in a database with offpage dups. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test097 + Open up a large set of database files simultaneously. + Adjust for local file descriptor resource limits. + Then use the first 1000 entries from the dictionary. + Insert each with self as key and a fixed, medium length data string; + retrieve each. After all are entered, retrieve all; compare output + to original. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test098 + Test of DB_GET_RECNO and secondary indices. Open a primary and + a secondary, and do a normal cursor get followed by a get_recno. + (This is a smoke test for "Bug #1" in [#5811].) + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test099 + + Test of DB->get and DBC->c_get with set_recno and get_recno. + + Populate a small btree -recnum database. + After all are entered, retrieve each using -recno with DB->get. + Open a cursor and do the same for DBC->c_get with set_recno. + Verify that set_recno sets the record number position properly. + Verify that get_recno returns the correct record numbers. + + Using the same database, open 3 cursors and position one at + the beginning, one in the middle, and one at the end. Delete + by cursor and check that record renumbering is done properly. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test100 + Test for functionality near the end of the queue + using test025 (DB_APPEND). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test101 + Test for functionality near the end of the queue + using test070 (DB_CONSUME). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test102 + Bulk get test for record-based methods. [#2934] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test103 + Test bulk get when record numbers wrap around. + + Load database with items starting before and ending after + the record number wrap around point. Run bulk gets (-multi_key) + with various buffer sizes and verify the contents returned match + the results from a regular cursor get. + + Then delete items to create a sparse database and make sure it + still works. Test both -multi and -multi_key since they behave + differently. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test106 + + + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test107 + Test of read-committed (degree 2 isolation). [#8689] + + We set up a database. Open a read-committed transactional cursor and + a regular transactional cursor on it. Position each cursor on one page, + and do a put to a different page. + + Make sure that: + - the put succeeds if we are using degree 2 isolation. + - the put deadlocks within a regular transaction with + a regular cursor. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test109 + + Test of sequences. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test110 + Partial get test with duplicates. + + For hash and btree, create and populate a database + with dups. Randomly selecting offset and length, + retrieve data from each record and make sure we + get what we expect. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test111 + Test database compaction. + + Populate a database. Remove a high proportion of entries. + Dump and save contents. Compact the database, dump again, + and make sure we still have the same contents. + Add back some entries, delete more entries (this time by + cursor), dump, compact, and do the before/after check again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test112 + Test database compaction with a deep tree. + + This is a lot like test111, but with a large number of + entries and a small page size to make the tree deep. + To make it simple we use numerical keys all the time. + + Dump and save contents. Compact the database, dump again, + and make sure we still have the same contents. + Add back some entries, delete more entries (this time by + cursor), dump, compact, and do the before/after check again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test113 + Test database compaction with duplicates. + + This is essentially test111 with duplicates. + To make it simple we use numerical keys all the time. + + Dump and save contents. Compact the database, dump again, + and make sure we still have the same contents. + Add back some entries, delete more entries (this time by + cursor), dump, compact, and do the before/after check again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test114 + Test database compaction with overflows. + + Populate a database. Remove a high proportion of entries. + Dump and save contents. Compact the database, dump again, + and make sure we still have the same contents. + Add back some entries, delete more entries (this time by + cursor), dump, compact, and do the before/after check again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test115 + Test database compaction with user-specified btree sort. + + This is essentially test111 with the user-specified sort. + Populate a database. Remove a high proportion of entries. + Dump and save contents. Compact the database, dump again, + and make sure we still have the same contents. + Add back some entries, delete more entries (this time by + cursor), dump, compact, and do the before/after check again. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test116 + Test of basic functionality of lsn_reset. + + Create a database in an env. Copy it to a new file within + the same env. Reset the page LSNs. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test117 + Test database compaction with requested fill percent. + + Populate a database. Remove a high proportion of entries. + Dump and save contents. Compact the database, requesting + fill percentages starting at 10% and working our way up to + 100. On each cycle, make sure we still have the same contents. + + Unlike the other compaction tests, this one does not + use -freespace. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test119 + Test behavior when Berkeley DB returns DB_BUFFER_SMALL on a cursor. + + If the user-supplied buffer is not large enough to contain + the returned value, DB returns BUFFER_SMALL. If it does, + check that the cursor does not move -- if it moves, it will + skip items. [#13815] + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test120 + Test of multi-version concurrency control. + + Test basic functionality: a snapshot transaction started + before a regular transaction's put can't see the modification. + A snapshot transaction started after the put can see it. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test121 + Tests of multi-version concurrency control. + + MVCC and cursor adjustment. + Set up a -snapshot cursor and position it in the middle + of a database. + Write to the database, both before and after the cursor, + and verify that it stays on the same position. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test122 + Tests of multi-version concurrency control. + + MVCC and databases that turn multi-version on and off. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test123 + Concurrent Data Store cdsgroup smoke test. + + Open a CDS env with -cdb_alldb. + Start a "txn" with -cdsgroup. + Create two databases in the env, do a cursor put + in both within the same txn. This should succeed. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +test125 + Test cursor comparison API. + + The cursor comparison API reports whether two cursors within + the same database are at the same position. It does not report + any information about relative position. + + 1. Test two uninitialized cursors (error). + 2. Test one uninitialized cursor, one initialized (error). + 3. Test two cursors in different databases (error). + 4. Put two cursors in the same place, test for match. Walk + them back and forth a bit, more matching. + 5. Two cursors in the same spot. Delete through one. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn001 + Begin, commit, abort testing. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn002 + Verify that read-only transactions do not write log records. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn003 + Test abort/commit/prepare of txns with outstanding child txns. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn004 + Test of wraparound txnids (txn001) + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn005 + Test transaction ID wraparound and recovery. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn008 + Test of wraparound txnids (txn002) + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn009 + Test of wraparound txnids (txn003) + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn010 + Test DB_ENV->txn_checkpoint arguments/flags + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn011 + Test durable and non-durable txns. + Test a mixed env (with both durable and non-durable + dbs), then a purely non-durable env. Make sure commit + and abort work, and that only the log records we + expect are written. + Test that we can't get a durable handle on an open ND + database, or vice versa. Test that all subdb's + must be of the same type (D or ND). + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn012 + Test txn->getname and txn->setname. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn013 + Test of txns used in the wrong environment. + Set up two envs. Start a txn in one env, and attempt to use it + in the other env. Verify we get the appropriate error message. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +txn014 + Test of parent and child txns working on the same database. + A txn that will become a parent create a database. + A txn that will not become a parent creates another database. + Start a child txn of the 1st txn. + Verify that the parent txn is disabled while child is open. + 1. Child reads contents with child handle (should succeed). + 2. Child reads contents with parent handle (should succeed). + Verify that the non-parent txn can read from its database, + and that the child txn cannot. + Return to the child txn. + 3. Child writes with child handle (should succeed). + 4. Child writes with parent handle (should succeed). + + Commit the child, verify that the parent can write again. + Check contents of database with a second child. |