diff --git a/tests/milvustest/src/main/java/com/zilliz/milvustest/common/CommonFunction.java b/tests/milvustest/src/main/java/com/zilliz/milvustest/common/CommonFunction.java index 55d6df75a..ba8f7f298 100644 --- a/tests/milvustest/src/main/java/com/zilliz/milvustest/common/CommonFunction.java +++ b/tests/milvustest/src/main/java/com/zilliz/milvustest/common/CommonFunction.java @@ -1,6 +1,7 @@ package com.zilliz.milvustest.common; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; import com.zilliz.milvustest.entity.FileBody; import com.zilliz.milvustest.entity.MilvusEntity; import com.zilliz.milvustest.util.MathUtil; @@ -574,10 +575,10 @@ public static String createNewCollectionWithJSONField() { .withName("json_field") .withDataType(DataType.JSON) .build(); - FieldType fieldType7 = FieldType.newBuilder() - .withName("array_field") - .withDataType(DataType.Array) - .build(); +// FieldType fieldType7 = FieldType.newBuilder() +// .withName("array_field") +// .withDataType(DataType.Array) +// .build(); CreateCollectionParam createCollectionReq = CreateCollectionParam.newBuilder() .withCollectionName(collectionName) @@ -596,6 +597,61 @@ public static String createNewCollectionWithJSONField() { return collectionName; } + public static String createNewCollectionWithArrayField(){ + String collectionName = "Collection_" + MathUtil.getRandomString(10); + FieldType fieldType1 = + FieldType.newBuilder() + .withName("int64_field") + .withDataType(DataType.Int64) + .withPrimaryKey(true) + .withAutoID(false) + .build(); + FieldType fieldType2 = + FieldType.newBuilder() + .withName("float_vector") + .withDataType(DataType.FloatVector) + .withDimension(128) + .build(); + FieldType fieldType3= + FieldType.newBuilder() + .withName("str_array_field") + .withDataType(DataType.Array) + .withElementType(DataType.VarChar) + .withMaxLength(256) + .withMaxCapacity(300) + .build(); + FieldType fieldType4= + FieldType.newBuilder() + .withName("int_array_field") + .withDataType(DataType.Array) + .withElementType(DataType.Int64) + .withMaxLength(256) + .withMaxCapacity(300) + .build(); + FieldType fieldType5= + FieldType.newBuilder() + .withName("float_array_field") + .withDataType(DataType.Array) + .withElementType(DataType.Float) + .withMaxLength(256) + .withMaxCapacity(300) + .build(); + CreateCollectionParam createCollectionReq = + CreateCollectionParam.newBuilder() + .withCollectionName(collectionName) + .withDescription("Test" + collectionName + "search") + .withShardsNum(2) + .addFieldType(fieldType1) + .addFieldType(fieldType2) + .addFieldType(fieldType3) + .addFieldType(fieldType4) + .addFieldType(fieldType5) + .build(); + R collection = milvusClient.createCollection(createCollectionReq); + logger.info("create collection:" + collectionName); + return collectionName; + } + public static List generateJsonData(int num){ List jsonList=new ArrayList<>(); Random ran = new Random(); @@ -637,6 +693,24 @@ public static List generateJsonData(int num){ return jsonList; } + public static List generateJsonDataWithArrayField(int num){ + List jsonList=new ArrayList<>(); + Random ran = new Random(); + for (int i = 0; i < num; i++) { + JSONObject row=new JSONObject(); + row.put("int64_field",(long)i); + List vector=new ArrayList<>(); + for (int k = 0; k < 128; ++k) { + vector.add(ran.nextFloat()); + } + row.put("float_vector",vector); + row.put("str_array_field", Lists.newArrayList("str"+i,"str"+(i+1),"str"+(i+2))); + row.put("int_array_field",Lists.newArrayList((long)i,(long)(i+1),(long)(i+2))); + row.put("float_array_field",Lists.newArrayList((float)(i+0.1),(float)(i+0.2),(float)(i+0.2))); + jsonList.add(row); + } + return jsonList; + } public static List generateDataWithDynamicFiledColumn(int num) { Random ran = new Random(); List book_id_array = new ArrayList<>(); diff --git a/tests/milvustest/src/test/java/com/zilliz/milvustest/collection/CreateCollectionTest.java b/tests/milvustest/src/test/java/com/zilliz/milvustest/collection/CreateCollectionTest.java index eae823503..3e57b63e2 100644 --- a/tests/milvustest/src/test/java/com/zilliz/milvustest/collection/CreateCollectionTest.java +++ b/tests/milvustest/src/test/java/com/zilliz/milvustest/collection/CreateCollectionTest.java @@ -31,6 +31,8 @@ public class CreateCollectionTest extends BaseTest { public String stringPKCollection; public String maxFieldCollection; + public String arrayFieldCollection; + @DataProvider(name = "collectionByDataProvider") public Object[][] provideCollectionName() { return new String[][] {{"collection_" + MathUtil.getRandomString(10)}}; @@ -54,6 +56,10 @@ public void deleteTestData() { milvusClient.dropCollection( DropCollectionParam.newBuilder().withCollectionName(maxFieldCollection).build()); } + if (arrayFieldCollection != null) { + milvusClient.dropCollection( + DropCollectionParam.newBuilder().withCollectionName(arrayFieldCollection).build()); + } } @DataProvider(name = "dataTypeProvider") @@ -482,4 +488,61 @@ public void createCollectionWithMultiThread() { }); } + @Severity(SeverityLevel.BLOCKER) + @Test(description = "Create collection with array fields") + public void createCollectionWithArrayField(){ + arrayFieldCollection = "Collection_" + MathUtil.getRandomString(10); + FieldType fieldType1 = + FieldType.newBuilder() + .withName("int64_field") + .withDataType(DataType.Int64) + .withPrimaryKey(true) + .withAutoID(false) + .build(); + FieldType fieldType2 = + FieldType.newBuilder() + .withName("float_vector") + .withDataType(DataType.FloatVector) + .withDimension(128) + .build(); + FieldType fieldType3= + FieldType.newBuilder() + .withName("str_array_field") + .withDataType(DataType.Array) + .withElementType(DataType.VarChar) + .withMaxLength(256) + .withMaxCapacity(300) + .build(); + FieldType fieldType4= + FieldType.newBuilder() + .withName("int_array_field") + .withDataType(DataType.Array) + .withElementType(DataType.Int64) + .withMaxLength(256) + .withMaxCapacity(300) + .build(); + FieldType fieldType5= + FieldType.newBuilder() + .withName("float_array_field") + .withDataType(DataType.Array) + .withElementType(DataType.Float) + .withMaxLength(256) + .withMaxCapacity(300) + .build(); + CreateCollectionParam createCollectionReq = + CreateCollectionParam.newBuilder() + .withCollectionName(arrayFieldCollection) + .withDescription("Test" + arrayFieldCollection + "search") + .withShardsNum(2) + .addFieldType(fieldType1) + .addFieldType(fieldType2) + .addFieldType(fieldType3) + .addFieldType(fieldType4) + .addFieldType(fieldType5) + .build(); + R collection = milvusClient.createCollection(createCollectionReq); + Assert.assertEquals(collection.getStatus().toString(), "0"); + Assert.assertEquals(collection.getData().getMsg(), "Success"); + } + } diff --git a/tests/milvustest/src/test/java/com/zilliz/milvustest/flush/GetFlushStateTest.java b/tests/milvustest/src/test/java/com/zilliz/milvustest/flush/GetFlushStateTest.java index 748a4d846..bb15cae26 100644 --- a/tests/milvustest/src/test/java/com/zilliz/milvustest/flush/GetFlushStateTest.java +++ b/tests/milvustest/src/test/java/com/zilliz/milvustest/flush/GetFlushStateTest.java @@ -60,7 +60,7 @@ public Object[][] providerSegmentId() { @Test(description = "Get flush state of specified segments.", dataProvider = "providerSegmentIds",groups = {"Smoke"}) public void getFlushStateTest(Long segmentId, String collection) { R getFlushStateResponseR = - milvusClient.getFlushState(GetFlushStateParam.newBuilder().addSegmentID(segmentId).build()); + milvusClient.getFlushState(GetFlushStateParam.newBuilder().withCollectionName(collection).build()); Assert.assertEquals(getFlushStateResponseR.getStatus().intValue(), 0); Assert.assertTrue(getFlushStateResponseR.getData().getFlushed()); System.out.println("Collection-" + collection + ":" + getFlushStateResponseR.getData()); diff --git a/tests/milvustest/src/test/java/com/zilliz/milvustest/index/IndexLoadTest.java b/tests/milvustest/src/test/java/com/zilliz/milvustest/index/IndexLoadTest.java index 3137d0909..cc2f1c813 100644 --- a/tests/milvustest/src/test/java/com/zilliz/milvustest/index/IndexLoadTest.java +++ b/tests/milvustest/src/test/java/com/zilliz/milvustest/index/IndexLoadTest.java @@ -12,9 +12,7 @@ import io.milvus.param.collection.ReleaseCollectionParam; import io.milvus.param.index.CreateIndexParam; import io.milvus.param.index.DropIndexParam; -import io.qameta.allure.Issue; -import io.qameta.allure.Severity; -import io.qameta.allure.SeverityLevel; +import io.qameta.allure.*; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -23,6 +21,8 @@ import static com.zilliz.milvustest.util.MathUtil.combine; +@Epic("Index") +@Feature("IndexLoad") public class IndexLoadTest extends BaseTest { public String collection; public String binaryCollection; diff --git a/tests/milvustest/src/test/java/com/zilliz/milvustest/query/QueryTest.java b/tests/milvustest/src/test/java/com/zilliz/milvustest/query/QueryTest.java index 64f6e74f7..6401fcb64 100644 --- a/tests/milvustest/src/test/java/com/zilliz/milvustest/query/QueryTest.java +++ b/tests/milvustest/src/test/java/com/zilliz/milvustest/query/QueryTest.java @@ -47,6 +47,8 @@ public class QueryTest extends BaseTest { public String collectionWithJsonField; public String collectionWithDynamicField; + public String collectionWithArrayField; + @BeforeClass(description = "load collection first",alwaysRun = true) public void loadCollection() { milvusClient.loadCollection( @@ -65,6 +67,7 @@ public void loadCollection() { .build()); collectionWithJsonField= CommonFunction.createNewCollectionWithJSONField(); collectionWithDynamicField= CommonFunction.createNewCollectionWithDynamicField(); + collectionWithArrayField= CommonFunction.createNewCollectionWithArrayField(); } @DataProvider(name = "providerPartition") @@ -94,6 +97,8 @@ public void releaseCollection() { DropCollectionParam.newBuilder().withCollectionName(collectionWithJsonField).build()); milvusClient.dropCollection( DropCollectionParam.newBuilder().withCollectionName(collectionWithDynamicField).build()); + milvusClient.dropCollection( + DropCollectionParam.newBuilder().withCollectionName(collectionWithArrayField).build()); } @DataProvider(name = "providerConsistency") @@ -1113,6 +1118,31 @@ public void queryCollectionWithJsonField(String expr) { JSONObject jsonObject = (JSONObject) wrapperQuery.getRowRecords().get(0).get("json_field"); String string_field = jsonObject.getString("string_field"); Assert.assertTrue(string_field.contains("Str")); + } + + @Test(description = "query collection with array field",groups = {"Smoke"}) + @Severity(SeverityLevel.BLOCKER) + public void queryCollectionWithArrayField() { + List jsonObjects = CommonFunction.generateJsonDataWithArrayField(1000); + R insert = milvusClient.insert(InsertParam.newBuilder() + .withRows(jsonObjects) + .withCollectionName(collectionWithArrayField) + .build()); + Assert.assertEquals(insert.getStatus().intValue(),0); + CommonFunction.createIndexWithLoad(collectionWithArrayField,IndexType.HNSW,MetricType.L2,"float_vector"); + //query + List outFields = Arrays.asList("str_array_field","int_array_field","float_array_field"); + QueryParam queryParam = + QueryParam.newBuilder() + .withCollectionName(collectionWithArrayField) + .withOutFields(outFields) +// .withExpr(expr) + .withLimit(100L) + .build(); + R queryResultsR = milvusClient.query(queryParam); + QueryResultsWrapper wrapperQuery = new QueryResultsWrapper(queryResultsR.getData()); + Assert.assertEquals(queryResultsR.getStatus().intValue(), 0); + Assert.assertTrue(wrapperQuery.getFieldWrapper("str_array_field").getFieldData().size()>=4); } diff --git a/tests/milvustest/src/test/java/com/zilliz/milvustest/search/SearchTest.java b/tests/milvustest/src/test/java/com/zilliz/milvustest/search/SearchTest.java index 5028b07be..73c4f8ceb 100644 --- a/tests/milvustest/src/test/java/com/zilliz/milvustest/search/SearchTest.java +++ b/tests/milvustest/src/test/java/com/zilliz/milvustest/search/SearchTest.java @@ -45,6 +45,8 @@ public class SearchTest extends BaseTest { public String collectionWithJsonField; public String collectionWithDynamicField; + public String collectionWithArrayField; + @BeforeClass(description = "load collection first",alwaysRun = true) public void loadCollection() { milvusClient.loadCollection( @@ -63,6 +65,7 @@ public void loadCollection() { .build()); collectionWithJsonField= CommonFunction.createNewCollectionWithJSONField(); collectionWithDynamicField= CommonFunction.createNewCollectionWithDynamicField(); + collectionWithArrayField= CommonFunction.createNewCollectionWithArrayField(); } @DataProvider(name="dynamicExpressions") @@ -106,6 +109,8 @@ public void releaseCollection() { DropCollectionParam.newBuilder().withCollectionName(collectionWithJsonField).build()); milvusClient.dropCollection( DropCollectionParam.newBuilder().withCollectionName(collectionWithDynamicField).build()); + milvusClient.dropCollection( + DropCollectionParam.newBuilder().withCollectionName(collectionWithArrayField).build()); } @@ -1919,4 +1924,38 @@ public void searchReturnVector(IndexType indexType, MetricType metricType) { milvusClient.dropCollection( DropCollectionParam.newBuilder().withCollectionName(newCollection).build()); } + + @Severity(SeverityLevel.BLOCKER) + @Test(description = "Search with array field",groups = {"Smoke"}) + public void searchWithArrayField(){ + List jsonObjects = CommonFunction.generateJsonDataWithArrayField(1000); + R insert = milvusClient.insert(InsertParam.newBuilder() + .withRows(jsonObjects) + .withCollectionName(collectionWithArrayField) + .build()); + Assert.assertEquals(insert.getStatus().intValue(), 0); + CommonFunction.createIndexWithLoad(collectionWithArrayField, IndexType.HNSW, MetricType.L2, "float_vector"); + // search + Integer SEARCH_K = 10; // TopK + String SEARCH_PARAM = "{\"nprobe\":10}"; + List search_output_fields = Arrays.asList("str_array_field","int_array_field","float_array_field"); + List> search_vectors = Arrays.asList(Arrays.asList(MathUtil.generateFloat(128))); + SearchParam searchParam = + SearchParam.newBuilder() + .withCollectionName(collectionWithArrayField) + .withMetricType(MetricType.L2) + .withOutFields(search_output_fields) + .withTopK(SEARCH_K) + .withVectors(search_vectors) + .withVectorFieldName("float_vector") + .withParams(SEARCH_PARAM) +// .withExpr(expr) + .withConsistencyLevel(ConsistencyLevelEnum.STRONG) + .build(); + R searchResultsR = milvusClient.search(searchParam); + Assert.assertEquals(searchResultsR.getStatus().intValue(), 0); + SearchResultsWrapper searchResultsWrapper = + new SearchResultsWrapper(searchResultsR.getData().getResults()); + Assert.assertTrue(searchResultsWrapper.getFieldData("str_array_field", 0).size()>=4); + } } diff --git a/tests/milvustest/src/test/java/com/zilliz/milvustest/serverless/HighLevelTest.java b/tests/milvustest/src/test/java/com/zilliz/milvustest/serverless/HighLevelTest.java index 6cc84abf0..c25bd1eb7 100644 --- a/tests/milvustest/src/test/java/com/zilliz/milvustest/serverless/HighLevelTest.java +++ b/tests/milvustest/src/test/java/com/zilliz/milvustest/serverless/HighLevelTest.java @@ -175,12 +175,13 @@ public void listVarcharPKCollectionTest() { @Severity(SeverityLevel.BLOCKER) @Test(description = "insert data into varchar PK Collection", groups = {"Smoke"}, dependsOnMethods = "listVarcharPKCollectionTest") - public void insertIntoVarcharPKCollectionTest() { + public void insertIntoVarcharPKCollectionTest() throws InterruptedException { List jsonObjects = CommonFunction.generateVarcharPKDataWithDynamicFiledRow(10000); R insert = milvusClient.insert(InsertRowsParam.newBuilder() .withCollectionName(varcharPKCollection) .withRows(jsonObjects) .build()); + Thread.sleep(2000); Assert.assertEquals(insert.getStatus().intValue(), R.Status.Success.getCode()); Assert.assertEquals(insert.getData().getInsertCount().intValue(), 10000); }