ソースを参照

Create database_core_test.go

Alan Yeung 1 年間 前
コミット
d4c7f45d2c
1 ファイル変更133 行追加0 行削除
  1. 133 0
      mod/database/database_core_test.go

+ 133 - 0
mod/database/database_core_test.go

@@ -0,0 +1,133 @@
+package database
+
+import (
+	"fmt"
+	"math/rand"
+	"os"
+	"testing"
+)
+
+var dbFilePath = "../../test/"
+var dbFileName = "testdb.db"
+var db *Database
+
+func setupSuite(t *testing.T) func(t *testing.T) {
+	t.Log("Setting up database env")
+
+	os.Mkdir(dbFilePath, 0777)
+	file, err := os.Create(dbFilePath + dbFileName)
+	if err != nil {
+		t.Fatalf("Failed to create file: %v", err)
+	}
+	file.Close()
+
+	// Return a function to teardown the test
+	return func(t *testing.T) {
+		t.Log("Cleaning up")
+		err := os.RemoveAll(dbFilePath)
+		if err != nil {
+			t.Fatalf("Failed to clean up: %v", err)
+		}
+	}
+}
+
+func TestDatabaseSimple(t *testing.T) {
+	teardownSuite := setupSuite(t)
+	defer teardownSuite(t)
+
+	// Create a new database
+	var err error
+	db, err = newDatabase(dbFilePath+dbFileName, false)
+	if err != nil {
+		t.Fatalf("Failed to create a new database: %v", err)
+	}
+
+	tableName := "testTable"
+	key := "testKey"
+	value := map[string]interface{}{"field1": "value1", "field2": "value2"}
+
+	// Test creating a new table
+	err = db.newTable(tableName)
+	if err != nil {
+		t.Fatalf("Failed to create a new table: %v", err)
+	}
+
+	// Test writing data to the table
+	err = db.write(tableName, key, value)
+	if err != nil {
+		t.Fatalf("Failed to write data to the table: %v", err)
+	}
+
+	// Test reading data from the table
+	var result map[string]interface{}
+	err = db.read(tableName, key, &result)
+	if err != nil {
+		t.Fatalf("Failed to read data from the table: %v", err)
+	}
+
+	// Verify the read data
+	if result["field1"] != "value1" || result["field2"] != "value2" {
+		t.Fatalf("Read data does not match the expected value")
+	}
+
+	// Test dropping the table
+	err = db.dropTable(tableName)
+	if err != nil {
+		t.Fatalf("Failed to drop the table: %v", err)
+	}
+
+	// Verify that the table no longer exists
+	if db.tableExists(tableName) {
+		t.Fatalf("Table still exists after dropping")
+	}
+
+	db.close()
+}
+
+func TestDatabaseComplexRW(t *testing.T) {
+	teardownSuite := setupSuite(t)
+	defer teardownSuite(t)
+
+	// Create a new database
+	var err error
+	db, err = newDatabase(dbFilePath+dbFileName, false)
+	if err != nil {
+		t.Fatalf("Failed to create a new database: %v", err)
+	}
+
+	tableName := "testTable"
+	// Test creating a new table
+	err = db.newTable(tableName)
+	if err != nil {
+		t.Fatalf("Failed to create a new table: %v", err)
+	}
+
+	numRequests := 1000
+
+	// Perform multiple write requests with random keys and values
+	mp := make(map[string]map[string]interface{}, 1000)
+	for i := 0; i < numRequests; i++ {
+		key := "Pkey_" + fmt.Sprint(rand.Intn(1000))
+		value := map[string]interface{}{"Skey_" + fmt.Sprint(rand.Intn(1000)): "value_" + fmt.Sprint(rand.Intn(1000))}
+
+		mp[key] = value
+
+		err := db.write("testTable", key, value)
+		if err != nil {
+			t.Fatalf("Failed to write data to the table: %v", err)
+		}
+	}
+
+	for k, v := range mp {
+		var result map[string]interface{}
+		err := db.read("testTable", k, &result)
+		if err != nil {
+			t.Fatalf("Failed to read data from the table: %v", err)
+		}
+		if fmt.Sprintf("%v", result) != fmt.Sprintf("%v", v) {
+			t.Fatalf("Data mismatch: expected %v, got %v", v, result)
+		}
+	}
+
+	db.close()
+}