Skip to main content

db_test.go

db_test.go - Overview

This file contains various tests for the BadgerDB, covering functionalities such as writing, reading, iterating, concurrency, transactions, value log garbage collection, and data streaming.

waitForMessage

  • Purpose: Blocks until a specific message is received a certain number of times on a channel or until a timeout occurs.
  • Parameters:
    • ch: chan string - The channel to listen on.
    • expected: string - The expected message.
    • count: int - The number of times the message is expected.
    • timeout: int - Timeout in seconds.
    • t: *testing.T - Testing context for logging errors.
  • Returns: None. It reports errors using the testing context.

summary

  • Purpose: Represents a summary of file IDs present in the database levels, primarily for testing purposes.
  • Fields:
    • fileIDs: map[uint64]bool - A map of file IDs.

levelsController.getSummary

  • Purpose: Collects and returns a summary of all file IDs in the levels controller.
  • Parameters: None
  • Returns: *summary - A pointer to the summary struct containing the file IDs.

levelHandler.getSummary

  • Purpose: Collects file IDs from the level handler and adds them to the provided summary.
  • Parameters:
    • sum: *summary - A pointer to the summary struct to populate.
  • Returns: None

DB.validate

  • Purpose: Calls the validate method on the levels controller.
  • Parameters: None
  • Returns: error - The error returned by the levels controller's validate method.

getTestOptions

  • Purpose: Returns a default Options struct for testing.
  • Parameters:
    • dir: string - The directory for the database.
  • Returns: Options - A configured Options struct for testing.

getItemValue

  • Purpose: Retrieves the value from an Item and returns it as a byte slice.
  • Parameters:
    • t: *testing.T - Testing context for error reporting.
    • item: *Item - The Item to extract the value from.
  • Returns: []byte - The value of the item as a byte slice.

txnSet

  • Purpose: Sets a key-value pair in the database within a transaction.
  • Parameters:
    • t: *testing.T - Testing context for error reporting.
    • kv: *DB - The database instance.
    • key: []byte - The key to set.
    • val: []byte - The value to set.
    • meta: byte - The metadata to set.
  • Returns: None

txnDelete

  • Purpose: Deletes a key from the database within a transaction.
  • Parameters:
    • t: *testing.T - Testing context for error reporting.
    • kv: *DB - The database instance.
    • key: []byte - The key to delete.
  • Returns: None

runBadgerTest

  • Purpose: Sets up and runs a BadgerDB test within a temporary directory.
  • Parameters:
    • t: *testing.T - Testing context.
    • opts: *Options - DB options. If nil, default test options are used.
    • test: func(t *testing.T, db *DB) - The test function to execute.
  • Returns: None

TestReverseIterator

  • Purpose: Tests the reverse iterator functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestWrite

  • Purpose: Tests basic write functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestUpdateAndView

  • Purpose: Tests the Update and View functions.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestConcurrentWrite

  • Purpose: Tests concurrent write operations.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestGet

  • Purpose: Tests the Get operation, including retrieval of values and metadata.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestGetAfterDelete

  • Purpose: Tests that getting a key after deleting it returns an error.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestTxnTooBig

  • Purpose: Tests the handling of large transactions that exceed the maximum size.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestForceCompactL0

  • Purpose: Tests the force compaction of L0 tables.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestStreamDB

  • Purpose: Tests the StreamDB functionality for data backup and restoration.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

dirSize

  • Purpose: Calculates the total size of files within a directory.
  • Parameters:
    • path: string - The directory path.
  • Returns:
    • int64 - The size of the directory in MB.
    • error - An error, if any.

BenchmarkDbGrowth

  • Purpose: Benchmarks database growth with repeated adds and deletes.
  • Parameters:
    • b: *testing.B - Benchmark context.
  • Returns: None

TestGetMore

  • Purpose: Tests getting a large number of keys.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestExistsMore

  • Purpose: Tests existence checks for a large number of keys.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestIterate2Basic

  • Purpose: Tests basic iteration functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestLoad

  • Purpose: Tests loading data into the database and verifying its integrity.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestIterateDeleted

  • Purpose: Tests iteration over deleted keys.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestIterateParallel

  • Purpose: Tests parallel iteration functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestDeleteWithoutSyncWrite

  • Purpose: Tests deletion of keys without synchronous writes.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestPidFile

  • Purpose: Tests the creation and handling of the PID file.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestInvalidKey

  • Purpose: Tests the handling of invalid keys.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestIteratorPrefetchSize

  • Purpose: Tests the iterator's prefetch size functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestSetIfAbsentAsync

  • Purpose: Tests the asynchronous setting of keys if they are absent.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestGetSetRace

  • Purpose: Tests for race conditions between get and set operations.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestDiscardVersionsBelow

  • Purpose: Tests the discarding of older versions of keys.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestExpiry

  • Purpose: Tests the expiry functionality for keys with TTL.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestExpiryImproperDBClose

  • Purpose: Tests expiry behavior when the database is improperly closed.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

randBytes

  • Purpose: Generates random bytes.
  • Parameters:
    • n: int - The number of bytes to generate.
  • Returns: []byte - A slice of random bytes.

TestLargeKeys

  • Purpose: Tests handling of large keys.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestCreateDirs

  • Purpose: Tests the creation of directories.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestGetSetDeadlock

  • Purpose: Tests for deadlocks between get and set operations.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestWriteDeadlock

  • Purpose: Tests for deadlocks during write operations.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestSequence

  • Purpose: Tests the sequence functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestSequence_Release

  • Purpose: Tests sequence release.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestTestSequence2

  • Purpose: Tests sequence functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestReadOnly

  • Purpose: Tests read-only database mode.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestLSMOnly

  • Purpose: Tests LSM-only mode.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestMinReadTs

  • Purpose: Tests min read timestamp functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestGoroutineLeak

  • Purpose: Tests for goroutine leaks.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

ExampleOpen

  • Purpose: Example usage of the Open function.
  • Parameters: None
  • Returns: None

ExampleTxn_NewIterator

  • Purpose: Example usage of the NewIterator function.
  • Parameters: None
  • Returns: None

TestSyncForRace

  • Purpose: Tests Sync method for race conditions.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestSyncForNoErrors

  • Purpose: Tests Sync method for potential errors.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestSyncForReadingTheEntriesThatWereSynced

  • Purpose: Tests reading the entries immediately after calling the Sync method.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestForceFlushMemtable

  • Purpose: Tests if the memtable is flushed on disk.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestVerifyChecksum

  • Purpose: Tests the database's checksum verification functionality.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestMain

  • Purpose: Main test function.
  • Parameters:
    • m: *testing.M - Testing context.
  • Returns: None

removeDir

  • Purpose: Removes a directory and its contents.
  • Parameters:
    • dir: string - The directory path.
  • Returns: None

TestWriteInemory

  • Purpose: Tests writing to an in-memory database.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestMinCacheSize

  • Purpose: Tests the minimum cache size.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestUpdateMaxCost

  • Purpose: Tests updating maximum cache cost.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestOpenDBReadOnly

  • Purpose: Tests opening the database in read-only mode.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestBannedPrefixes

  • Purpose: Tests banning prefixes.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestIterateWithBanned

  • Purpose: Tests iterating with banned prefixes.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestBannedAtZeroOffset

  • Purpose: Tests banning prefixes at zero offset.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestCompactL0OnClose

  • Purpose: Tests L0 compaction on close.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None

TestCloseDBWhileReading

  • Purpose: Tests closing the DB while there are readers active.
  • Parameters:
    • t: *testing.T - Testing context.
  • Returns: None