Files
Andrey Kumanyaev 5dc7b58fac feat(api)!: give the embedding engine an explicit store and Close
The embedding engine now backs its graph with the SQLite store instead of
an in-memory graph, so it holds a database handle and a write-ahead-log
checkpointer that have to be released. New returns an error because
opening the store can fail, and the new Close is required: it closes the
store and removes the temp directory the zero-config constructor creates.

WithStorePath opts into a store that outlives the process, so an embedder
can index once and query the same graph on later runs.
2026-08-06 01:11:54 +02:00

82 lines
1.9 KiB
Go

package gortex
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func writeSample(t *testing.T) string {
t.Helper()
dir := t.TempDir()
require.NoError(t, os.WriteFile(filepath.Join(dir, "main.go"), []byte(`package main
func Hello() {}
func World() { Hello() }
`), 0o644))
return dir
}
func TestEngine_IndexAndQuery(t *testing.T) {
dir := writeSample(t)
eng, err := New(WithWorkers(1))
require.NoError(t, err)
defer func() { require.NoError(t, eng.Close()) }()
result, err := eng.Index(dir)
require.NoError(t, err)
assert.Equal(t, 1, result.FileCount)
assert.Greater(t, result.NodeCount, 0)
// FindSymbols.
nodes := eng.FindSymbols("Hello")
require.Len(t, nodes, 1)
assert.Equal(t, "Hello", nodes[0].Name)
// Stats.
stats := eng.Stats()
assert.Greater(t, stats.TotalNodes, 0)
assert.Equal(t, stats.TotalNodes, result.NodeCount)
}
func TestEngine_CloseRemovesTemporaryStore(t *testing.T) {
eng, err := New(WithWorkers(1))
require.NoError(t, err)
tmpDir := eng.tmpDir
require.NotEmpty(t, tmpDir)
require.NoError(t, eng.Close())
_, statErr := os.Stat(tmpDir)
assert.True(t, os.IsNotExist(statErr), "temp store directory should be gone after Close")
// Close is idempotent.
require.NoError(t, eng.Close())
}
func TestEngine_WithStorePathPersistsAcrossRuns(t *testing.T) {
dir := writeSample(t)
storePath := filepath.Join(t.TempDir(), "nested", "graph.sqlite")
eng, err := New(WithWorkers(1), WithStorePath(storePath))
require.NoError(t, err)
_, err = eng.Index(dir)
require.NoError(t, err)
require.NoError(t, eng.Close())
_, statErr := os.Stat(storePath)
require.NoError(t, statErr, "store file should survive Close")
reopened, err := New(WithWorkers(1), WithStorePath(storePath))
require.NoError(t, err)
defer func() { require.NoError(t, reopened.Close()) }()
nodes := reopened.FindSymbols("Hello")
require.Len(t, nodes, 1)
assert.Equal(t, "Hello", nodes[0].Name)
}