package crypto import ( "github.com/ethereum/go-ethereum/ethdb" // "io/ioutil" "fmt" "os" "path" "testing" ) // test if persistence layer works func TestDBKeyManager(t *testing.T) { memdb, _ := ethdb.NewMemDatabase() keyManager0 := NewDBKeyManager(memdb) err := keyManager0.Init("", 0, false) if err != nil { t.Error("Unexpected error: ", err) } keyManager1 := NewDBKeyManager(memdb) err = keyManager1.Init("", 0, false) if err != nil { t.Error("Unexpected error: ", err) } if string(keyManager0.PrivateKey()) != string(keyManager1.PrivateKey()) { t.Error("Expected private keys %x, %x, to be identical via db persistence", keyManager0.PrivateKey(), keyManager1.PrivateKey()) } err = keyManager1.Init("", 0, true) if err != nil { t.Error("Unexpected error: ", err) } if string(keyManager0.PrivateKey()) == string(keyManager1.PrivateKey()) { t.Error("Expected private keys %x, %x, to be be different despite db persistence if force generate", keyManager0.PrivateKey(), keyManager1.PrivateKey()) } } func TestFileKeyManager(t *testing.T) { basedir0 := "/tmp/ethtest0" os.RemoveAll(basedir0) os.Mkdir(basedir0, 0777) keyManager0 := NewFileKeyManager(basedir0) err := keyManager0.Init("", 0, false) if err != nil { t.Error("Unexpected error: ", err) } keyManager1 := NewFileKeyManager(basedir0) err = keyManager1.Init("", 0, false) if err != nil { t.Error("Unexpected error: ", err) } if string(keyManager0.PrivateKey()) != string(keyManager1.PrivateKey()) { t.Error("Expected private keys %x, %x, to be identical via db persistence", keyManager0.PrivateKey(), keyManager1.PrivateKey()) } err = keyManager1.Init("", 0, true) if err != nil { t.Error("Unexpected error: ", err) } if string(keyManager0.PrivateKey()) == string(keyManager1.PrivateKey()) { t.Error("Expected private keys %x, %x, to be be different despite db persistence if force generate", keyManager0.PrivateKey(), keyManager1.PrivateKey()) } } // cursor errors func TestCursorErrors(t *testing.T) { memdb, _ := ethdb.NewMemDatabase() keyManager0 := NewDBKeyManager(memdb) err := keyManager0.Init("", 0, false) err = keyManager0.Init("", 1, false) if err == nil { t.Error("Expected cursor error") } err = keyManager0.SetCursor(1) if err == nil { t.Error("Expected cursor error") } } func TestExportImport(t *testing.T) { memdb, _ := ethdb.NewMemDatabase() keyManager0 := NewDBKeyManager(memdb) err := keyManager0.Init("", 0, false) basedir0 := "/tmp/ethtest0" os.RemoveAll(basedir0) os.Mkdir(basedir0, 0777) keyManager0.Export(basedir0) keyManager1 := NewFileKeyManager(basedir0) err = keyManager1.Init("", 0, false) if err != nil { t.Error("Unexpected error: ", err) } fmt.Printf("keyRing: %v\n", keyManager0.KeyPair()) fmt.Printf("keyRing: %v\n", keyManager1.KeyPair()) if string(keyManager0.PrivateKey()) != string(keyManager1.PrivateKey()) { t.Error("Expected private keys %x, %x, to be identical via export to filestore basedir", keyManager0.PrivateKey(), keyManager1.PrivateKey()) } path.Join("") // memdb, _ = ethdb.NewMemDatabase() // keyManager2 := NewDBKeyManager(memdb) // err = keyManager2.InitFromSecretsFile("", 0, path.Join(basedir0, "default.prv")) // if err != nil { // t.Error("Unexpected error: ", err) // } // if string(keyManager0.PrivateKey()) != string(keyManager2.PrivateKey()) { // t.Error("Expected private keys %s, %s, to be identical via export/import prv", keyManager0.PrivateKey(), keyManager1.PrivateKey()) // } // memdb, _ = ethdb.NewMemDatabase() // keyManager3 := NewDBKeyManager(memdb) // err = keyManager3.InitFromSecretsFile("", 0, path.Join(basedir0, "default.mne")) // if err != nil { // t.Error("Unexpected error: ", err) // } // if string(keyManager0.PrivateKey()) != string(keyManager3.PrivateKey()) { // t.Error("Expected private keys %s, %s, to be identical via export/import mnemonic file", keyManager0.PrivateKey(), keyManager1.PrivateKey()) // } }