Browse Source

Add collection related cases for null and default value support (#1107)

Signed-off-by: binbin lv <binbin.lv@zilliz.com>
binbin 8 months ago
parent
commit
7bdd2f77fd

+ 7 - 0
tests/milvustestv2/src/main/java/com/zilliz/milvustestv2/common/CommonData.java

@@ -52,6 +52,13 @@ public class CommonData {
     public static String databaseName="database01";
     public static String databaseName2="database02";
 
+    public static short defaultValueShort = 1;
+    public static int defaultValueInt = 1;
+    public static float defaultValueFloat = 1.0F;
+    public static double defaultValueDouble = 1.0;
+    public static boolean defaultValueBool = true;
+    public static String defaultValueString = "1.0";
+
 
 
 

+ 380 - 0
tests/milvustestv2/src/main/java/com/zilliz/milvustestv2/common/CommonFunction.java

@@ -156,6 +156,386 @@ public class CommonFunction {
         return collectionName;
     }
 
+    /**
+     * 创建包含nullable列的collection
+     *
+     * @param dim            维度
+     * @param collectionName collection name
+     * @param vectorType     向量类型-sparse vector 不需要dim
+     * @return collection name
+     */
+    public static String createNewNullableCollection(int dim, String collectionName, DataType vectorType) {
+        if (collectionName == null || collectionName.equals("")) {
+            collectionName = "Collection_" + GenerateUtil.getRandomString(10);
+        }
+        CreateCollectionReq.FieldSchema fieldInt64 = CreateCollectionReq.FieldSchema.builder()
+                .autoID(false)
+                .dataType(io.milvus.v2.common.DataType.Int64)
+                .isPrimaryKey(true)
+                .name(CommonData.fieldInt64)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt32 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int32)
+                .name(CommonData.fieldInt32)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt16 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int16)
+                .name(CommonData.fieldInt16)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt8 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int8)
+                .name(CommonData.fieldInt8)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldDouble = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Double)
+                .name(CommonData.fieldDouble)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldArray = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Array)
+                .name(CommonData.fieldArray)
+                .elementType(DataType.Int64)
+                .maxCapacity(1000)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldBool = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Bool)
+                .name(CommonData.fieldBool)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVarchar = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.VarChar)
+                .name(CommonData.fieldVarchar)
+                .isPrimaryKey(false)
+                .maxLength(1000)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloat = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Float)
+                .name(CommonData.fieldFloat)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldJson = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.JSON)
+                .name(CommonData.fieldJson)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVector = CreateCollectionReq.FieldSchema.builder()
+                .dataType(vectorType)
+                .isPrimaryKey(false)
+                .build();
+        if (vectorType == DataType.FloatVector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldFloatVector);
+        }
+        if (vectorType == DataType.BinaryVector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldBinaryVector);
+        }
+        if (vectorType == DataType.Float16Vector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldFloat16Vector);
+        }
+        if (vectorType == DataType.BFloat16Vector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldBF16Vector);
+        }
+        if (vectorType == DataType.SparseFloatVector) {
+            fieldVector.setName(CommonData.fieldSparseVector);
+        }
+        List<CreateCollectionReq.FieldSchema> fieldSchemaList = new ArrayList<>();
+        fieldSchemaList.add(fieldInt64);
+        fieldSchemaList.add(fieldInt32);
+        fieldSchemaList.add(fieldInt16);
+        fieldSchemaList.add(fieldInt8);
+        fieldSchemaList.add(fieldFloat);
+        fieldSchemaList.add(fieldDouble);
+        fieldSchemaList.add(fieldArray);
+        fieldSchemaList.add(fieldBool);
+        fieldSchemaList.add(fieldJson);
+        fieldSchemaList.add(fieldVarchar);
+        fieldSchemaList.add(fieldVector);
+        CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
+                .fieldSchemaList(fieldSchemaList)
+                .build();
+        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
+                .collectionSchema(collectionSchema)
+                .collectionName(collectionName)
+                .enableDynamicField(false)
+                .description("collection desc")
+                .numShards(1)
+                .build();
+        BaseTest.milvusClientV2.createCollection(createCollectionReq);
+        log.info("create collection:" + collectionName);
+        return collectionName;
+    }
+
+    /**
+     * 创建包含default value列的collection
+     *
+     * @param dim            维度
+     * @param collectionName collection name
+     * @param vectorType     向量类型-sparse vector 不需要dim
+     * @return collection name
+     */
+    public static String createNewDefaultValueCollection(int dim, String collectionName, DataType vectorType) {
+        if (collectionName == null || collectionName.equals("")) {
+            collectionName = "Collection_" + GenerateUtil.getRandomString(10);
+        }
+        CreateCollectionReq.FieldSchema fieldInt64 = CreateCollectionReq.FieldSchema.builder()
+                .autoID(false)
+                .dataType(io.milvus.v2.common.DataType.Int64)
+                .isPrimaryKey(true)
+                .name(CommonData.fieldInt64)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt32 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int32)
+                .name(CommonData.fieldInt32)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueInt)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt16 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int16)
+                .name(CommonData.fieldInt16)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt8 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int8)
+                .name(CommonData.fieldInt8)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldDouble = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Double)
+                .name(CommonData.fieldDouble)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueDouble)
+                .build();
+        CreateCollectionReq.FieldSchema fieldArray = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Array)
+                .name(CommonData.fieldArray)
+                .elementType(DataType.Int64)
+                .maxCapacity(1000)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldBool = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Bool)
+                .name(CommonData.fieldBool)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueBool)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVarchar = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.VarChar)
+                .name(CommonData.fieldVarchar)
+                .isPrimaryKey(false)
+                .maxLength(1000)
+                .defaultValue(CommonData.defaultValueString)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloat = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Float)
+                .name(CommonData.fieldFloat)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueFloat)
+                .build();
+        CreateCollectionReq.FieldSchema fieldJson = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.JSON)
+                .name(CommonData.fieldJson)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVector = CreateCollectionReq.FieldSchema.builder()
+                .dataType(vectorType)
+                .isPrimaryKey(false)
+                .build();
+        if (vectorType == DataType.FloatVector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldFloatVector);
+        }
+        if (vectorType == DataType.BinaryVector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldBinaryVector);
+        }
+        if (vectorType == DataType.Float16Vector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldFloat16Vector);
+        }
+        if (vectorType == DataType.BFloat16Vector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldBF16Vector);
+        }
+        if (vectorType == DataType.SparseFloatVector) {
+            fieldVector.setName(CommonData.fieldSparseVector);
+        }
+        List<CreateCollectionReq.FieldSchema> fieldSchemaList = new ArrayList<>();
+        fieldSchemaList.add(fieldInt64);
+        fieldSchemaList.add(fieldInt32);
+        fieldSchemaList.add(fieldInt16);
+        fieldSchemaList.add(fieldInt8);
+        fieldSchemaList.add(fieldFloat);
+        fieldSchemaList.add(fieldDouble);
+        fieldSchemaList.add(fieldArray);
+        fieldSchemaList.add(fieldBool);
+        fieldSchemaList.add(fieldJson);
+        fieldSchemaList.add(fieldVarchar);
+        fieldSchemaList.add(fieldVector);
+        CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
+                .fieldSchemaList(fieldSchemaList)
+                .build();
+        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
+                .collectionSchema(collectionSchema)
+                .collectionName(collectionName)
+                .enableDynamicField(false)
+                .description("collection desc")
+                .numShards(1)
+                .build();
+        BaseTest.milvusClientV2.createCollection(createCollectionReq);
+        log.info("create collection:" + collectionName);
+        return collectionName;
+    }
+
+    /**
+     * 创建包含同时enable nullable和default value列的collection
+     *
+     * @param dim            维度
+     * @param collectionName collection name
+     * @param vectorType     向量类型-sparse vector 不需要dim
+     * @return collection name
+     */
+    public static String createNewNullableDefaultValueCollection(int dim, String collectionName, DataType vectorType) {
+        if (collectionName == null || collectionName.equals("")) {
+            collectionName = "Collection_" + GenerateUtil.getRandomString(10);
+        }
+        CreateCollectionReq.FieldSchema fieldInt64 = CreateCollectionReq.FieldSchema.builder()
+                .autoID(false)
+                .dataType(io.milvus.v2.common.DataType.Int64)
+                .isPrimaryKey(true)
+                .name(CommonData.fieldInt64)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt32 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int32)
+                .name(CommonData.fieldInt32)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueInt)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt16 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int16)
+                .name(CommonData.fieldInt16)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt8 = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int8)
+                .name(CommonData.fieldInt8)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldDouble = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Double)
+                .name(CommonData.fieldDouble)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueDouble)
+                .build();
+        CreateCollectionReq.FieldSchema fieldArray = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Array)
+                .name(CommonData.fieldArray)
+                .elementType(DataType.Int64)
+                .maxCapacity(1000)
+                .isNullable(true)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldBool = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Bool)
+                .name(CommonData.fieldBool)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueBool)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVarchar = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.VarChar)
+                .name(CommonData.fieldVarchar)
+                .isPrimaryKey(false)
+                .maxLength(1000)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueString)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloat = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Float)
+                .name(CommonData.fieldFloat)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueFloat)
+                .build();
+        CreateCollectionReq.FieldSchema fieldJson = CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.JSON)
+                .name(CommonData.fieldJson)
+                .isNullable(true)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVector = CreateCollectionReq.FieldSchema.builder()
+                .dataType(vectorType)
+                .isPrimaryKey(false)
+                .build();
+        if (vectorType == DataType.FloatVector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldFloatVector);
+        }
+        if (vectorType == DataType.BinaryVector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldBinaryVector);
+        }
+        if (vectorType == DataType.Float16Vector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldFloat16Vector);
+        }
+        if (vectorType == DataType.BFloat16Vector) {
+            fieldVector.setDimension(dim);
+            fieldVector.setName(CommonData.fieldBF16Vector);
+        }
+        if (vectorType == DataType.SparseFloatVector) {
+            fieldVector.setName(CommonData.fieldSparseVector);
+        }
+        List<CreateCollectionReq.FieldSchema> fieldSchemaList = new ArrayList<>();
+        fieldSchemaList.add(fieldInt64);
+        fieldSchemaList.add(fieldInt32);
+        fieldSchemaList.add(fieldInt16);
+        fieldSchemaList.add(fieldInt8);
+        fieldSchemaList.add(fieldFloat);
+        fieldSchemaList.add(fieldDouble);
+        fieldSchemaList.add(fieldArray);
+        fieldSchemaList.add(fieldBool);
+        fieldSchemaList.add(fieldJson);
+        fieldSchemaList.add(fieldVarchar);
+        fieldSchemaList.add(fieldVector);
+        CreateCollectionReq.CollectionSchema collectionSchema = CreateCollectionReq.CollectionSchema.builder()
+                .fieldSchemaList(fieldSchemaList)
+                .build();
+        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
+                .collectionSchema(collectionSchema)
+                .collectionName(collectionName)
+                .enableDynamicField(false)
+                .description("collection desc")
+                .numShards(1)
+                .build();
+        BaseTest.milvusClientV2.createCollection(createCollectionReq);
+        log.info("create collection:" + collectionName);
+        return collectionName;
+    }
+
     /**
      * 为不同类型向量的collection提供导入的数据,目前只支持行式插入
      *

+ 336 - 0
tests/milvustestv2/src/test/java/com/zilliz/milvustestv2/collection/CreateCollectionTest.java

@@ -184,4 +184,340 @@ public class CreateCollectionTest extends BaseTest {
         milvusClientV2.dropCollection(DropCollectionReq.builder().collectionName(newCollection).build());
     }
 
+    @Test(description = "Create collection with Null Data, will auto load", groups = {"Smoke"})
+    public void createCollectionWithNullData(){
+        CreateCollectionReq.FieldSchema fieldInt64=CreateCollectionReq.FieldSchema.builder()
+                .autoID(false)
+                .dataType(io.milvus.v2.common.DataType.Int64)
+                .isPrimaryKey(true)
+                .name(CommonData.fieldInt64)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt32=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int32)
+                .name(CommonData.fieldInt32)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt16=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int16)
+                .name(CommonData.fieldInt16)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt8=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int8)
+                .name(CommonData.fieldInt8)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldDouble=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Double)
+                .name(CommonData.fieldDouble)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldArray=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Array)
+                .name(CommonData.fieldArray)
+                .elementType(DataType.Int64)
+                .maxCapacity(1000)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldBool=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Bool)
+                .name(CommonData.fieldBool)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVarchar=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.VarChar)
+                .name(CommonData.fieldVarchar)
+                .isPrimaryKey(false)
+                .maxLength(1000)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloat=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Float)
+                .name(CommonData.fieldFloat)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldJson=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.JSON)
+                .name(CommonData.fieldJson)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloatVector=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.FloatVector)
+                .name(CommonData.fieldFloatVector)
+                .isPrimaryKey(false)
+                .dimension(CommonData.dim)
+                .build();
+
+        List<CreateCollectionReq.FieldSchema> fieldSchemaList=new ArrayList<>();
+        fieldSchemaList.add(fieldInt64);
+        fieldSchemaList.add(fieldInt32);
+        fieldSchemaList.add(fieldInt16);
+        fieldSchemaList.add(fieldInt8);
+        fieldSchemaList.add(fieldFloat);
+        fieldSchemaList.add(fieldDouble);
+        fieldSchemaList.add(fieldArray);
+        fieldSchemaList.add(fieldBool);
+        fieldSchemaList.add(fieldJson);
+        fieldSchemaList.add(fieldVarchar);
+        fieldSchemaList.add(fieldFloatVector);
+        CreateCollectionReq.CollectionSchema collectionSchema= CreateCollectionReq.CollectionSchema.builder()
+                .fieldSchemaList(fieldSchemaList)
+                .build();
+        IndexParam indexParam = IndexParam.builder()
+                .fieldName(CommonData.fieldFloatVector)
+                .indexType(IndexParam.IndexType.AUTOINDEX)
+                .extraParams(CommonFunction.provideExtraParam(IndexParam.IndexType.AUTOINDEX))
+                .metricType(IndexParam.MetricType.L2)
+                .build();
+        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
+                .collectionSchema(collectionSchema)
+                .collectionName(collectionNameWithIndex)
+                .enableDynamicField(false)
+                .indexParams(Collections.singletonList(indexParam))
+                .numShards(1)
+                .build();
+        BaseTest.milvusClientV2.createCollection(createCollectionReq);
+
+        ListCollectionsResp listCollectionsResp = milvusClientV2.listCollections();
+        Assert.assertTrue(listCollectionsResp.getCollectionNames().contains(collectionNameWithIndex));
+        //insert
+        CommonFunction.generateDefaultData(0,100,CommonData.dim,DataType.FloatVector);
+        // search
+        SearchResp searchResp = CommonFunction.defaultSearch(collectionNameWithIndex);
+        Assert.assertEquals(searchResp.getSearchResults().size(),10);
+    }
+
+    @Test(description = "Create collection with Default Data, will auto load", groups = {"Smoke"})
+    public void createCollectionWithDefaultData(){
+        CreateCollectionReq.FieldSchema fieldInt64=CreateCollectionReq.FieldSchema.builder()
+                .autoID(false)
+                .dataType(io.milvus.v2.common.DataType.Int64)
+                .isPrimaryKey(true)
+                .name(CommonData.fieldInt64)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt32=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int32)
+                .name(CommonData.fieldInt32)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueInt)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt16=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int16)
+                .name(CommonData.fieldInt16)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt8=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int8)
+                .name(CommonData.fieldInt8)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldDouble=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Double)
+                .name(CommonData.fieldDouble)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueDouble)
+                .build();
+        CreateCollectionReq.FieldSchema fieldArray=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Array)
+                .name(CommonData.fieldArray)
+                .elementType(DataType.Int64)
+                .maxCapacity(1000)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldBool=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Bool)
+                .name(CommonData.fieldBool)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueBool)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVarchar=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.VarChar)
+                .name(CommonData.fieldVarchar)
+                .isPrimaryKey(false)
+                .maxLength(1000)
+                .defaultValue(CommonData.defaultValueString)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloat=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Float)
+                .name(CommonData.fieldFloat)
+                .isPrimaryKey(false)
+                .defaultValue(CommonData.defaultValueFloat)
+                .build();
+        CreateCollectionReq.FieldSchema fieldJson=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.JSON)
+                .name(CommonData.fieldJson)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloatVector=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.FloatVector)
+                .name(CommonData.fieldFloatVector)
+                .isPrimaryKey(false)
+                .dimension(CommonData.dim)
+                .build();
+
+        List<CreateCollectionReq.FieldSchema> fieldSchemaList=new ArrayList<>();
+        fieldSchemaList.add(fieldInt64);
+        fieldSchemaList.add(fieldInt32);
+        fieldSchemaList.add(fieldInt16);
+        fieldSchemaList.add(fieldInt8);
+        fieldSchemaList.add(fieldFloat);
+        fieldSchemaList.add(fieldDouble);
+        fieldSchemaList.add(fieldArray);
+        fieldSchemaList.add(fieldBool);
+        fieldSchemaList.add(fieldJson);
+        fieldSchemaList.add(fieldVarchar);
+        fieldSchemaList.add(fieldFloatVector);
+        CreateCollectionReq.CollectionSchema collectionSchema= CreateCollectionReq.CollectionSchema.builder()
+                .fieldSchemaList(fieldSchemaList)
+                .build();
+        IndexParam indexParam = IndexParam.builder()
+                .fieldName(CommonData.fieldFloatVector)
+                .indexType(IndexParam.IndexType.AUTOINDEX)
+                .extraParams(CommonFunction.provideExtraParam(IndexParam.IndexType.AUTOINDEX))
+                .metricType(IndexParam.MetricType.L2)
+                .build();
+        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
+                .collectionSchema(collectionSchema)
+                .collectionName(collectionNameWithIndex)
+                .enableDynamicField(false)
+                .indexParams(Collections.singletonList(indexParam))
+                .numShards(1)
+                .build();
+        BaseTest.milvusClientV2.createCollection(createCollectionReq);
+
+        ListCollectionsResp listCollectionsResp = milvusClientV2.listCollections();
+        Assert.assertTrue(listCollectionsResp.getCollectionNames().contains(collectionNameWithIndex));
+        //insert
+        CommonFunction.generateDefaultData(0,100,CommonData.dim,DataType.FloatVector);
+        // search
+        SearchResp searchResp = CommonFunction.defaultSearch(collectionNameWithIndex);
+        Assert.assertEquals(searchResp.getSearchResults().size(),10);
+    }
+
+    @Test(description = "Create collection with nullable and Default Data, will auto load", groups = {"Smoke"})
+    public void createCollectionWithNullAndDefaultData(){
+        CreateCollectionReq.FieldSchema fieldInt64=CreateCollectionReq.FieldSchema.builder()
+                .autoID(false)
+                .dataType(io.milvus.v2.common.DataType.Int64)
+                .isPrimaryKey(true)
+                .name(CommonData.fieldInt64)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt32=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int32)
+                .name(CommonData.fieldInt32)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueInt)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt16=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int16)
+                .name(CommonData.fieldInt16)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldInt8=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Int8)
+                .name(CommonData.fieldInt8)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueShort)
+                .build();
+        CreateCollectionReq.FieldSchema fieldDouble=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Double)
+                .name(CommonData.fieldDouble)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueDouble)
+                .build();
+        CreateCollectionReq.FieldSchema fieldArray=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Array)
+                .name(CommonData.fieldArray)
+                .elementType(DataType.Int64)
+                .maxCapacity(1000)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldBool=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Bool)
+                .name(CommonData.fieldBool)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueBool)
+                .build();
+        CreateCollectionReq.FieldSchema fieldVarchar=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.VarChar)
+                .name(CommonData.fieldVarchar)
+                .isPrimaryKey(false)
+                .maxLength(1000)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueString)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloat=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.Float)
+                .name(CommonData.fieldFloat)
+                .isPrimaryKey(false)
+                .isNullable(true)
+                .defaultValue(CommonData.defaultValueFloat)
+                .build();
+        CreateCollectionReq.FieldSchema fieldJson=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.JSON)
+                .name(CommonData.fieldJson)
+                .isPrimaryKey(false)
+                .build();
+        CreateCollectionReq.FieldSchema fieldFloatVector=CreateCollectionReq.FieldSchema.builder()
+                .dataType(DataType.FloatVector)
+                .name(CommonData.fieldFloatVector)
+                .isPrimaryKey(false)
+                .dimension(CommonData.dim)
+                .build();
+
+        List<CreateCollectionReq.FieldSchema> fieldSchemaList=new ArrayList<>();
+        fieldSchemaList.add(fieldInt64);
+        fieldSchemaList.add(fieldInt32);
+        fieldSchemaList.add(fieldInt16);
+        fieldSchemaList.add(fieldInt8);
+        fieldSchemaList.add(fieldFloat);
+        fieldSchemaList.add(fieldDouble);
+        fieldSchemaList.add(fieldArray);
+        fieldSchemaList.add(fieldBool);
+        fieldSchemaList.add(fieldJson);
+        fieldSchemaList.add(fieldVarchar);
+        fieldSchemaList.add(fieldFloatVector);
+        CreateCollectionReq.CollectionSchema collectionSchema= CreateCollectionReq.CollectionSchema.builder()
+                .fieldSchemaList(fieldSchemaList)
+                .build();
+        IndexParam indexParam = IndexParam.builder()
+                .fieldName(CommonData.fieldFloatVector)
+                .indexType(IndexParam.IndexType.AUTOINDEX)
+                .extraParams(CommonFunction.provideExtraParam(IndexParam.IndexType.AUTOINDEX))
+                .metricType(IndexParam.MetricType.L2)
+                .build();
+        CreateCollectionReq createCollectionReq = CreateCollectionReq.builder()
+                .collectionSchema(collectionSchema)
+                .collectionName(collectionNameWithIndex)
+                .enableDynamicField(false)
+                .indexParams(Collections.singletonList(indexParam))
+                .numShards(1)
+                .build();
+        BaseTest.milvusClientV2.createCollection(createCollectionReq);
+
+        ListCollectionsResp listCollectionsResp = milvusClientV2.listCollections();
+        Assert.assertTrue(listCollectionsResp.getCollectionNames().contains(collectionNameWithIndex));
+        //insert
+        CommonFunction.generateDefaultData(0,100,CommonData.dim,DataType.FloatVector);
+        // search
+        SearchResp searchResp = CommonFunction.defaultSearch(collectionNameWithIndex);
+        Assert.assertEquals(searchResp.getSearchResults().size(),10);
+    }
+
 }

+ 52 - 0
tests/milvustestv2/src/test/java/com/zilliz/milvustestv2/collection/DescribeCollectionTest.java

@@ -48,7 +48,59 @@ public class DescribeCollectionTest extends BaseTest {
         Assert.assertTrue(describeCollectionResp.getProperties().containsKey(Constant.MMAP_ENABLED));
         Assert.assertTrue(describeCollectionResp.getProperties().get(Constant.MMAP_ENABLED).equalsIgnoreCase("true"));
         milvusClientV2.dropCollection(DropCollectionReq.builder().collectionName(newCollection).build());
+    }
 
+    @Test(description = "Describe collection with nullable fields", groups = {"Smoke"})
+    public void describeNullableCollection() {
+        String newCollection = CommonFunction.createNewNullableCollection(CommonData.dim, null, DataType.FloatVector);
+        DescribeCollectionResp describeCollectionResp = milvusClientV2.describeCollection(DescribeCollectionReq.builder()
+                .collectionName(newCollection)
+                .build());
+        List<String> fieldNames = describeCollectionResp.getFieldNames();
+        // except for the first field (pk) and the last field(vector), other fields should have nullable property
+        for(int i = 1; i < fieldNames.size()-1; i++){
+            Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(fieldNames.get(i)).getIsNullable());
+        }
+        milvusClientV2.dropCollection(DropCollectionReq.builder().collectionName(newCollection).build());
+    }
 
+    @Test(description = "Describe collection with default value fields", groups = {"Smoke"})
+    public void describeDefaultValueCollection() {
+        String newCollection = CommonFunction.createNewDefaultValueCollection(CommonData.dim, null, DataType.FloatVector);
+        DescribeCollectionResp describeCollectionResp = milvusClientV2.describeCollection(DescribeCollectionReq.builder()
+                .collectionName(newCollection)
+                .build());
+        // except for the first field (pk), json, array, and the last field(vector), other fields should have default value property
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldInt32).getDefaultValue().equals(CommonData.defaultValueInt));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldInt16).getDefaultValue().equals(CommonData.defaultValueShort));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldInt8).getDefaultValue().equals(CommonData.defaultValueShort));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldDouble).getDefaultValue().equals(CommonData.defaultValueDouble));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldFloat).getDefaultValue().equals(CommonData.defaultValueFloat));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldVarchar).getDefaultValue().equals(CommonData.defaultValueString));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldBool).getDefaultValue().equals(CommonData.defaultValueBool));
+        milvusClientV2.dropCollection(DropCollectionReq.builder().collectionName(newCollection).build());
+    }
+
+    @Test(description = "Describe collection with both nullable and default value enable fields", groups = {"Smoke"})
+    public void describeNullDefaultValueCollection() {
+        String newCollection = CommonFunction.createNewNullableDefaultValueCollection(CommonData.dim, null, DataType.FloatVector);
+        DescribeCollectionResp describeCollectionResp = milvusClientV2.describeCollection(DescribeCollectionReq.builder()
+                .collectionName(newCollection)
+                .build());
+        List<String> fieldNames = describeCollectionResp.getFieldNames();
+        // except for the first field (pk) and the last field(vector), other fields should have nullable property
+        for(int i = 1; i < fieldNames.size()-1; i++){
+            Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(fieldNames.get(i)).getIsNullable());
+        }
+        // except for the first field (pk), json, array, and the last field(vector), other fields should have nullable property
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldInt32).getDefaultValue().equals(CommonData.defaultValueInt));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldInt16).getDefaultValue().equals(CommonData.defaultValueShort));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldInt8).getDefaultValue().equals(CommonData.defaultValueShort));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldDouble).getDefaultValue().equals(CommonData.defaultValueDouble));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldFloat).getDefaultValue().equals(CommonData.defaultValueFloat));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldVarchar).getDefaultValue().equals(CommonData.defaultValueString));
+        Assert.assertTrue(describeCollectionResp.getCollectionSchema().getField(CommonData.fieldBool).getDefaultValue().equals(CommonData.defaultValueBool));
+        milvusClientV2.dropCollection(DropCollectionReq.builder().collectionName(newCollection).build());
     }
+
 }