From 2afe2b828f2ec7db274fe3592a757c1a9ef0488c Mon Sep 17 00:00:00 2001 From: ThreadDao Date: Fri, 21 Jun 2024 18:26:10 +0800 Subject: [PATCH] test: fix error check and some cases Signed-off-by: ThreadDao --- tests/go_client/common/response_checker.go | 26 ++++--- tests/go_client/go.mod | 8 +- tests/go_client/go.sum | 6 +- tests/go_client/testcases/collection_test.go | 11 +-- .../go_client/testcases/helper/data_helper.go | 12 +-- tests/go_client/testcases/helper/helper.go | 4 +- tests/go_client/testcases/query_test.go | 76 ++++++++++--------- 7 files changed, 73 insertions(+), 70 deletions(-) diff --git a/tests/go_client/common/response_checker.go b/tests/go_client/common/response_checker.go index e81945eab17c..08849b729468 100644 --- a/tests/go_client/common/response_checker.go +++ b/tests/go_client/common/response_checker.go @@ -2,6 +2,7 @@ package common import ( "fmt" + "reflect" "strings" "testing" @@ -32,7 +33,7 @@ func CheckErr(t *testing.T, actualErr error, expErrNil bool, expErrorMsg ...stri } } if !contains { - t.FailNow() + t.Fatalf("CheckErr failed, actualErr doesn contains any expErrorMsg, please check test cases!") } } } @@ -62,9 +63,11 @@ func EqualColumn(t *testing.T, columnA column.Column, columnB column.Column) { case entity.FieldTypeJSON: log.Debug("data", zap.String("name", columnA.Name()), zap.Any("type", columnA.Type()), zap.Any("data", columnA.FieldData())) log.Debug("data", zap.String("name", columnB.Name()), zap.Any("type", columnB.Type()), zap.Any("data", columnB.FieldData())) - if columnA.FieldData().IsDynamic { + require.Equal(t, reflect.TypeOf(columnA), reflect.TypeOf(columnB)) + switch columnA.(type) { + case *column.ColumnDynamic: require.ElementsMatch(t, columnA.(*column.ColumnDynamic).Data(), columnB.(*column.ColumnDynamic).Data()) - } else { + case *column.ColumnJSONBytes: require.ElementsMatch(t, columnA.(*column.ColumnJSONBytes).Data(), columnB.(*column.ColumnJSONBytes).Data()) } case entity.FieldTypeFloatVector: @@ -80,10 +83,12 @@ func EqualColumn(t *testing.T, columnA column.Column, columnB column.Column) { case entity.FieldTypeArray: EqualArrayColumn(t, columnA, columnB) default: - log.Info("Support column type is:", zap.Any("FieldType", []entity.FieldType{entity.FieldTypeBool, + log.Info("Support column type is:", zap.Any("FieldType", []entity.FieldType{ + entity.FieldTypeBool, entity.FieldTypeInt8, entity.FieldTypeInt16, entity.FieldTypeInt32, entity.FieldTypeInt64, entity.FieldTypeFloat, entity.FieldTypeDouble, entity.FieldTypeString, - entity.FieldTypeVarChar, entity.FieldTypeArray, entity.FieldTypeFloatVector, entity.FieldTypeBinaryVector})) + entity.FieldTypeVarChar, entity.FieldTypeArray, entity.FieldTypeFloatVector, entity.FieldTypeBinaryVector, + })) } } @@ -110,8 +115,10 @@ func EqualArrayColumn(t *testing.T, columnA column.Column, columnB column.Column case *column.ColumnVarCharArray: require.ElementsMatch(t, columnA.(*column.ColumnVarCharArray).Data(), columnB.(*column.ColumnVarCharArray).Data()) default: - log.Info("Support array element type is:", zap.Any("FieldType", []entity.FieldType{entity.FieldTypeBool, entity.FieldTypeInt8, entity.FieldTypeInt16, - entity.FieldTypeInt32, entity.FieldTypeInt64, entity.FieldTypeFloat, entity.FieldTypeDouble, entity.FieldTypeVarChar})) + log.Info("Support array element type is:", zap.Any("FieldType", []entity.FieldType{ + entity.FieldTypeBool, entity.FieldTypeInt8, entity.FieldTypeInt16, + entity.FieldTypeInt32, entity.FieldTypeInt64, entity.FieldTypeFloat, entity.FieldTypeDouble, entity.FieldTypeVarChar, + })) } } @@ -137,6 +144,7 @@ func CheckOutputFields(t *testing.T, expFields []string, actualColumns []column. for _, actualColumn := range actualColumns { actualFields = append(actualFields, actualColumn.Name()) } + log.Debug("CheckOutputFields", zap.Any("expFields", expFields), zap.Any("actualFields", actualFields)) require.ElementsMatchf(t, expFields, actualFields, fmt.Sprintf("Expected search output fields: %v, actual: %v", expFields, actualFields)) } @@ -150,7 +158,7 @@ func CheckSearchResult(t *testing.T, actualSearchResults []clientv2.ResultSet, e } // CheckQueryResult check query result, column name, type and field -func CheckQueryResult(t *testing.T, expColumns []column.Column, actualColumns []column.Column) { +func CheckQueryResult(t *testing.T, expColumns []column.Column, actualColumns []column.Column) { require.Equal(t, len(actualColumns), len(expColumns), "The len of actual columns %d should greater or equal to the expected columns %d", len(actualColumns), len(expColumns)) for _, expColumn := range expColumns { @@ -161,7 +169,7 @@ func CheckQueryResult(t *testing.T, expColumns []column.Column, actualColumns [ EqualColumn(t, expColumn, actualColumn) } } - if !exist{ + if !exist { log.Error("CheckQueryResult actualColumns no column", zap.String("name", expColumn.Name())) } } diff --git a/tests/go_client/go.mod b/tests/go_client/go.mod index 4a5797662f8b..8885a3d0d966 100644 --- a/tests/go_client/go.mod +++ b/tests/go_client/go.mod @@ -5,15 +5,16 @@ go 1.21 toolchain go1.21.10 require ( - github.com/milvus-io/milvus/client/v2 v2.0.0-20240612020955-8cb350598c9a + github.com/milvus-io/milvus/client/v2 v2.0.0-20240621033600-e653ad27e2d5 github.com/milvus-io/milvus/pkg v0.0.2-0.20240317152703-17b4938985f3 + github.com/quasilyte/go-ruleguard/dsl v0.3.22 github.com/stretchr/testify v1.9.0 github.com/x448/float16 v0.8.4 go.uber.org/zap v1.27.0 google.golang.org/grpc v1.64.0 ) -//replace github.com/milvus-io/milvus/client/v2 v2.0.0-20240612020955-8cb350598c9a => ../../../milvus/client +//replace github.com/milvus-io/milvus/client/v2 v2.0.0-20240621033600-e653ad27e2d5 => ../../../milvus/client require ( github.com/beorn7/perks v1.0.1 // indirect @@ -55,7 +56,7 @@ require ( github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/magiconair/properties v1.8.5 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240430035521-259ae1d10016 // indirect + github.com/milvus-io/milvus-proto/go-api/v2 v2.4.3 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -69,7 +70,6 @@ require ( github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect - github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/samber/lo v1.27.0 // indirect github.com/shirou/gopsutil/v3 v3.22.9 // indirect diff --git a/tests/go_client/go.sum b/tests/go_client/go.sum index b06193ef72e7..2426e346bc3c 100644 --- a/tests/go_client/go.sum +++ b/tests/go_client/go.sum @@ -401,8 +401,10 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfr github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240430035521-259ae1d10016 h1:8WV4maXLeGEyJCCYIc1DmZ18H+VFAjMrwXJg5iI2nX4= -github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240430035521-259ae1d10016/go.mod h1:1OIl0v5PQeNxIJhCvY+K55CBUOYDZevw9g9380u1Wek= +github.com/milvus-io/milvus-proto/go-api/v2 v2.4.3 h1:KUSaWVePVlHMIluAXf2qmNffI1CMlGFLLiP+4iy9014= +github.com/milvus-io/milvus-proto/go-api/v2 v2.4.3/go.mod h1:1OIl0v5PQeNxIJhCvY+K55CBUOYDZevw9g9380u1Wek= +github.com/milvus-io/milvus/client/v2 v2.0.0-20240621033600-e653ad27e2d5 h1:KNE4Smy6HxIpoJHLpds5BI2ZyvhrE5FcLhUcsjxAxAk= +github.com/milvus-io/milvus/client/v2 v2.0.0-20240621033600-e653ad27e2d5/go.mod h1:thfuEkUztRRmQ+qu4hCoO/6uxDJoUVNNx4vHqx9yh5I= github.com/milvus-io/milvus/pkg v0.0.2-0.20240317152703-17b4938985f3 h1:ZBpRWhBa7FTFxW4YYVv9AUESoW1Xyb3KNXTzTqfkZmw= github.com/milvus-io/milvus/pkg v0.0.2-0.20240317152703-17b4938985f3/go.mod h1:jQ2BUZny1COsgv1Qbcv8dmbppW+V9J/c4YQZNb3EOm8= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= diff --git a/tests/go_client/testcases/collection_test.go b/tests/go_client/testcases/collection_test.go index c106cb28af4f..645aebbd2a15 100644 --- a/tests/go_client/testcases/collection_test.go +++ b/tests/go_client/testcases/collection_test.go @@ -200,7 +200,7 @@ func TestCreateArrayCollections(t *testing.T) { // test create collection with partition key not supported field type func TestCreateCollectionPartitionKey(t *testing.T) { - ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) + ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout*2) mc := createDefaultMilvusClient(ctx, t) int64Field := entity.NewField().WithName(common.DefaultInt64FieldName).WithDataType(entity.FieldTypeInt64).WithIsPrimaryKey(true) @@ -421,7 +421,7 @@ func TestCreateCollectionWithValidName(t *testing.T) { func TestCreateCollectionWithInvalidFieldName(t *testing.T) { t.Parallel() // connect - ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) + ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout*2) mc := createDefaultMilvusClient(ctx, t) // create collection with invalid field name @@ -436,7 +436,8 @@ func TestCreateCollectionWithInvalidFieldName(t *testing.T) { common.CheckErr(t, err, false, "field name should not be empty", "The first character of a field name must be an underscore or letter", "Field name cannot only contain numbers, letters, and underscores", - "The length of a field name must be less than 255 characters") + "The length of a field name must be less than 255 characters", + "Field name can only contain numbers, letters, and underscores") } } @@ -515,7 +516,7 @@ func TestCreateCollectionInvalidFields(t *testing.T) { // create autoID or not collection with non-int64 and non-varchar field func TestCreateCollectionInvalidAutoPkField(t *testing.T) { - ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) + ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout*2) mc := createDefaultMilvusClient(ctx, t) t.Parallel() // create collection with autoID true or not @@ -557,7 +558,7 @@ func TestCreateCollectionDuplicateField(t *testing.T) { // test create collection with partition key not supported field type func TestCreateCollectionInvalidPartitionKeyType(t *testing.T) { - ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) + ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout*2) mc := createDefaultMilvusClient(ctx, t) int64Field := entity.NewField().WithName(common.DefaultInt64FieldName).WithDataType(entity.FieldTypeInt64).WithIsPrimaryKey(true) diff --git a/tests/go_client/testcases/helper/data_helper.go b/tests/go_client/testcases/helper/data_helper.go index 6d391a841ed0..a6ef4364d009 100644 --- a/tests/go_client/testcases/helper/data_helper.go +++ b/tests/go_client/testcases/helper/data_helper.go @@ -409,17 +409,7 @@ func MergeColumnsToDynamic(nb int, columns []column.Column, columnName string) * } values = append(values, bs) } - jsonColumn := column.NewColumnJSONBytes(columnName, values) - - var jsonData []string - for i := 0; i < jsonColumn.Len(); i++ { - line, err := jsonColumn.GetAsString(i) - if err != nil { - log.Error("MergeColumnsToDynamic", zap.Error(err)) - } - jsonData = append(jsonData, line) - } - jsonColumn.WithIsDynamic(true) + jsonColumn := column.NewColumnJSONBytes(columnName, values).WithIsDynamic(true) return jsonColumn } diff --git a/tests/go_client/testcases/helper/helper.go b/tests/go_client/testcases/helper/helper.go index 9b01db9045e2..079467e813c8 100644 --- a/tests/go_client/testcases/helper/helper.go +++ b/tests/go_client/testcases/helper/helper.go @@ -136,11 +136,11 @@ func (chainTask *CollectionPrepare) InsertData(ctx context.Context, t *testing.T } fields := ip.Schema.Fields insertOpt := clientv2.NewColumnBasedInsertOption(ip.Schema.CollectionName) - if ip.Schema.EnableDynamicField{ + if ip.Schema.EnableDynamicField { insertOpt.WithColumns(GenDynamicColumnData(option.start, ip.Nb)...) } for _, field := range fields { - if field.DataType == entity.FieldTypeArray{ + if field.DataType == entity.FieldTypeArray { option.TWithElementType(field.ElementType) } column := GenColumnData(ip.Nb, field.DataType, *option) diff --git a/tests/go_client/testcases/query_test.go b/tests/go_client/testcases/query_test.go index e4dc3b93af4e..da7c4a29b7d9 100644 --- a/tests/go_client/testcases/query_test.go +++ b/tests/go_client/testcases/query_test.go @@ -2,15 +2,16 @@ package testcases import ( "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" + "go.uber.org/zap" + clientv2 "github.com/milvus-io/milvus/client/v2" "github.com/milvus-io/milvus/client/v2/column" "github.com/milvus-io/milvus/client/v2/entity" "github.com/milvus-io/milvus/pkg/log" - "github.com/stretchr/testify/require" - "go.uber.org/zap" - "testing" - "time" - "github.com/milvus-io/milvus/tests/go_client/common" hp "github.com/milvus-io/milvus/tests/go_client/testcases/helper" ) @@ -29,7 +30,7 @@ func TestQueryDefault(t *testing.T) { prepare.CreateIndex(ctx, t, mc, hp.NewIndexParams(schema)) prepare.Load(ctx, t, mc, hp.NewLoadParams(schema.CollectionName)) - //query + // query expr := fmt.Sprintf("%s < %d", common.DefaultInt64FieldName, 100) queryRes, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr)) common.CheckErr(t, err, true) @@ -49,7 +50,7 @@ func TestQueryVarcharPkDefault(t *testing.T) { prepare.CreateIndex(ctx, t, mc, hp.NewIndexParams(schema)) prepare.Load(ctx, t, mc, hp.NewLoadParams(schema.CollectionName)) - //query + // query expr := fmt.Sprintf("%s in ['0', '1', '2', '3', '4']", common.DefaultVarcharFieldName) queryRes, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr)) common.CheckErr(t, err, true) @@ -61,7 +62,7 @@ func TestQueryNotExistName(t *testing.T) { ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) mc := createDefaultMilvusClient(ctx, t) - //query with not existed collection + // query with not existed collection expr := fmt.Sprintf("%s < %d", common.DefaultInt64FieldName, 100) _, errCol := mc.Query(ctx, clientv2.NewQueryOption("aaa").WithFilter(expr)) common.CheckErr(t, errCol, false, "can't find collection") @@ -71,7 +72,7 @@ func TestQueryNotExistName(t *testing.T) { prepare.CreateIndex(ctx, t, mc, hp.NewIndexParams(schema)) prepare.Load(ctx, t, mc, hp.NewLoadParams(schema.CollectionName)) - //query with not existed partition + // query with not existed partition _, errPar := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr).WithPartitions([]string{"aaa"})) common.CheckErr(t, errPar, false, "partition name aaa not found") } @@ -84,10 +85,9 @@ func TestQueryInvalidPartitionName(t *testing.T) { // create collection and partition _, schema := hp.CollPrepare.CreateCollection(ctx, t, mc, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption().TWithEnableDynamicField(true)) - expr := fmt.Sprintf("%s >= %d", common.DefaultInt64FieldName, 0) emptyPartitionName := "" - //query from "" partitions, expect to query from default partition + // query from "" partitions, expect to query from default partition _, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr).WithPartitions([]string{emptyPartitionName})) common.CheckErr(t, err, false, "Partition name should not be empty") } @@ -113,16 +113,15 @@ func TestQueryPartition(t *testing.T) { prepare.CreateIndex(ctx, t, mc, hp.NewIndexParams(schema)) prepare.Load(ctx, t, mc, hp.NewLoadParams(schema.CollectionName)) - expr := fmt.Sprintf("%s >= %d", common.DefaultInt64FieldName, 0) expColumn := hp.GenColumnData(common.DefaultNb*2, entity.FieldTypeInt64, *hp.TNewDataOption().TWithStart(0)) - //query with default params, expect to query from all partitions + // query with default params, expect to query from all partitions queryRes, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr).WithConsistencyLevel(entity.ClStrong)) common.CheckErr(t, err, true) common.CheckQueryResult(t, queryRes.Fields, []column.Column{expColumn}) - //query with empty partition names + // query with empty partition names queryRes, err = mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr).WithPartitions([]string{}).WithConsistencyLevel(entity.ClStrong)) common.CheckErr(t, err, true) common.CheckQueryResult(t, queryRes.Fields, []column.Column{expColumn}) @@ -137,7 +136,7 @@ func TestQueryPartition(t *testing.T) { common.CheckErr(t, err, true) common.CheckQueryResult(t, queryRes.Fields, []column.Column{i2Res.IDs}) - //query with all partitions + // query with all partitions queryRes, err = mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr).WithPartitions([]string{common.DefaultPartition, parName}).WithConsistencyLevel(entity.ClStrong)) common.CheckErr(t, err, true) common.CheckQueryResult(t, queryRes.Fields, []column.Column{expColumn}) @@ -151,11 +150,11 @@ func TestQueryWithoutExpr(t *testing.T) { // create collection and partition _, schema := hp.CollPrepare.CreateCollection(ctx, t, mc, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) - //query without expr + // query without expr _, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName)) common.CheckErr(t, err, false, "empty expression should be used with limit") - //query with empty expr + // query with empty expr _, err = mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter("")) common.CheckErr(t, err, false, "empty expression should be used with limit") } @@ -167,7 +166,7 @@ func TestQueryEmptyOutputFields(t *testing.T) { ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) mc := createDefaultMilvusClient(ctx, t) - for _, enableDynamic := range []bool{true, false} { + for _, enableDynamic := range [2]bool{true, false} { // create -> insert -> flush -> index -> load prepare, schema := hp.CollPrepare.CreateCollection(ctx, t, mc, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption().TWithEnableDynamicField(enableDynamic)) prepare.InsertData(ctx, t, mc, hp.NewInsertParams(schema, common.DefaultNb), hp.TNewDataOption()) @@ -177,12 +176,12 @@ func TestQueryEmptyOutputFields(t *testing.T) { expr := fmt.Sprintf("%s < %d", common.DefaultInt64FieldName, 10) - //query with empty output fields []string{}-> output "int64" + // query with empty output fields []string{}-> output "int64" queryNilOutputs, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong).WithFilter(expr).WithOutputFields([]string{})) common.CheckErr(t, err, true) common.CheckOutputFields(t, []string{common.DefaultInt64FieldName}, queryNilOutputs.Fields) - //query with empty output fields []string{""}-> output "int64" and dynamic field + // query with empty output fields []string{""}-> output "int64" and dynamic field _, err1 := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong).WithFilter(expr).WithOutputFields([]string{""})) if enableDynamic { common.CheckErr(t, err1, false, "parse output field name failed") @@ -190,12 +189,12 @@ func TestQueryEmptyOutputFields(t *testing.T) { common.CheckErr(t, err1, false, "not exist") } - //query with empty not existed field -> output field as dynamic or error + // query with empty not existed field -> output field as dynamic or error fakeName := "aaa" res, err2 := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong).WithFilter(expr).WithOutputFields([]string{fakeName})) if enableDynamic { common.CheckErr(t, err2, true) - for _, c := range res.Fields{ + for _, c := range res.Fields { log.Debug("data", zap.String("name", c.Name()), zap.Any("type", c.Type()), zap.Any("data", c.FieldData())) } common.CheckOutputFields(t, []string{common.DefaultInt64FieldName, fakeName}, res.Fields) @@ -218,7 +217,7 @@ func TestOutputAllFieldsColumn(t *testing.T) { mc := createDefaultMilvusClient(ctx, t) // create collection - for _, isDynamic := range [2]bool{true} { + for _, isDynamic := range [2]bool{true, false} { prepare, schema := hp.CollPrepare.CreateCollection(ctx, t, mc, hp.NewCreateCollectionParams(hp.AllFields), hp.TNewFieldsOption(), hp.TNewSchemaOption().TWithEnableDynamicField(isDynamic)) prepare.CreateIndex(ctx, t, mc, hp.NewIndexParams(schema)) prepare.Load(ctx, t, mc, hp.NewLoadParams(schema.CollectionName)) @@ -227,18 +226,21 @@ func TestOutputAllFieldsColumn(t *testing.T) { columns := make([]column.Column, 0, len(schema.Fields)+1) dynamicColumns := hp.GenDynamicColumnData(0, common.DefaultNb) genDataOpt := hp.TNewDataOption().TWithMaxCapacity(common.TestCapacity) + insertOpt := clientv2.NewColumnBasedInsertOption(schema.CollectionName) for _, field := range schema.Fields { - if field.DataType == entity.FieldTypeArray{ + if field.DataType == entity.FieldTypeArray { genDataOpt.TWithElementType(field.ElementType) } columns = append(columns, hp.GenColumnData(common.DefaultNb, field.DataType, *genDataOpt.TWithDim(common.DefaultDim))) } - ids, err := mc.Insert(ctx, clientv2.NewColumnBasedInsertOption(schema.CollectionName, columns...).WithColumns(dynamicColumns...)) + if isDynamic { + insertOpt.WithColumns(dynamicColumns...) + } + ids, err := mc.Insert(ctx, insertOpt.WithColumns(columns...)) common.CheckErr(t, err, true) require.Equal(t, int64(common.DefaultNb), ids.InsertCount) prepare.FlushData(ctx, t, mc, schema.CollectionName) - // query output all fields -> output all fields, includes vector and $meta field pos := 10 allFieldsName := make([]string, 0, len(schema.Fields)) @@ -249,7 +251,7 @@ func TestOutputAllFieldsColumn(t *testing.T) { allFieldsName = append(allFieldsName, common.DefaultDynamicFieldName) } queryResultAll, errQuery := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong). - WithFilter(fmt.Sprintf("%s < %d", common.DefaultInt64FieldName, pos)).WithOutputFields([]string{"*"})) + WithFilter(fmt.Sprintf("%s < %d", common.DefaultInt64FieldName, pos)).WithOutputFields([]string{"*"})) common.CheckErr(t, errQuery, true) common.CheckOutputFields(t, allFieldsName, queryResultAll.Fields) @@ -318,7 +320,7 @@ func TestQueryOutputBinaryAndVarchar(t *testing.T) { // query output all fields -> output all fields, includes vector and $meta field expr := fmt.Sprintf("%s in ['0', '1', '2', '3', '4', '5'] ", common.DefaultVarcharFieldName) - allFieldsName :=[]string{common.DefaultVarcharFieldName, common.DefaultBinaryVecFieldName, common.DefaultDynamicFieldName} + allFieldsName := []string{common.DefaultVarcharFieldName, common.DefaultBinaryVecFieldName, common.DefaultDynamicFieldName} queryResultAll, errQuery := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong). WithFilter(expr).WithOutputFields([]string{"*"})) common.CheckErr(t, errQuery, true) @@ -354,7 +356,7 @@ func TestQueryOutputSparse(t *testing.T) { // query output all fields -> output all fields, includes vector and $meta field expr := fmt.Sprintf("%s < 100 ", common.DefaultInt64FieldName) - expFieldsName :=[]string{common.DefaultInt64FieldName, common.DefaultVarcharFieldName, common.DefaultSparseVecFieldName} + expFieldsName := []string{common.DefaultInt64FieldName, common.DefaultVarcharFieldName, common.DefaultSparseVecFieldName} queryResultAll, errQuery := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong).WithFilter(expr).WithOutputFields([]string{"*"})) common.CheckErr(t, errQuery, true) common.CheckOutputFields(t, expFieldsName, queryResultAll.Fields) @@ -377,12 +379,12 @@ func TestQueryArrayDifferentLenBetweenRows(t *testing.T) { prepare.Load(ctx, t, mc, hp.NewLoadParams(schema.CollectionName)) // insert 2 batch with array capacity 100 and 200 - for i := 0; i< 2; i++ { + for i := 0; i < 2; i++ { columns := make([]column.Column, 0, len(schema.Fields)) // each batch has different array capacity - genDataOpt := hp.TNewDataOption().TWithMaxCapacity(common.TestCapacity*(i+1)).TWithStart(common.DefaultNb*i) + genDataOpt := hp.TNewDataOption().TWithMaxCapacity(common.TestCapacity * (i + 1)).TWithStart(common.DefaultNb * i) for _, field := range schema.Fields { - if field.DataType == entity.FieldTypeArray{ + if field.DataType == entity.FieldTypeArray { genDataOpt.TWithElementType(field.ElementType) } columns = append(columns, hp.GenColumnData(common.DefaultNb, field.DataType, *genDataOpt)) @@ -428,13 +430,13 @@ func TestQueryJsonDynamicExpr(t *testing.T) { expr := fmt.Sprintf("%s['number'] < 10 || %s < 10", common.DefaultJSONFieldName, common.DefaultDynamicNumberField) queryRes, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithFilter(expr).WithConsistencyLevel(entity.ClStrong). - WithOutputFields([]string{common.DefaultJSONFieldName, common.DefaultDynamicFieldName})) + WithOutputFields([]string{common.DefaultJSONFieldName, common.DefaultDynamicFieldName})) // verify output fields and count, dynamicNumber value common.CheckErr(t, err, true) common.CheckOutputFields(t, []string{common.DefaultInt64FieldName, common.DefaultJSONFieldName, common.DefaultDynamicFieldName}, queryRes.Fields) require.Equal(t, 10, queryRes.ResultCount) - for _, _column := range queryRes.Fields{ + for _, _column := range queryRes.Fields { if _column.Name() == common.DefaultDynamicNumberField { var numberData []int64 for i := 0; i < _column.Len(); i++ { @@ -512,7 +514,7 @@ func TestQueryCountJsonDynamicExpr(t *testing.T) { // key exist {expr: fmt.Sprintf("exists %s['list']", common.DefaultJSONFieldName), count: common.DefaultNb / 4}, - {expr: fmt.Sprintf("exists a "), count: 0}, + {expr: "exists a ", count: 0}, {expr: fmt.Sprintf("exists %s ", common.DefaultDynamicListField), count: common.DefaultNb}, {expr: fmt.Sprintf("exists %s ", common.DefaultDynamicStringField), count: common.DefaultNb}, // data type not match and no error @@ -603,8 +605,8 @@ func TestQueryOutputInvalidOutputFieldCount(t *testing.T) { for _, invalidCount := range invalidOutputFieldCount { queryExpr := fmt.Sprintf("%s >= 0", common.DefaultInt64FieldName) - //query with empty output fields []string{}-> output "int64" + // query with empty output fields []string{}-> output "int64" _, err := mc.Query(ctx, clientv2.NewQueryOption(schema.CollectionName).WithConsistencyLevel(entity.ClStrong).WithFilter(queryExpr).WithOutputFields([]string{invalidCount.countField})) common.CheckErr(t, err, false, invalidCount.errMsg) } -} \ No newline at end of file +}