diff --git a/src/main/java/io/milvus/v2/service/rbac/RBACService.java b/src/main/java/io/milvus/v2/service/rbac/RBACService.java index c14b33072..48aa32189 100644 --- a/src/main/java/io/milvus/v2/service/rbac/RBACService.java +++ b/src/main/java/io/milvus/v2/service/rbac/RBACService.java @@ -254,7 +254,7 @@ public ListPrivilegeGroupsResp listPrivilegeGroups(MilvusServiceGrpc.MilvusServi privilegeGroupInfo.getPrivilegesList().forEach((privilege)->{ privileges.add(privilege.getName()); }); - privilegeGroups.add(PrivilegeGroup.builder().privileges(privileges).build()); + privilegeGroups.add(PrivilegeGroup.builder().groupName(privilegeGroupInfo.getGroupName()).privileges(privileges).build()); }); return ListPrivilegeGroupsResp.builder() diff --git a/src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java b/src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java index 94dcf12ef..430beda9c 100644 --- a/src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java +++ b/src/test/java/io/milvus/v2/client/MilvusClientV2DockerTest.java @@ -43,6 +43,9 @@ import io.milvus.v2.service.index.request.*; import io.milvus.v2.service.index.response.*; import io.milvus.v2.service.partition.request.*; +import io.milvus.v2.service.rbac.PrivilegeGroup; +import io.milvus.v2.service.rbac.request.*; +import io.milvus.v2.service.rbac.response.*; import io.milvus.v2.service.utility.request.*; import io.milvus.v2.service.utility.response.*; import io.milvus.v2.service.vector.request.*; @@ -1728,4 +1731,83 @@ void testMultiThreadsInsert() { Assertions.fail(e.getMessage()); } } + + @Test + void testDynamicField() { + String collectionName = generator.generate(10); + + client.createCollection(CreateCollectionReq.builder() + .collectionName(collectionName) + .dimension(DIMENSION) + .build()); + + List rows = new ArrayList<>(); + Gson gson = new Gson(); + for (int i = 0; i < 100; i++) { + JsonObject row = new JsonObject(); + row.addProperty("id", i); + row.add("vector", gson.toJsonTree(utils.generateFloatVector())); + row.addProperty(String.format("dynamic_%d", i), "this is dynamic value"); // this value is stored in dynamic field + rows.add(row); + } + InsertResp insertR = client.insert(InsertReq.builder() + .collectionName(collectionName) + .data(rows) + .build()); + + // query + QueryResp countR = client.query(QueryReq.builder() + .collectionName(collectionName) + .filter("") + .outputFields(Collections.singletonList("count(*)")) + .consistencyLevel(ConsistencyLevel.STRONG) + .build()); + Assertions.assertEquals(100L, (long)countR.getQueryResults().get(0).getEntity().get("count(*)")); + + GetResp getR = client.get(GetReq.builder() + .collectionName(collectionName) + .ids(Collections.singletonList(50L)) + .outputFields(Collections.singletonList("*")) + .build()); + Assertions.assertEquals(1, getR.getGetResults().size()); + QueryResp.QueryResult queryR = getR.getGetResults().get(0); + Assertions.assertTrue(queryR.getEntity().containsKey("dynamic_50")); + Assertions.assertEquals("this is dynamic value", queryR.getEntity().get("dynamic_50")); + + // search + SearchResp searchR = client.search(SearchReq.builder() + .collectionName(collectionName) + .data(Collections.singletonList(new FloatVec(utils.generateFloatVector()))) + .filter("id == 10") + .topK(10) + .outputFields(Collections.singletonList("dynamic_10")) + .build()); + List> searchResults = searchR.getSearchResults(); + Assertions.assertEquals(1, searchResults.size()); + Assertions.assertEquals(1, searchResults.get(0).size()); + SearchResp.SearchResult r = searchResults.get(0).get(0); + Assertions.assertTrue(r.getEntity().containsKey("dynamic_10")); + Assertions.assertEquals("this is dynamic value", r.getEntity().get("dynamic_10")); + } + + @Test + void testRBAC() { + client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder() + .groupName("dummy") + .build()); + client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder() + .groupName("dummy") + .privileges(Collections.singletonList("CreateCollection")) + .build()); + + ListPrivilegeGroupsResp resp = client.listPrivilegeGroups(ListPrivilegeGroupsReq.builder().build()); + List groups = resp.getPrivilegeGroups(); + Map> groupsPlivileges = new HashMap<>(); + for (PrivilegeGroup group : groups) { + groupsPlivileges.put(group.getGroupName(), group.getPrivileges()); + } + Assertions.assertTrue(groupsPlivileges.containsKey("dummy")); + Assertions.assertEquals(1, groupsPlivileges.get("dummy").size()); + Assertions.assertEquals("CreateCollection", groupsPlivileges.get("dummy").get(0)); + } }