TestDB_Close_ResourceCleanup tests that all resources are properly cleaned up
(t *testing.T)
| 1255 | |
| 1256 | // TestDB_Close_ResourceCleanup tests that all resources are properly cleaned up |
| 1257 | func TestDB_Close_ResourceCleanup(t *testing.T) { |
| 1258 | opts := DefaultOptions |
| 1259 | opts.Dir = filepath.Join(t.TempDir(), "test-close-cleanup") |
| 1260 | defer func() { _ = os.RemoveAll(opts.Dir) }() |
| 1261 | |
| 1262 | db, err := Open(opts) |
| 1263 | require.NoError(t, err) |
| 1264 | require.NotNil(t, db) |
| 1265 | |
| 1266 | bucket := "test_bucket" |
| 1267 | err = db.Update(func(tx *Tx) error { |
| 1268 | return tx.NewBucket(DataStructureBTree, bucket) |
| 1269 | }) |
| 1270 | require.NoError(t, err) |
| 1271 | |
| 1272 | // Add some data |
| 1273 | for i := 0; i < 10; i++ { |
| 1274 | key := testutils.GetTestBytes(i) |
| 1275 | val := testutils.GetRandomBytes(100) |
| 1276 | err = db.Update(func(tx *Tx) error { |
| 1277 | return tx.Put(bucket, key, val, Persistent) |
| 1278 | }) |
| 1279 | require.NoError(t, err) |
| 1280 | } |
| 1281 | |
| 1282 | // Close database |
| 1283 | err = db.Close() |
| 1284 | require.NoError(t, err) |
| 1285 | |
| 1286 | // Verify all resources are released |
| 1287 | require.Nil(t, db.ActiveFile, "ActiveFile should be nil") |
| 1288 | require.Nil(t, db.Index, "Index should be nil") |
| 1289 | require.Nil(t, db.fm, "FileManager should be nil") |
| 1290 | require.Nil(t, db.commitBuffer, "commitBuffer should be nil") |
| 1291 | |
| 1292 | // Verify file lock is released |
| 1293 | require.False(t, db.flock.Locked(), "File lock should be released") |
| 1294 | |
| 1295 | // Verify we can open the database again (proves lock is released) |
| 1296 | db2, err := Open(opts) |
| 1297 | require.NoError(t, err) |
| 1298 | require.NotNil(t, db2) |
| 1299 | |
| 1300 | // Verify data is still accessible |
| 1301 | err = db2.View(func(tx *Tx) error { |
| 1302 | val, err := tx.Get(bucket, testutils.GetTestBytes(0)) |
| 1303 | require.NoError(t, err) |
| 1304 | require.NotNil(t, val) |
| 1305 | return nil |
| 1306 | }) |
| 1307 | require.NoError(t, err) |
| 1308 | |
| 1309 | // Clean up |
| 1310 | err = db2.Close() |
| 1311 | require.NoError(t, err) |
| 1312 | } |
| 1313 | |
| 1314 | // TestDB_Close_ErrorHandling tests error handling during component shutdown |
nothing calls this directly
no test coverage detected