128 lines
3.3 KiB
Go
128 lines
3.3 KiB
Go
package ourdb
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestBasicOperations(t *testing.T) {
|
|
// Create a temporary directory for testing
|
|
tempDir, err := os.MkdirTemp("", "ourdb_test")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temp directory: %v", err)
|
|
}
|
|
defer os.RemoveAll(tempDir)
|
|
|
|
// Create a new database
|
|
config := DefaultConfig()
|
|
config.Path = tempDir
|
|
|
|
db, err := New(config)
|
|
if err != nil {
|
|
t.Fatalf("Failed to create database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Test data
|
|
testData := []byte("Hello, OurDB!")
|
|
|
|
// Store data with auto-generated ID
|
|
id, err := db.Set(OurDBSetArgs{
|
|
Data: testData,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("Failed to store data: %v", err)
|
|
}
|
|
|
|
// Retrieve data
|
|
retrievedData, err := db.Get(id)
|
|
if err != nil {
|
|
t.Fatalf("Failed to retrieve data: %v", err)
|
|
}
|
|
|
|
// Verify data
|
|
if string(retrievedData) != string(testData) {
|
|
t.Errorf("Retrieved data doesn't match original: got %s, want %s",
|
|
string(retrievedData), string(testData))
|
|
}
|
|
|
|
// Test client interface with incremental mode (default)
|
|
clientTest(t, tempDir, true)
|
|
|
|
// Test client interface with incremental mode disabled
|
|
clientTest(t, filepath.Join(tempDir, "non_incremental"), false)
|
|
}
|
|
|
|
func clientTest(t *testing.T, dbPath string, incremental bool) {
|
|
// Create a new client with specified incremental mode
|
|
clientPath := filepath.Join(dbPath, "client_test")
|
|
config := DefaultConfig()
|
|
config.IncrementalMode = incremental
|
|
client, err := NewClientWithConfig(clientPath, config)
|
|
if err != nil {
|
|
t.Fatalf("Failed to create client: %v", err)
|
|
}
|
|
defer client.Close()
|
|
|
|
testData := []byte("Client Test Data")
|
|
var id uint32
|
|
|
|
if incremental {
|
|
// In incremental mode, add data with auto-generated ID
|
|
var err error
|
|
id, err = client.Add(testData)
|
|
if err != nil {
|
|
t.Fatalf("Failed to add data: %v", err)
|
|
}
|
|
} else {
|
|
// In non-incremental mode, set data with specific ID
|
|
id = 1
|
|
err = client.Set(id, testData)
|
|
if err != nil {
|
|
t.Fatalf("Failed to set data with ID %d: %v", id, err)
|
|
}
|
|
}
|
|
|
|
// Retrieve data
|
|
retrievedData, err := client.Get(id)
|
|
if err != nil {
|
|
t.Fatalf("Failed to retrieve data: %v", err)
|
|
}
|
|
|
|
// Verify data
|
|
if string(retrievedData) != string(testData) {
|
|
t.Errorf("Retrieved client data doesn't match original: got %s, want %s",
|
|
string(retrievedData), string(testData))
|
|
}
|
|
|
|
// Test setting data with specific ID (only if incremental mode is disabled)
|
|
if !incremental {
|
|
specificID := uint32(100)
|
|
specificData := []byte("Specific ID Data")
|
|
err = client.Set(specificID, specificData)
|
|
if err != nil {
|
|
t.Fatalf("Failed to set data with specific ID: %v", err)
|
|
}
|
|
|
|
// Retrieve and verify specific ID data
|
|
retrievedSpecific, err := client.Get(specificID)
|
|
if err != nil {
|
|
t.Fatalf("Failed to retrieve specific ID data: %v", err)
|
|
}
|
|
|
|
if string(retrievedSpecific) != string(specificData) {
|
|
t.Errorf("Retrieved specific ID data doesn't match: got %s, want %s",
|
|
string(retrievedSpecific), string(specificData))
|
|
}
|
|
} else {
|
|
// In incremental mode, test that setting a specific ID fails as expected
|
|
specificID := uint32(100)
|
|
specificData := []byte("Specific ID Data")
|
|
err = client.Set(specificID, specificData)
|
|
if err == nil {
|
|
t.Errorf("Setting specific ID in incremental mode should fail but succeeded")
|
|
}
|
|
}
|
|
}
|