stasatdaglabs 8a4ece1101
[NOD-1223] Reorganize project (#868)
* [NOD-1223] Move all network stuff into a new network package.

* [NOD-1223] Delete the unused package testutil.

* [NOD-1223] Move infrastructure stuff into a new instrastructure package.

* [NOD-1223] Move domain stuff into a new domain package.
2020-08-13 17:27:25 +03:00

132 lines
3.5 KiB
Go

package ffldb
import (
"github.com/kaspanet/kaspad/infrastructure/database"
"io/ioutil"
"reflect"
"testing"
)
func prepareDatabaseForTest(t *testing.T, testName string) (db database.Database, teardownFunc func()) {
// Create a temp db to run tests against
path, err := ioutil.TempDir("", testName)
if err != nil {
t.Fatalf("%s: TempDir unexpectedly "+
"failed: %s", testName, err)
}
db, err = Open(path)
if err != nil {
t.Fatalf("%s: Open unexpectedly "+
"failed: %s", testName, err)
}
teardownFunc = func() {
err = db.Close()
if err != nil {
t.Fatalf("%s: Close unexpectedly "+
"failed: %s", testName, err)
}
}
return db, teardownFunc
}
func TestRepairFlatFiles(t *testing.T) {
// Create a temp db to run tests against
path, err := ioutil.TempDir("", "TestRepairFlatFiles")
if err != nil {
t.Fatalf("TestRepairFlatFiles: TempDir unexpectedly "+
"failed: %s", err)
}
db, err := Open(path)
if err != nil {
t.Fatalf("TestRepairFlatFiles: Open unexpectedly "+
"failed: %s", err)
}
isOpen := true
defer func() {
if isOpen {
err := db.Close()
if err != nil {
t.Fatalf("TestRepairFlatFiles: Close unexpectedly "+
"failed: %s", err)
}
}
}()
// Cast to ffldb since we're going to be messing with its internals
ffldbInstance, ok := db.(*ffldb)
if !ok {
t.Fatalf("TestRepairFlatFiles: unexpectedly can't cast " +
"db to ffldb")
}
// Append data to the same store
storeName := "test"
_, err = ffldbInstance.AppendToStore(storeName, []byte("data1"))
if err != nil {
t.Fatalf("TestRepairFlatFiles: AppendToStore unexpectedly "+
"failed: %s", err)
}
// Grab the current location to test against later
oldCurrentLocation, err := ffldbInstance.flatFileDB.CurrentLocation(storeName)
if err != nil {
t.Fatalf("TestRepairFlatFiles: CurrentStoreLocation "+
"unexpectedly failed: %s", err)
}
// Append more data to the same store. We expect this to disappear later.
location2, err := ffldbInstance.AppendToStore(storeName, []byte("data2"))
if err != nil {
t.Fatalf("TestRepairFlatFiles: AppendToStore unexpectedly "+
"failed: %s", err)
}
// Manually update the current location to point to the first piece of data
err = setCurrentStoreLocation(ffldbInstance, storeName, oldCurrentLocation)
if err != nil {
t.Fatalf("TestRepairFlatFiles: setCurrentStoreLocation "+
"unexpectedly failed: %s", err)
}
// Reopen the database
err = ffldbInstance.Close()
if err != nil {
t.Fatalf("TestRepairFlatFiles: Close unexpectedly "+
"failed: %s", err)
}
isOpen = false
db, err = Open(path)
if err != nil {
t.Fatalf("TestRepairFlatFiles: Open unexpectedly "+
"failed: %s", err)
}
isOpen = true
ffldbInstance, ok = db.(*ffldb)
if !ok {
t.Fatalf("TestRepairFlatFiles: unexpectedly can't cast " +
"db to ffldb")
}
// Make sure that the current location rolled back as expected
currentLocation, err := ffldbInstance.flatFileDB.CurrentLocation(storeName)
if err != nil {
t.Fatalf("TestRepairFlatFiles: CurrentStoreLocation "+
"unexpectedly failed: %s", err)
}
if !reflect.DeepEqual(oldCurrentLocation, currentLocation) {
t.Fatalf("TestRepairFlatFiles: currentLocation did " +
"not roll back")
}
// Make sure that we can't get data that no longer exists
_, err = ffldbInstance.RetrieveFromStore(storeName, location2)
if err == nil {
t.Fatalf("TestRepairFlatFiles: RetrieveFromStore " +
"unexpectedly succeeded")
}
if !database.IsNotFoundError(err) {
t.Fatalf("TestRepairFlatFiles: RetrieveFromStore "+
"returned wrong error: %s", err)
}
}