From dff7706d04161062338ccb143608101ccc84e277 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 2 Aug 2018 18:17:25 -0700 Subject: [PATCH] channeldb/meta_test: adds TestMigrationReversion Adds a test asserting that we will fail to open a channeldb with a version higher than the highest known version to the current build of lnd. --- channeldb/meta_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/channeldb/meta_test.go b/channeldb/meta_test.go index 5890d669..dbed0a2b 100644 --- a/channeldb/meta_test.go +++ b/channeldb/meta_test.go @@ -2,6 +2,7 @@ package channeldb import ( "bytes" + "io/ioutil" "testing" "github.com/coreos/bbolt" @@ -380,3 +381,43 @@ func TestMigrationWithoutErrors(t *testing.T) { migrationWithoutErrors, false) } + +// TestMigrationReversion tests after performing a migration to a higher +// database version, opening the database with a lower latest db version returns +// ErrDBReversion. +func TestMigrationReversion(t *testing.T) { + t.Parallel() + + tempDirName, err := ioutil.TempDir("", "channeldb") + if err != nil { + t.Fatalf("unable to create temp dir: %v", err) + } + + cdb, err := Open(tempDirName) + if err != nil { + t.Fatalf("unable to open channeldb: %v", err) + } + + // Update the database metadata to point to one more than the highest + // known version. + err = cdb.Update(func(tx *bolt.Tx) error { + newMeta := &Meta{ + DbVersionNumber: getLatestDBVersion(dbVersions) + 1, + } + + return putMeta(newMeta, tx) + }) + + // Close the database. Even if we succeeded, our next step is to reopen. + cdb.Close() + + if err != nil { + t.Fatalf("unable to increase db version: %v", err) + } + + _, err = Open(tempDirName) + if err != ErrDBReversion { + t.Fatalf("unexpected error when opening channeldb, "+ + "want: %v, got: %v", ErrDBReversion, err) + } +}