-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: add cases got gosdk v2 search and databases (#34204)
- Loading branch information
Showing
11 changed files
with
1,337 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,281 @@ | ||
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/pkg/log" | ||
"github.com/milvus-io/milvus/tests/go_client/base" | ||
"github.com/milvus-io/milvus/tests/go_client/common" | ||
hp "github.com/milvus-io/milvus/tests/go_client/testcases/helper" | ||
) | ||
|
||
// teardownTest | ||
func teardownTest(t *testing.T) func(t *testing.T) { | ||
log.Info("setup test func") | ||
return func(t *testing.T) { | ||
log.Info("teardown func drop all non-default db") | ||
// drop all db | ||
ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) | ||
mc := createDefaultMilvusClient(ctx, t) | ||
dbs, _ := mc.ListDatabases(ctx, clientv2.NewListDatabaseOption()) | ||
for _, db := range dbs { | ||
if db != common.DefaultDb { | ||
_ = mc.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(db)) | ||
collections, _ := mc.ListCollections(ctx, clientv2.NewListCollectionOption()) | ||
for _, coll := range collections { | ||
_ = mc.DropCollection(ctx, clientv2.NewDropCollectionOption(coll)) | ||
} | ||
_ = mc.DropDatabase(ctx, clientv2.NewDropDatabaseOption(db)) | ||
} | ||
} | ||
} | ||
} | ||
|
||
func TestDatabase(t *testing.T) { | ||
teardownSuite := teardownTest(t) | ||
defer teardownSuite(t) | ||
|
||
ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) | ||
clientDefault := createMilvusClient(ctx, t, &defaultCfg) | ||
|
||
// create db1 | ||
dbName1 := common.GenRandomString("db1", 4) | ||
err := clientDefault.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(dbName1)) | ||
common.CheckErr(t, err, true) | ||
|
||
// list db and verify db1 in dbs | ||
dbs, errList := clientDefault.ListDatabases(ctx, clientv2.NewListDatabaseOption()) | ||
common.CheckErr(t, errList, true) | ||
require.Containsf(t, dbs, dbName1, fmt.Sprintf("%s db not in dbs: %v", dbName1, dbs)) | ||
|
||
// new client with db1 -> using db | ||
clientDB1 := createMilvusClient(ctx, t, &clientv2.ClientConfig{Address: *addr, DBName: dbName1}) | ||
t.Log("https://github.com/milvus-io/milvus/issues/34137") | ||
err = clientDB1.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(dbName1)) | ||
common.CheckErr(t, err, true) | ||
|
||
// create collections -> verify collections contains | ||
_, db1Col1 := hp.CollPrepare.CreateCollection(ctx, t, clientDB1, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
_, db1Col2 := hp.CollPrepare.CreateCollection(ctx, t, clientDB1, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
collections, errListCollections := clientDB1.ListCollections(ctx, clientv2.NewListCollectionOption()) | ||
common.CheckErr(t, errListCollections, true) | ||
require.Containsf(t, collections, db1Col1.CollectionName, fmt.Sprintf("The collection %s not in: %v", db1Col1.CollectionName, collections)) | ||
require.Containsf(t, collections, db1Col2.CollectionName, fmt.Sprintf("The collection %s not in: %v", db1Col2.CollectionName, collections)) | ||
|
||
// create db2 | ||
dbName2 := common.GenRandomString("db2", 4) | ||
err = clientDefault.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(dbName2)) | ||
common.CheckErr(t, err, true) | ||
dbs, err = clientDefault.ListDatabases(ctx, clientv2.NewListDatabaseOption()) | ||
common.CheckErr(t, err, true) | ||
require.Containsf(t, dbs, dbName2, fmt.Sprintf("%s db not in dbs: %v", dbName2, dbs)) | ||
|
||
// using db2 -> create collection -> drop collection | ||
err = clientDefault.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(dbName2)) | ||
common.CheckErr(t, err, true) | ||
_, db2Col1 := hp.CollPrepare.CreateCollection(ctx, t, clientDefault, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
err = clientDefault.DropCollection(ctx, clientv2.NewDropCollectionOption(db2Col1.CollectionName)) | ||
common.CheckErr(t, err, true) | ||
|
||
// using empty db -> drop db2 | ||
clientDefault.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption("")) | ||
err = clientDefault.DropDatabase(ctx, clientv2.NewDropDatabaseOption(dbName2)) | ||
common.CheckErr(t, err, true) | ||
|
||
// list db and verify db drop success | ||
dbs, err = clientDefault.ListDatabases(ctx, clientv2.NewListDatabaseOption()) | ||
common.CheckErr(t, err, true) | ||
require.NotContains(t, dbs, dbName2) | ||
|
||
// drop db1 which has some collections | ||
err = clientDB1.DropDatabase(ctx, clientv2.NewDropDatabaseOption(dbName1)) | ||
common.CheckErr(t, err, false, "must drop all collections before drop database") | ||
|
||
// drop all db1's collections -> drop db1 | ||
clientDB1.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(dbName1)) | ||
err = clientDB1.DropCollection(ctx, clientv2.NewDropCollectionOption(db1Col1.CollectionName)) | ||
common.CheckErr(t, err, true) | ||
|
||
err = clientDB1.DropCollection(ctx, clientv2.NewDropCollectionOption(db1Col2.CollectionName)) | ||
common.CheckErr(t, err, true) | ||
|
||
err = clientDB1.DropDatabase(ctx, clientv2.NewDropDatabaseOption(dbName1)) | ||
common.CheckErr(t, err, true) | ||
|
||
// drop default db | ||
err = clientDefault.DropDatabase(ctx, clientv2.NewDropDatabaseOption(common.DefaultDb)) | ||
common.CheckErr(t, err, false, "can not drop default database") | ||
|
||
dbs, err = clientDefault.ListDatabases(ctx, clientv2.NewListDatabaseOption()) | ||
common.CheckErr(t, err, true) | ||
require.Containsf(t, dbs, common.DefaultDb, fmt.Sprintf("The db %s not in: %v", common.DefaultDb, dbs)) | ||
} | ||
|
||
// test create with invalid db name | ||
func TestCreateDb(t *testing.T) { | ||
teardownSuite := teardownTest(t) | ||
defer teardownSuite(t) | ||
|
||
// create db | ||
ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) | ||
mc := createDefaultMilvusClient(ctx, t) | ||
dbName := common.GenRandomString("db", 4) | ||
err := mc.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(dbName)) | ||
common.CheckErr(t, err, true) | ||
|
||
// create existed db | ||
err = mc.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(dbName)) | ||
common.CheckErr(t, err, false, fmt.Sprintf("database already exist: %s", dbName)) | ||
|
||
// create default db | ||
err = mc.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(common.DefaultDb)) | ||
common.CheckErr(t, err, false, fmt.Sprintf("database already exist: %s", common.DefaultDb)) | ||
|
||
emptyErr := mc.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption("")) | ||
common.CheckErr(t, emptyErr, false, "database name couldn't be empty") | ||
} | ||
|
||
// test drop db | ||
func TestDropDb(t *testing.T) { | ||
teardownSuite := teardownTest(t) | ||
defer teardownSuite(t) | ||
|
||
// create collection in default db | ||
listCollOpt := clientv2.NewListCollectionOption() | ||
ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) | ||
mc := createDefaultMilvusClient(ctx, t) | ||
_, defCol := hp.CollPrepare.CreateCollection(ctx, t, mc, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
collections, _ := mc.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, collections, defCol.CollectionName) | ||
|
||
// create db | ||
dbName := common.GenRandomString("db", 4) | ||
err := mc.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(dbName)) | ||
common.CheckErr(t, err, true) | ||
|
||
// using db and drop the db | ||
err = mc.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(dbName)) | ||
common.CheckErr(t, err, true) | ||
err = mc.DropDatabase(ctx, clientv2.NewDropDatabaseOption(dbName)) | ||
common.CheckErr(t, err, true) | ||
|
||
// verify current db | ||
_, err = mc.ListCollections(ctx, listCollOpt) | ||
common.CheckErr(t, err, false, fmt.Sprintf("database not found[database=%s]", dbName)) | ||
|
||
// using default db and verify collections | ||
err = mc.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(common.DefaultDb)) | ||
common.CheckErr(t, err, true) | ||
collections, _ = mc.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, collections, defCol.CollectionName) | ||
|
||
// drop not existed db | ||
err = mc.DropDatabase(ctx, clientv2.NewDropDatabaseOption(common.GenRandomString("db", 4))) | ||
common.CheckErr(t, err, true) | ||
|
||
// drop empty db | ||
err = mc.DropDatabase(ctx, clientv2.NewDropDatabaseOption("")) | ||
common.CheckErr(t, err, false, "database name couldn't be empty") | ||
|
||
// drop default db | ||
err = mc.DropDatabase(ctx, clientv2.NewDropDatabaseOption(common.DefaultDb)) | ||
common.CheckErr(t, err, false, "can not drop default database") | ||
} | ||
|
||
// test using db | ||
func TestUsingDb(t *testing.T) { | ||
teardownSuite := teardownTest(t) | ||
defer teardownSuite(t) | ||
|
||
// create collection in default db | ||
listCollOpt := clientv2.NewListCollectionOption() | ||
ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) | ||
mc := createDefaultMilvusClient(ctx, t) | ||
|
||
_, col := hp.CollPrepare.CreateCollection(ctx, t, mc, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
// collName := createDefaultCollection(ctx, t, mc, true, common.DefaultShards) | ||
collections, _ := mc.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, collections, col.CollectionName) | ||
|
||
// using not existed db | ||
dbName := common.GenRandomString("db", 4) | ||
err := mc.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(dbName)) | ||
common.CheckErr(t, err, false, fmt.Sprintf("database not found[database=%s]", dbName)) | ||
|
||
// using empty db | ||
err = mc.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption("")) | ||
common.CheckErr(t, err, true) | ||
collections, _ = mc.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, collections, col.CollectionName) | ||
|
||
// using current db | ||
err = mc.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(common.DefaultDb)) | ||
common.CheckErr(t, err, true) | ||
collections, _ = mc.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, collections, col.CollectionName) | ||
} | ||
|
||
func TestClientWithDb(t *testing.T) { | ||
t.Skip("https://github.com/milvus-io/milvus/issues/34137") | ||
teardownSuite := teardownTest(t) | ||
defer teardownSuite(t) | ||
|
||
listCollOpt := clientv2.NewListCollectionOption() | ||
ctx := hp.CreateContext(t, time.Second*common.DefaultTimeout) | ||
|
||
// connect with not existed db | ||
_, err := base.NewMilvusClient(ctx, &clientv2.ClientConfig{Address: *addr, DBName: "dbName"}) | ||
common.CheckErr(t, err, false, "database not found") | ||
|
||
// connect default db -> create a collection in default db | ||
mcDefault, errDefault := base.NewMilvusClient(ctx, &clientv2.ClientConfig{ | ||
Address: *addr, | ||
// DBName: common.DefaultDb, | ||
}) | ||
common.CheckErr(t, errDefault, true) | ||
_, defCol1 := hp.CollPrepare.CreateCollection(ctx, t, mcDefault, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
defCollections, _ := mcDefault.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, defCollections, defCol1.CollectionName) | ||
log.Debug("default db collections:", zap.Any("default collections", defCollections)) | ||
|
||
// create a db and create collection in db | ||
dbName := common.GenRandomString("db", 5) | ||
err = mcDefault.CreateDatabase(ctx, clientv2.NewCreateDatabaseOption(dbName)) | ||
common.CheckErr(t, err, true) | ||
|
||
// and connect with db | ||
mcDb, err := base.NewMilvusClient(ctx, &clientv2.ClientConfig{ | ||
Address: *addr, | ||
DBName: dbName, | ||
}) | ||
common.CheckErr(t, err, true) | ||
_, dbCol1 := hp.CollPrepare.CreateCollection(ctx, t, mcDb, hp.NewCreateCollectionParams(hp.Int64Vec), hp.TNewFieldsOption(), hp.TNewSchemaOption()) | ||
|
||
dbCollections, _ := mcDb.ListCollections(ctx, listCollOpt) | ||
log.Debug("db collections:", zap.Any("db collections", dbCollections)) | ||
require.Containsf(t, dbCollections, dbCol1.CollectionName, fmt.Sprintf("The collection %s not in: %v", dbCol1.CollectionName, dbCollections)) | ||
|
||
// using default db and collection not in | ||
_ = mcDb.UsingDatabase(ctx, clientv2.NewUsingDatabaseOption(common.DefaultDb)) | ||
defCollections, _ = mcDb.ListCollections(ctx, listCollOpt) | ||
require.NotContains(t, defCollections, dbCol1.CollectionName) | ||
|
||
// connect empty db (actually default db) | ||
mcEmpty, err := base.NewMilvusClient(ctx, &clientv2.ClientConfig{ | ||
Address: *addr, | ||
DBName: "", | ||
}) | ||
common.CheckErr(t, err, true) | ||
defCollections, _ = mcEmpty.ListCollections(ctx, listCollOpt) | ||
require.Contains(t, defCollections, defCol1.CollectionName) | ||
} | ||
|
||
func TestAlterDatabase(t *testing.T) { | ||
t.Skip("waiting for AlterDatabase and DescribeDatabase") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.