Skip to content

Commit

Permalink
Add test for rollback on database creation (#248)
Browse files Browse the repository at this point in the history
  • Loading branch information
benbjohnson authored Dec 26, 2022
1 parent 0123e8b commit c42ca00
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions cmd/litefs/mount_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,60 @@ func TestSingleNode_DatabaseChecksumMismatch(t *testing.T) {
}
}

// Ensure that node can recover if the initial database creation rolls back.
func TestSingleNode_RecoverFromInitialRollback(t *testing.T) {
dir := t.TempDir()
cmd := runMountCommand(t, newMountCommand(t, dir, nil))

db, err := sql.Open("sqlite3", filepath.Join(cmd.Config.FUSE.Dir, "db"))
if err != nil {
t.Fatal(err)
}
defer func() { _ = db.Close() }()

tx, err := db.Begin()
if err != nil {
t.Fatal(err)
}
defer func() { _ = tx.Rollback() }()

// Start creating the database and then rollback.
if _, err := tx.Exec(`CREATE TABLE t (x)`); err != nil {
t.Fatal(err)
} else if err := tx.Rollback(); err != nil {
t.Fatal(err)
}

// Close database & mount.
if err := db.Close(); err != nil {
t.Fatal(err)
} else if err := cmd.Close(); err != nil {
t.Fatal(err)
}

// Reopen process. Should be able to start up and recreate the database.
cmd = newMountCommand(t, dir, nil)
if err := cmd.Run(context.Background()); err != nil {
t.Fatal(err)
}

db, err = sql.Open("sqlite3", filepath.Join(cmd.Config.FUSE.Dir, "db"))
if err != nil {
t.Fatal(err)
}
defer func() { _ = db.Close() }()

if _, err := db.Exec(`CREATE TABLE t (x)`); err != nil {
t.Fatal(err)
} else if err := db.Close(); err != nil {
t.Fatal(err)
}

if err := cmd.Close(); err != nil {
t.Fatal(err)
}
}

func TestMultiNode_Simple(t *testing.T) {
cmd0 := runMountCommand(t, newMountCommand(t, t.TempDir(), nil))
waitForPrimary(t, cmd0)
Expand Down

0 comments on commit c42ca00

Please sign in to comment.