2018-05-15 21:19:44 +00:00
|
|
|
package bolt_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"errors"
|
|
|
|
"os"
|
2018-10-26 22:07:20 +00:00
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
2018-05-15 21:19:44 +00:00
|
|
|
|
2020-04-03 17:39:20 +00:00
|
|
|
"github.com/influxdata/influxdb/v2/bolt"
|
2019-12-04 23:10:23 +00:00
|
|
|
"go.uber.org/zap/zaptest"
|
2018-05-15 21:19:44 +00:00
|
|
|
)
|
|
|
|
|
2019-12-04 23:10:23 +00:00
|
|
|
func NewTestClient(t *testing.T) (*bolt.Client, func(), error) {
|
|
|
|
c, closeFn, err := newTestClient(t)
|
2019-01-18 13:38:58 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
if err := c.Open(context.Background()); err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return c, closeFn, nil
|
|
|
|
}
|
|
|
|
|
2019-12-04 23:10:23 +00:00
|
|
|
func newTestClient(t *testing.T) (*bolt.Client, func(), error) {
|
|
|
|
c := bolt.NewClient(zaptest.NewLogger(t))
|
2018-05-15 21:19:44 +00:00
|
|
|
|
2022-04-13 20:24:27 +00:00
|
|
|
f, err := os.CreateTemp("", "influxdata-platform-bolt-")
|
2018-05-15 21:19:44 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, nil, errors.New("unable to open temporary boltdb file")
|
|
|
|
}
|
|
|
|
f.Close()
|
|
|
|
|
|
|
|
c.Path = f.Name()
|
|
|
|
|
|
|
|
close := func() {
|
|
|
|
c.Close()
|
|
|
|
os.Remove(c.Path)
|
|
|
|
}
|
|
|
|
|
|
|
|
return c, close, nil
|
|
|
|
}
|
2018-10-26 22:07:20 +00:00
|
|
|
|
|
|
|
func TestClientOpen(t *testing.T) {
|
test: use `T.TempDir` to create temporary test directory (#23258)
* test: use `T.TempDir` to create temporary test directory
This commit replaces `os.MkdirTemp` with `t.TempDir` in tests. The
directory created by `t.TempDir` is automatically removed when the test
and all its subtests complete.
Prior to this commit, temporary directory created using `os.MkdirTemp`
needs to be removed manually by calling `os.RemoveAll`, which is omitted
in some tests. The error handling boilerplate e.g.
defer func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatal(err)
}
}
is also tedious, but `t.TempDir` handles this for us nicely.
Reference: https://pkg.go.dev/testing#T.TempDir
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* test: fix failing TestSendWrite on Windows
=== FAIL: replications/internal TestSendWrite (0.29s)
logger.go:130: 2022-06-23T13:00:54.290Z DEBUG Created new durable queue for replication stream {"id": "0000000000000001", "path": "C:\\Users\\circleci\\AppData\\Local\\Temp\\TestSendWrite1627281409\\001\\replicationq\\0000000000000001"}
logger.go:130: 2022-06-23T13:00:54.457Z ERROR Error in replication stream {"replication_id": "0000000000000001", "error": "remote timeout", "retries": 1}
testing.go:1090: TempDir RemoveAll cleanup: remove C:\Users\circleci\AppData\Local\Temp\TestSendWrite1627281409\001\replicationq\0000000000000001\1: The process cannot access the file because it is being used by another process.
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* test: fix failing TestStore_BadShard on Windows
=== FAIL: tsdb TestStore_BadShard (0.09s)
logger.go:130: 2022-06-23T12:18:21.827Z INFO Using data dir {"service": "store", "path": "C:\\Users\\circleci\\AppData\\Local\\Temp\\TestStore_BadShard1363295568\\001"}
logger.go:130: 2022-06-23T12:18:21.827Z INFO Compaction settings {"service": "store", "max_concurrent_compactions": 2, "throughput_bytes_per_second": 50331648, "throughput_bytes_per_second_burst": 50331648}
logger.go:130: 2022-06-23T12:18:21.828Z INFO Open store (start) {"service": "store", "op_name": "tsdb_open", "op_event": "start"}
logger.go:130: 2022-06-23T12:18:21.828Z INFO Open store (end) {"service": "store", "op_name": "tsdb_open", "op_event": "end", "op_elapsed": "77.3µs"}
testing.go:1090: TempDir RemoveAll cleanup: remove C:\Users\circleci\AppData\Local\Temp\TestStore_BadShard1363295568\002\data\db0\rp0\1\index\0\L0-00000001.tsl: The process cannot access the file because it is being used by another process.
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* test: fix failing TestPartition_PrependLogFile_Write_Fail and TestPartition_Compact_Write_Fail on Windows
=== FAIL: tsdb/index/tsi1 TestPartition_PrependLogFile_Write_Fail/write_MANIFEST (0.06s)
testing.go:1090: TempDir RemoveAll cleanup: remove C:\Users\circleci\AppData\Local\Temp\TestPartition_PrependLogFile_Write_Failwrite_MANIFEST656030081\002\0\L0-00000003.tsl: The process cannot access the file because it is being used by another process.
--- FAIL: TestPartition_PrependLogFile_Write_Fail/write_MANIFEST (0.06s)
=== FAIL: tsdb/index/tsi1 TestPartition_Compact_Write_Fail/write_MANIFEST (0.08s)
testing.go:1090: TempDir RemoveAll cleanup: remove C:\Users\circleci\AppData\Local\Temp\TestPartition_Compact_Write_Failwrite_MANIFEST3398667527\002\0\L0-00000003.tsl: The process cannot access the file because it is being used by another process.
--- FAIL: TestPartition_Compact_Write_Fail/write_MANIFEST (0.08s)
We must close the open file descriptor otherwise the temporary file
cannot be cleaned up on Windows.
Fixes: 619eb1cae6 ("fix: restore in-memory Manifest on write error")
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* test: fix failing TestReplicationStartMissingQueue on Windows
=== FAIL: TestReplicationStartMissingQueue (1.60s)
logger.go:130: 2023-03-17T10:42:07.269Z DEBUG Created new durable queue for replication stream {"id": "0000000000000001", "path": "C:\\Users\\circleci\\AppData\\Local\\Temp\\TestReplicationStartMissingQueue76668607\\001\\replicationq\\0000000000000001"}
logger.go:130: 2023-03-17T10:42:07.305Z INFO Opened replication stream {"id": "0000000000000001", "path": "C:\\Users\\circleci\\AppData\\Local\\Temp\\TestReplicationStartMissingQueue76668607\\001\\replicationq\\0000000000000001"}
testing.go:1206: TempDir RemoveAll cleanup: remove C:\Users\circleci\AppData\Local\Temp\TestReplicationStartMissingQueue76668607\001\replicationq\0000000000000001\1: The process cannot access the file because it is being used by another process.
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* test: update TestWAL_DiskSize
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* test: fix failing TestWAL_DiskSize on Windows
=== FAIL: tsdb/engine/tsm1 TestWAL_DiskSize (2.65s)
testing.go:1206: TempDir RemoveAll cleanup: remove C:\Users\circleci\AppData\Local\Temp\TestWAL_DiskSize2736073801\001\_00006.wal: The process cannot access the file because it is being used by another process.
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
---------
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2023-03-21 20:22:11 +00:00
|
|
|
tempDir := t.TempDir()
|
2018-10-26 22:07:20 +00:00
|
|
|
|
|
|
|
boltFile := filepath.Join(tempDir, "test", "bolt.db")
|
|
|
|
|
2019-12-04 23:10:23 +00:00
|
|
|
c := bolt.NewClient(zaptest.NewLogger(t))
|
2018-10-26 22:07:20 +00:00
|
|
|
c.Path = boltFile
|
|
|
|
|
|
|
|
if err := c.Open(context.Background()); err != nil {
|
|
|
|
t.Fatalf("unable to create database %s: %v", boltFile, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := c.Close(); err != nil {
|
|
|
|
t.Fatalf("unable to close database %s: %v", boltFile, err)
|
|
|
|
}
|
|
|
|
}
|
2018-12-18 15:44:25 +00:00
|
|
|
|
2019-12-04 23:10:23 +00:00
|
|
|
func NewTestKVStore(t *testing.T) (*bolt.KVStore, func(), error) {
|
2022-04-13 20:24:27 +00:00
|
|
|
f, err := os.CreateTemp("", "influxdata-platform-bolt-")
|
2018-12-18 15:44:25 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, nil, errors.New("unable to open temporary boltdb file")
|
|
|
|
}
|
|
|
|
f.Close()
|
|
|
|
|
|
|
|
path := f.Name()
|
2020-07-28 22:59:45 +00:00
|
|
|
s := bolt.NewKVStore(zaptest.NewLogger(t), path, bolt.WithNoSync)
|
2018-12-18 15:44:25 +00:00
|
|
|
if err := s.Open(context.TODO()); err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
close := func() {
|
|
|
|
s.Close()
|
|
|
|
os.Remove(path)
|
|
|
|
}
|
|
|
|
|
|
|
|
return s, close, nil
|
|
|
|
}
|