// TestEmptyDB tests that empty databases are handled properly. func TestEmptyDB(t *testing.T) { for _, dbType := range btcdb.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() } }
// TestInterface performs tests for the various interfaces of btcdb 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 btcdb.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 := btcdb.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 := btcdb.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{}) (btcdb.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 := btcdb.DriverDB{ DbType: dbType, CreateDB: bogusCreateDB, OpenDB: bogusCreateDB, } btcdb.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() }
"github.com/conformal/btcwire" "github.com/conformal/go-flags" "os" "path/filepath" ) const ( defaultDbType = "leveldb" defaultDataFile = "bootstrap.dat" defaultProgress = 10000 ) var ( btcdHomeDir = btcutil.AppDataDir("btcd", false) defaultDataDir = filepath.Join(btcdHomeDir, "data") knownDbTypes = btcdb.SupportedDBs() activeNetwork = btcwire.MainNet ) // config defines the configuration options for findcheckpoint. // // See loadConfig for details on the configuration load process. type config struct { DataDir string `short:"b" long:"datadir" description:"Location of the btcd data directory"` DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"` TestNet3 bool `long:"testnet" description:"Use the test network"` InFile string `short:"i" long:"infile" description:"File containing the block(s)"` Progress int `short:"p" long:"progress" description:"Show a progress message every time this number of blocks is processed -- Use 0 to disable progress announcements"` } // filesExists reports whether the named file or directory exists.