database_core_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package database
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "os"
  6. "testing"
  7. )
  8. var dbFilePath = "../../test/"
  9. var dbFileName = "testdb.db"
  10. var db *Database
  11. func setupSuite(t *testing.T) func(t *testing.T) {
  12. //t.Log("Setting up database env")
  13. os.Mkdir(dbFilePath, 0777)
  14. file, err := os.Create(dbFilePath + dbFileName)
  15. if err != nil {
  16. t.Fatalf("Failed to create file: %v", err)
  17. }
  18. file.Close()
  19. // Return a function to teardown the test
  20. return func(t *testing.T) {
  21. //t.Log("Cleaning up")
  22. err := os.RemoveAll(dbFilePath)
  23. if err != nil {
  24. t.Fatalf("Failed to clean up: %v", err)
  25. }
  26. }
  27. }
  28. func TestDatabaseSimple(t *testing.T) {
  29. teardownSuite := setupSuite(t)
  30. defer teardownSuite(t)
  31. // Create a new database
  32. var err error
  33. db, err = newDatabase(dbFilePath+dbFileName, false)
  34. if err != nil {
  35. t.Fatalf("Failed to create a new database: %v", err)
  36. }
  37. tableName := "testTable"
  38. key := "testKey"
  39. value := map[string]interface{}{"field1": "value1", "field2": "value2"}
  40. // Test creating a new table
  41. err = db.newTable(tableName)
  42. if err != nil {
  43. t.Fatalf("Failed to create a new table: %v", err)
  44. }
  45. // Test writing data to the table
  46. err = db.write(tableName, key, value)
  47. if err != nil {
  48. t.Fatalf("Failed to write data to the table: %v", err)
  49. }
  50. // Test reading data from the table
  51. var result map[string]interface{}
  52. err = db.read(tableName, key, &result)
  53. if err != nil {
  54. t.Fatalf("Failed to read data from the table: %v", err)
  55. }
  56. // Verify the read data
  57. if result["field1"] != "value1" || result["field2"] != "value2" {
  58. t.Fatalf("Read data does not match the expected value")
  59. }
  60. // Test dropping the table
  61. err = db.dropTable(tableName)
  62. if err != nil {
  63. t.Fatalf("Failed to drop the table: %v", err)
  64. }
  65. // Verify that the table no longer exists
  66. if db.tableExists(tableName) {
  67. t.Fatalf("Table still exists after dropping")
  68. }
  69. defer db.close()
  70. }
  71. func TestDatabaseComplexRW(t *testing.T) {
  72. teardownSuite := setupSuite(t)
  73. defer teardownSuite(t)
  74. // Create a new database
  75. var err error
  76. db, err = newDatabase(dbFilePath+dbFileName, false)
  77. if err != nil {
  78. t.Fatalf("Failed to create a new database: %v", err)
  79. }
  80. tableName := "testTable"
  81. // Test creating a new table
  82. err = db.newTable(tableName)
  83. if err != nil {
  84. t.Fatalf("Failed to create a new table: %v", err)
  85. }
  86. numRequests := 1000
  87. // Perform multiple write requests with random keys and values
  88. mp := make(map[string]map[string]interface{}, 1000)
  89. for i := 0; i < numRequests; i++ {
  90. key := "Pkey_" + fmt.Sprint(rand.Intn(1000))
  91. value := map[string]interface{}{"Skey_" + fmt.Sprint(rand.Intn(1000)): "value_" + fmt.Sprint(rand.Intn(1000))}
  92. mp[key] = value
  93. err := db.write("testTable", key, value)
  94. if err != nil {
  95. t.Fatalf("Failed to write data to the table: %v", err)
  96. }
  97. }
  98. for k, v := range mp {
  99. var result map[string]interface{}
  100. err := db.read("testTable", k, &result)
  101. if err != nil {
  102. t.Fatalf("Failed to read data from the table: %v", err)
  103. }
  104. if fmt.Sprintf("%v", result) != fmt.Sprintf("%v", v) {
  105. t.Fatalf("Data mismatch: expected %v, got %v", v, result)
  106. }
  107. }
  108. defer db.close()
  109. }