Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions backup_writer_failure_HABITAT_golden.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// backup_writer_failure_HABITAT_golden.go
package badger

import (
"bytes"
"errors"
"testing"
)

// failingWriter is a writer that always returns an error.
type failingWriter struct{}

func (f *failingWriter) Write(p []byte) (int, error) {
return 0, errors.New("writer failure")
}

func TestBackupWriterFailure_HABITAT(t *testing.T) {
// Use a temporary in-memory Badger DB for testing
opts := DefaultOptions("").WithInMemory(true)
db, err := Open(opts)
if err != nil {
t.Fatalf("Failed to open Badger DB: %v", err)
}
defer db.Close()

// Put a sample key-value pair
if err := db.Update(func(txn *Txn) error {
return txn.Set([]byte("key"), []byte("value"))
}); err != nil {
t.Fatalf("Failed to set key: %v", err)
}

// Use failingWriter to simulate backup writer failure
fw := &failingWriter{}

// db.Backup returns two values: ts and err
_, err = db.Backup(fw, 0)
if err == nil {
t.Fatalf("Expected Backup to fail due to writer error, but got nil")
}

// Also test a successful backup to ensure DB.Backup works
var buf bytes.Buffer
_, err = db.Backup(&buf, 0)
if err != nil {
t.Fatalf("Backup failed unexpectedly: %v", err)
}
if buf.Len() == 0 {
t.Fatalf("Expected backup data, got empty buffer")
}
}
50 changes: 50 additions & 0 deletions backup_writer_failure_HABITAT_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package badger_test

import (
"bytes"
"fmt"
"testing"

"github.com/dgraph-io/badger/v4"
)

// failWriter simulates a writer that always fails
type failWriter struct{}

func (f *failWriter) Write(p []byte) (int, error) {
return 0, fmt.Errorf("writer failure")
}

func TestBackupWriterFailure_HABITAT(t *testing.T) {
// Use in-memory Badger DB for test
opts := badger.DefaultOptions("").WithInMemory(true)
db, err := badger.Open(opts)
if err != nil {
t.Fatalf("Failed to open Badger DB: %v", err)
}
defer db.Close()

// Insert a key-value pair
err = db.Update(func(txn *badger.Txn) error {
return txn.Set([]byte("key1"), []byte("value1"))
})
if err != nil {
t.Fatalf("Failed to insert data: %v", err)
}

// Backup with failing writer should return an error
_, err = db.Backup(&failWriter{}, 0)
if err == nil {
t.Errorf("Expected Backup to fail due to writer error, but got nil")
}

// Backup to normal buffer should succeed
buf := &bytes.Buffer{}
_, err = db.Backup(buf, 0)
if err != nil {
t.Errorf("Expected successful backup, got error: %v", err)
}
if buf.Len() == 0 {
t.Errorf("Expected some data in backup, but buffer is empty")
}
}