mirror of
https://github.com/hanzoai/search-go.git
synced 2026-10-30 18:22:58 +00:00
535 lines
13 KiB
Go
535 lines
13 KiB
Go
package integration
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"testing"
|
|
|
|
"github.com/hanzoai/search-go"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestIndex_Delete(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
|
|
type args struct {
|
|
createUid []string
|
|
deleteUid []string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
client meilisearch.ServiceManager
|
|
args args
|
|
}{
|
|
{
|
|
name: "TestIndexDeleteOneIndex",
|
|
client: sv,
|
|
args: args{
|
|
createUid: []string{"TestIndexDeleteOneIndex"},
|
|
deleteUid: []string{"TestIndexDeleteOneIndex"},
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexDeleteOneIndexWithCustomClient",
|
|
client: customSv,
|
|
args: args{
|
|
createUid: []string{"TestIndexDeleteOneIndexWithCustomClient"},
|
|
deleteUid: []string{"TestIndexDeleteOneIndexWithCustomClient"},
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexDeleteMultipleIndex",
|
|
client: sv,
|
|
args: args{
|
|
createUid: []string{
|
|
"TestIndexDeleteMultipleIndex_1",
|
|
"TestIndexDeleteMultipleIndex_2",
|
|
"TestIndexDeleteMultipleIndex_3",
|
|
"TestIndexDeleteMultipleIndex_4",
|
|
"TestIndexDeleteMultipleIndex_5",
|
|
},
|
|
deleteUid: []string{
|
|
"TestIndexDeleteMultipleIndex_1",
|
|
"TestIndexDeleteMultipleIndex_2",
|
|
"TestIndexDeleteMultipleIndex_3",
|
|
"TestIndexDeleteMultipleIndex_4",
|
|
"TestIndexDeleteMultipleIndex_5",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexDeleteNotExistingIndex",
|
|
client: sv,
|
|
args: args{
|
|
createUid: []string{},
|
|
deleteUid: []string{"TestIndexDeleteNotExistingIndex"},
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexDeleteMultipleNotExistingIndex",
|
|
client: sv,
|
|
args: args{
|
|
createUid: []string{},
|
|
deleteUid: []string{
|
|
"TestIndexDeleteMultipleNotExistingIndex_1",
|
|
"TestIndexDeleteMultipleNotExistingIndex_2",
|
|
"TestIndexDeleteMultipleNotExistingIndex_3",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
c := tt.client
|
|
t.Cleanup(cleanup(c))
|
|
|
|
for _, uid := range tt.args.createUid {
|
|
_, err := setUpEmptyIndex(sv, &meilisearch.IndexConfig{Uid: uid})
|
|
require.NoError(t, err, "CreateIndex() in DeleteTest error should be nil")
|
|
}
|
|
for k := range tt.args.deleteUid {
|
|
i := c.Index(tt.args.deleteUid[k])
|
|
gotResp, err := i.Delete(tt.args.deleteUid[k])
|
|
require.True(t, gotResp)
|
|
require.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIndex_GetStats(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
|
|
type args struct {
|
|
UID string
|
|
client meilisearch.ServiceManager
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
statsParam *meilisearch.StatsParams
|
|
wantResp *meilisearch.StatsIndex
|
|
}{
|
|
{
|
|
name: "TestIndexBasicGetStats",
|
|
args: args{
|
|
UID: "TestIndexBasicGetStats",
|
|
client: sv,
|
|
},
|
|
wantResp: &meilisearch.StatsIndex{
|
|
NumberOfDocuments: 6,
|
|
IsIndexing: false,
|
|
FieldDistribution: map[string]int64{"book_id": 6, "title": 6},
|
|
RawDocumentDbSize: float64(4096),
|
|
AvgDocumentSize: float64(674),
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexGetStatsWithCustomClient",
|
|
args: args{
|
|
UID: "TestIndexGetStatsWithCustomClient",
|
|
client: customSv,
|
|
},
|
|
wantResp: &meilisearch.StatsIndex{
|
|
NumberOfDocuments: 6,
|
|
IsIndexing: false,
|
|
FieldDistribution: map[string]int64{"book_id": 6, "title": 6},
|
|
RawDocumentDbSize: float64(4096),
|
|
AvgDocumentSize: float64(674),
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexBasicGetStatsWithRawFormat",
|
|
args: args{
|
|
UID: "TestIndexBasicGetStatsWithRawFormat",
|
|
client: sv,
|
|
},
|
|
statsParam: &meilisearch.StatsParams{
|
|
ShowInternalDatabaseSizes: true,
|
|
SizeFormat: "raw",
|
|
},
|
|
wantResp: &meilisearch.StatsIndex{
|
|
NumberOfDocuments: 6,
|
|
IsIndexing: false,
|
|
FieldDistribution: map[string]int64{"book_id": 6, "title": 6},
|
|
RawDocumentDbSize: float64(4096),
|
|
AvgDocumentSize: float64(674),
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexBasicGetStatsWithHumanFormat",
|
|
args: args{
|
|
UID: "TestIndexBasicGetStatsWithHumanFormat",
|
|
client: sv,
|
|
},
|
|
statsParam: &meilisearch.StatsParams{
|
|
ShowInternalDatabaseSizes: true,
|
|
SizeFormat: "human",
|
|
},
|
|
wantResp: &meilisearch.StatsIndex{
|
|
NumberOfDocuments: 6,
|
|
IsIndexing: false,
|
|
FieldDistribution: map[string]int64{"book_id": 6, "title": 6},
|
|
RawDocumentDbSize: "4 KiB",
|
|
AvgDocumentSize: "674 B",
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
setUpBasicIndex(sv, tt.args.UID)
|
|
c := tt.args.client
|
|
i := c.Index(tt.args.UID)
|
|
t.Cleanup(cleanup(c))
|
|
|
|
gotResp, err := i.GetStats(tt.statsParam)
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.wantResp.NumberOfDocuments, gotResp.NumberOfDocuments)
|
|
require.Equal(t, tt.wantResp.IsIndexing, gotResp.IsIndexing)
|
|
require.Equal(t, tt.wantResp.FieldDistribution, gotResp.FieldDistribution)
|
|
require.Equal(t, tt.wantResp.RawDocumentDbSize, gotResp.RawDocumentDbSize)
|
|
require.Equal(t, tt.wantResp.AvgDocumentSize, gotResp.AvgDocumentSize)
|
|
if tt.statsParam != nil && tt.statsParam.ShowInternalDatabaseSizes {
|
|
require.NotZero(t, gotResp.InternalDatabaseSizes)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_newIndex(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
|
|
type args struct {
|
|
client meilisearch.ServiceManager
|
|
uid string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want meilisearch.IndexManager
|
|
}{
|
|
{
|
|
name: "TestBasicNewIndex",
|
|
args: args{
|
|
client: sv,
|
|
uid: "TestBasicNewIndex",
|
|
},
|
|
want: sv.Index("TestBasicNewIndex"),
|
|
},
|
|
{
|
|
name: "TestNewIndexCustomClient",
|
|
args: args{
|
|
client: sv,
|
|
uid: "TestNewIndexCustomClient",
|
|
},
|
|
want: customSv.Index("TestNewIndexCustomClient"),
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
c := tt.args.client
|
|
t.Cleanup(cleanup(c))
|
|
|
|
gotIdx := c.Index(tt.args.uid)
|
|
|
|
task, err := c.CreateIndex(&meilisearch.IndexConfig{Uid: tt.args.uid})
|
|
require.NoError(t, err)
|
|
|
|
testWaitForIndexTask(t, gotIdx, task)
|
|
|
|
gotIdxResult, err := gotIdx.FetchInfo()
|
|
require.NoError(t, err)
|
|
|
|
wantIdxResult, err := tt.want.FetchInfo()
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, gotIdxResult.UID, wantIdxResult.UID)
|
|
// Timestamps should be empty unless fetched
|
|
require.NotZero(t, gotIdxResult.CreatedAt)
|
|
require.NotZero(t, gotIdxResult.UpdatedAt)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIndex_FetchInfo(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
broken := setup(t, "", meilisearch.WithAPIKey("wrong"))
|
|
|
|
type args struct {
|
|
UID string
|
|
client meilisearch.ServiceManager
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantResp *meilisearch.IndexResult
|
|
}{
|
|
{
|
|
name: "TestIndexBasicFetchInfo",
|
|
args: args{
|
|
UID: "TestIndexBasicFetchInfo",
|
|
client: sv,
|
|
},
|
|
wantResp: &meilisearch.IndexResult{
|
|
UID: "TestIndexBasicFetchInfo",
|
|
PrimaryKey: "book_id",
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexFetchInfoWithCustomClient",
|
|
args: args{
|
|
UID: "TestIndexFetchInfoWithCustomClient",
|
|
client: customSv,
|
|
},
|
|
wantResp: &meilisearch.IndexResult{
|
|
UID: "TestIndexFetchInfoWithCustomClient",
|
|
PrimaryKey: "book_id",
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexFetchInfoWithBrokenClient",
|
|
args: args{
|
|
UID: "TestIndexFetchInfoWithCustomClient",
|
|
client: broken,
|
|
},
|
|
wantResp: nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
setUpBasicIndex(sv, tt.args.UID)
|
|
c := tt.args.client
|
|
t.Cleanup(cleanup(c))
|
|
|
|
i := c.Index(tt.args.UID)
|
|
|
|
gotResp, err := i.FetchInfo()
|
|
|
|
if tt.wantResp == nil {
|
|
require.Error(t, err)
|
|
require.Nil(t, gotResp)
|
|
} else {
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.wantResp.UID, gotResp.UID)
|
|
require.Equal(t, tt.wantResp.PrimaryKey, gotResp.PrimaryKey)
|
|
// Make sure that timestamps are also fetched and are updated
|
|
require.NotZero(t, gotResp.CreatedAt)
|
|
require.NotZero(t, gotResp.UpdatedAt)
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIndex_FetchPrimaryKey(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
|
|
type args struct {
|
|
UID string
|
|
client meilisearch.ServiceManager
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantPrimaryKey string
|
|
}{
|
|
{
|
|
name: "TestIndexBasicFetchPrimaryKey",
|
|
args: args{
|
|
UID: "TestIndexBasicFetchPrimaryKey",
|
|
client: sv,
|
|
},
|
|
wantPrimaryKey: "book_id",
|
|
},
|
|
{
|
|
name: "TestIndexFetchPrimaryKeyWithCustomClient",
|
|
args: args{
|
|
UID: "TestIndexFetchPrimaryKeyWithCustomClient",
|
|
client: customSv,
|
|
},
|
|
wantPrimaryKey: "book_id",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
setUpBasicIndex(tt.args.client, tt.args.UID)
|
|
c := tt.args.client
|
|
i := c.Index(tt.args.UID)
|
|
t.Cleanup(cleanup(c))
|
|
|
|
gotPrimaryKey, err := i.FetchPrimaryKey()
|
|
require.NoError(t, err)
|
|
require.Equal(t, &tt.wantPrimaryKey, gotPrimaryKey)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIndex_UpdateIndex(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
|
|
type args struct {
|
|
params *meilisearch.UpdateIndexRequestParams
|
|
config meilisearch.IndexConfig
|
|
client meilisearch.ServiceManager
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantResp *meilisearch.IndexResult
|
|
}{
|
|
{
|
|
name: "TestIndexBasicUpdateIndex",
|
|
args: args{
|
|
client: sv,
|
|
config: meilisearch.IndexConfig{
|
|
Uid: "indexUID",
|
|
},
|
|
params: &meilisearch.UpdateIndexRequestParams{
|
|
PrimaryKey: "book_id",
|
|
},
|
|
},
|
|
wantResp: &meilisearch.IndexResult{
|
|
UID: "indexUID",
|
|
PrimaryKey: "book_id",
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexUpdateIndexWithCustomClient",
|
|
args: args{
|
|
client: customSv,
|
|
config: meilisearch.IndexConfig{
|
|
Uid: "indexUID",
|
|
},
|
|
params: &meilisearch.UpdateIndexRequestParams{
|
|
PrimaryKey: "book_id",
|
|
},
|
|
},
|
|
wantResp: &meilisearch.IndexResult{
|
|
UID: "indexUID",
|
|
PrimaryKey: "book_id",
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexUpdateRenameIndex",
|
|
args: args{
|
|
client: customSv,
|
|
config: meilisearch.IndexConfig{
|
|
Uid: "indexUID",
|
|
},
|
|
params: &meilisearch.UpdateIndexRequestParams{
|
|
UID: "RenamedIndexUID",
|
|
},
|
|
},
|
|
wantResp: &meilisearch.IndexResult{
|
|
UID: "indexUID",
|
|
PrimaryKey: "",
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
c := tt.args.client
|
|
t.Cleanup(cleanup(c))
|
|
|
|
i, err := setUpEmptyIndex(tt.args.client, &tt.args.config)
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.args.config.Uid, i.UID)
|
|
// Store original timestamps
|
|
createdAt := i.CreatedAt
|
|
updatedAt := i.UpdatedAt
|
|
|
|
gotResp, err := i.UpdateIndex(tt.args.params)
|
|
require.NoError(t, err)
|
|
|
|
_, err = c.WaitForTask(gotResp.TaskUID, 0)
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.wantResp.UID, gotResp.IndexUID)
|
|
|
|
var indexUID string
|
|
indexRenamed := tt.args.params.UID != ""
|
|
if indexRenamed {
|
|
indexUID = tt.args.params.UID
|
|
} else {
|
|
indexUID = tt.args.config.Uid
|
|
}
|
|
gotIndex, err := c.GetIndex(indexUID)
|
|
require.NoError(t, err)
|
|
require.Equal(t, tt.wantResp.PrimaryKey, gotIndex.PrimaryKey)
|
|
// Make sure that timestamps were correctly updated as well
|
|
require.Equal(t, createdAt, gotIndex.CreatedAt)
|
|
require.NotEqual(t, updatedAt, gotIndex.UpdatedAt)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIndexManagerAndReaders(t *testing.T) {
|
|
c := setup(t, "")
|
|
idx := c.Index("indexUID")
|
|
require.NotNil(t, idx)
|
|
require.NotNil(t, idx.GetIndexReader())
|
|
require.NotNil(t, idx.GetTaskReader())
|
|
require.NotNil(t, idx.GetSettingsManager())
|
|
require.NotNil(t, idx.GetSettingsReader())
|
|
require.NotNil(t, idx.GetSearch())
|
|
require.NotNil(t, idx.GetDocumentManager())
|
|
require.NotNil(t, idx.GetDocumentReader())
|
|
}
|
|
|
|
func TestIndex_Compact(t *testing.T) {
|
|
sv := setup(t, "")
|
|
customSv := setup(t, "", meilisearch.WithCustomClientWithTLS(&tls.Config{
|
|
InsecureSkipVerify: true,
|
|
}))
|
|
|
|
tests := []struct {
|
|
name string
|
|
client meilisearch.ServiceManager
|
|
wantTask *meilisearch.TaskInfo
|
|
}{
|
|
{
|
|
name: "TestIndexCompact",
|
|
client: sv,
|
|
wantTask: &meilisearch.TaskInfo{
|
|
TaskUID: 1,
|
|
},
|
|
},
|
|
{
|
|
name: "TestIndexCompactWithCustomClient",
|
|
client: customSv,
|
|
wantTask: &meilisearch.TaskInfo{
|
|
TaskUID: 1,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Cleanup(cleanup(tt.client))
|
|
idx := setupMovieIndex(t, tt.client, "movies")
|
|
gotTask, err := idx.Compact()
|
|
require.NoError(t, err)
|
|
require.GreaterOrEqual(t, gotTask.TaskUID, tt.wantTask.TaskUID)
|
|
testWaitForIndexTask(t, idx, gotTask)
|
|
})
|
|
}
|
|
}
|