// TestEmptyDB tests that empty databases are handled properly. func TestEmptyDB(t *testing.T) { for _, dbType := range database.SupportedDBs() { // Ensure NewestSha returns expected values for a newly created // db. db, teardown, err := createDB(dbType, "emptydb", false) if err != nil { t.Errorf("Failed to create test database %v", err) return } testNewestShaEmpty(t, db) // Ensure NewestSha still returns expected values for an empty // database after reopen. db.Close() db, err = openDB(dbType, "emptydb") if err != nil { t.Errorf("Failed to open test database %v", err) return } testNewestShaEmpty(t, db) db.Close() // Clean up the old db. teardown() } }
// TestReorganization performs reorganization tests for each supported DB type func TestReorganization(t *testing.T) { for _, dbType := range database.SupportedDBs() { if _, exists := ignoreDbTypes[dbType]; !exists { testReorganization(t, dbType) } } }
// TestInterface performs tests for the various interfaces of the database // package which require state in the database for each supported database // type (those loaded in common_test.go that is). func TestInterface(t *testing.T) { for _, dbType := range database.SupportedDBs() { if _, exists := ignoreDbTypes[dbType]; !exists { testInterface(t, dbType) } } }
// isSupportedDbType returns whether or not the passed database type is // currently supported. func isSupportedDbType(dbType string) bool { supportedDBs := database.SupportedDBs() for _, sDbType := range supportedDBs { if dbType == sDbType { return true } } return false }
// TestAddDuplicateDriver ensures that adding a duplicate driver does not // overwrite an existing one. func TestAddDuplicateDriver(t *testing.T) { supportedDBs := database.SupportedDBs() if len(supportedDBs) == 0 { t.Errorf("TestAddDuplicateDriver: No backends to test") return } dbType := supportedDBs[0] // bogusCreateDB is a function which acts as a bogus create and open // driver function and intentionally returns a failure that can be // detected if the interface allows a duplicate driver to overwrite an // existing one. bogusCreateDB := func(args ...interface{}) (database.Db, error) { return nil, fmt.Errorf("duplicate driver allowed for database "+ "type [%v]", dbType) } // Create a driver that tries to replace an existing one. Set its // create and open functions to a function that causes a test failure if // they are invoked. driver := database.DriverDB{ DbType: dbType, CreateDB: bogusCreateDB, OpenDB: bogusCreateDB, } database.AddDBDriver(driver) // Ensure creating a database of the type that we tried to replace // doesn't fail (if it does, it indicates the driver was erroneously // replaced). _, teardown, err := createDB(dbType, "dupdrivertest", true) if err != nil { t.Errorf("TestAddDuplicateDriver: %v", err) return } teardown() }
blockMaxSizeMin = 1000 blockMaxSizeMax = wire.MaxBlockPayload - 1000 defaultBlockPrioritySize = 20000 defaultGenerate = false defaultAddrIndex = false defaultNonAggressive = false defaultNoMiningStateSync = false defaultAllowOldVotes = false defaultSigCacheMaxSize = 50000 ) var ( dcrdHomeDir = dcrutil.AppDataDir("dcrd", false) defaultConfigFile = filepath.Join(dcrdHomeDir, defaultConfigFilename) defaultDataDir = filepath.Join(dcrdHomeDir, defaultDataDirname) knownDbTypes = database.SupportedDBs() defaultRPCKeyFile = filepath.Join(dcrdHomeDir, "rpc.key") defaultRPCCertFile = filepath.Join(dcrdHomeDir, "rpc.cert") defaultLogDir = filepath.Join(dcrdHomeDir, defaultLogDirname) ) // runServiceCommand is only set to a real function on Windows. It is used // to parse and execute service commands specified via the -s flag. var runServiceCommand func(string) error // minUint32 is a helper function to return the minimum of two uint32s. // This avoids a math import and the need to cast to floats. func minUint32(a, b uint32) uint32 { if a < b { return a }