BaseTest.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. package com.zilliz.milvustest.common;
  2. import com.zilliz.milvustest.MilvustestApplication;
  3. import com.zilliz.milvustest.util.MathUtil;
  4. import com.zilliz.milvustest.util.PropertyFilesUtil;
  5. import io.milvus.client.MilvusServiceClient;
  6. import io.milvus.grpc.DataType;
  7. import io.milvus.grpc.MutationResult;
  8. import io.milvus.param.*;
  9. import io.milvus.param.alias.CreateAliasParam;
  10. import io.milvus.param.collection.CreateCollectionParam;
  11. import io.milvus.param.collection.DropCollectionParam;
  12. import io.milvus.param.collection.FieldType;
  13. import io.milvus.param.collection.HasCollectionParam;
  14. import io.milvus.param.credential.CreateCredentialParam;
  15. import io.milvus.param.credential.DeleteCredentialParam;
  16. import io.milvus.param.dml.InsertParam;
  17. import io.milvus.param.index.CreateIndexParam;
  18. import io.milvus.param.partition.CreatePartitionParam;
  19. import org.apache.log4j.Logger;
  20. import org.springframework.boot.test.context.SpringBootTest;
  21. import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
  22. import org.springframework.test.context.web.WebAppConfiguration;
  23. import org.testng.annotations.AfterSuite;
  24. import org.testng.annotations.BeforeSuite;
  25. import org.testng.asserts.SoftAssert;
  26. import java.io.BufferedWriter;
  27. import java.io.IOException;
  28. import java.nio.charset.StandardCharsets;
  29. import java.nio.file.Files;
  30. import java.nio.file.Path;
  31. import java.nio.file.Paths;
  32. import java.util.ArrayList;
  33. import java.util.List;
  34. @SpringBootTest(classes = MilvustestApplication.class)
  35. @WebAppConfiguration
  36. public class BaseTest extends AbstractTestNGSpringContextTests {
  37. public static Logger logger = Logger.getLogger(BaseTest.class);
  38. public static SoftAssert softAssert = new SoftAssert();
  39. public static final MilvusServiceClient milvusClient =
  40. new MilvusServiceClient(
  41. ConnectParam.newBuilder()
  42. .withHost(
  43. System.getProperty("milvusHost") == null
  44. ? PropertyFilesUtil.getRunValue("milvusHost")
  45. : System.getProperty("milvusHost"))
  46. .withPort(
  47. Integer.parseInt(
  48. System.getProperty("milvusPort") == null
  49. ? PropertyFilesUtil.getRunValue("milvusPort")
  50. : System.getProperty("milvusPort")))
  51. //.withAuthorization("root","1qaz@WSX")
  52. //.withAuthorization("root","Milvus")
  53. //.withAuthorization("root", "Lyp0107!")
  54. //.withAuthorization(CommonData.defaultUserName,CommonData.defaultPassword)
  55. //.withSecure(true)
  56. .build());
  57. @BeforeSuite(alwaysRun = true)
  58. public void initCollection() {
  59. System.out.println(
  60. "**************************************************BeforeSuit**********************");
  61. initEvn();
  62. // check collection is existed
  63. List<String> collections =
  64. new ArrayList<String>() {
  65. {
  66. add(CommonData.defaultCollection);
  67. add(CommonData.defaultBinaryCollection);
  68. add(CommonData.defaultStringPKCollection);
  69. add(CommonData.defaultStringPKBinaryCollection);
  70. }
  71. };
  72. checkCollection(collections);
  73. // create collection with float Vector
  74. initFloatVectorCollection();
  75. // create collection with binary vector
  76. initBinaryVectorCollection();
  77. // create String PK collection with float Vector
  78. initStringPKCollection();
  79. // create String PK collection with binary Vector
  80. initStringPKBinaryCollection();
  81. }
  82. @AfterSuite(alwaysRun = true)
  83. public void cleanTestData() {
  84. System.out.println(
  85. "**************************************************AfterSuit**********************");
  86. logger.info("drop Default Collection");
  87. milvusClient.dropCollection(
  88. DropCollectionParam.newBuilder().withCollectionName(CommonData.defaultCollection).build());
  89. milvusClient.dropCollection(
  90. DropCollectionParam.newBuilder()
  91. .withCollectionName(CommonData.defaultBinaryCollection)
  92. .build());
  93. milvusClient.dropCollection(
  94. DropCollectionParam.newBuilder()
  95. .withCollectionName(CommonData.defaultStringPKCollection)
  96. .build());
  97. milvusClient.dropCollection(
  98. DropCollectionParam.newBuilder()
  99. .withCollectionName(CommonData.defaultStringPKBinaryCollection)
  100. .build());
  101. logger.info("delete Default Credential:" + CommonData.defaultUserName);
  102. milvusClient.deleteCredential(
  103. DeleteCredentialParam.newBuilder().withUsername(CommonData.defaultUserName).build());
  104. milvusClient.close();
  105. }
  106. public void initEvn() {
  107. logger.info("Initializing the Environment");
  108. // delete allure-result
  109. logger.info("Deletes all history json in the allure-result folder");
  110. MathUtil.delAllFile("allure-results");
  111. // write environment for allure
  112. String filename = "./allure-results/environment.properties";
  113. Path path = Paths.get(filename);
  114. String contentStr =
  115. "milvus.url="
  116. + PropertyFilesUtil.getRunValue("milvusHost")
  117. + "\n"
  118. + "milvus.version="
  119. + PropertyFilesUtil.getRunValue("milvusV")
  120. + "\n"
  121. + "milvus-jdk-java.version="
  122. + PropertyFilesUtil.getRunValue("milvusJdkJavaV")
  123. + "";
  124. try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
  125. writer.write(contentStr);
  126. } catch (IOException e) {
  127. logger.error(e.getMessage());
  128. }
  129. }
  130. // generate collection with binary vector
  131. public void initBinaryVectorCollection() {
  132. FieldType fieldType1 =
  133. FieldType.newBuilder()
  134. .withName("book_id")
  135. .withDataType(DataType.Int64)
  136. .withPrimaryKey(true)
  137. .withAutoID(false)
  138. .build();
  139. FieldType fieldType2 =
  140. FieldType.newBuilder().withName("word_count").withDataType(DataType.Int64).build();
  141. FieldType fieldType3 =
  142. FieldType.newBuilder()
  143. .withName(CommonData.defaultBinaryVectorField)
  144. .withDataType(DataType.BinaryVector)
  145. .withDimension(128)
  146. .build();
  147. CreateCollectionParam createCollectionReq =
  148. CreateCollectionParam.newBuilder()
  149. .withCollectionName(CommonData.defaultBinaryCollection)
  150. .withDescription("Test " + CommonData.defaultBinaryCollection + " search")
  151. .withShardsNum(2)
  152. .addFieldType(fieldType1)
  153. .addFieldType(fieldType2)
  154. .addFieldType(fieldType3)
  155. .build();
  156. logger.info("Create binary vector collection:" + CommonData.defaultBinaryCollection);
  157. milvusClient.createCollection(createCollectionReq);
  158. logger.info(
  159. CommonData.defaultBinaryCollection
  160. + "Create Partition:"
  161. + CommonData.defaultBinaryPartition);
  162. milvusClient.createPartition(
  163. CreatePartitionParam.newBuilder()
  164. .withCollectionName(CommonData.defaultBinaryCollection)
  165. .withPartitionName(CommonData.defaultBinaryPartition)
  166. .build());
  167. logger.info(
  168. (CommonData.defaultBinaryCollection + "Create Alies:" + CommonData.defaultBinaryAlias));
  169. milvusClient.createAlias(
  170. CreateAliasParam.newBuilder()
  171. .withCollectionName(CommonData.defaultBinaryCollection)
  172. .withAlias(CommonData.defaultBinaryAlias)
  173. .build());
  174. logger.info(
  175. CommonData.defaultBinaryCollection + "Create Index:" + CommonData.defaultBinaryIndex);
  176. milvusClient.createIndex(
  177. CreateIndexParam.newBuilder()
  178. .withCollectionName(CommonData.defaultBinaryCollection)
  179. .withFieldName(CommonData.defaultBinaryVectorField)
  180. .withIndexName(CommonData.defaultBinaryIndex)
  181. .withMetricType(MetricType.JACCARD)
  182. .withIndexType(IndexType.BIN_IVF_FLAT)
  183. .withExtraParam(CommonData.defaultExtraParam)
  184. .withSyncMode(Boolean.FALSE)
  185. .build());
  186. logger.info("insert data");
  187. milvusClient.insert(
  188. InsertParam.newBuilder()
  189. .withCollectionName(CommonData.defaultBinaryCollection)
  190. .withPartitionName(CommonData.defaultBinaryPartition)
  191. .withFields(CommonFunction.generateBinaryData(2000))
  192. .build());
  193. }
  194. // generate collection with float vector
  195. public void initFloatVectorCollection() {
  196. FieldType fieldType1 =
  197. FieldType.newBuilder()
  198. .withName("book_id")
  199. .withDataType(DataType.Int64)
  200. .withPrimaryKey(true)
  201. .withAutoID(false)
  202. .build();
  203. FieldType fieldType2 =
  204. FieldType.newBuilder().withName("word_count").withDataType(DataType.Int64).build();
  205. FieldType fieldType3 =
  206. FieldType.newBuilder()
  207. .withName(CommonData.defaultVectorField)
  208. .withDataType(DataType.FloatVector)
  209. .withDimension(128)
  210. .build();
  211. CreateCollectionParam createCollectionReq =
  212. CreateCollectionParam.newBuilder()
  213. .withCollectionName(CommonData.defaultCollection)
  214. .withDescription("Test " + CommonData.defaultCollection + " search")
  215. .withShardsNum(2)
  216. .addFieldType(fieldType1)
  217. .addFieldType(fieldType2)
  218. .addFieldType(fieldType3)
  219. .build();
  220. logger.info("Create Default Collection:" + CommonData.defaultCollection);
  221. milvusClient.createCollection(createCollectionReq);
  222. logger.info((CommonData.defaultCollection + "Create Alies:" + CommonData.defaultAlias));
  223. milvusClient.createAlias(
  224. CreateAliasParam.newBuilder()
  225. .withCollectionName(CommonData.defaultCollection)
  226. .withAlias(CommonData.defaultAlias)
  227. .build());
  228. logger.info(CommonData.defaultCollection + "Create Partition:" + CommonData.defaultPartition);
  229. milvusClient.createPartition(
  230. CreatePartitionParam.newBuilder()
  231. .withCollectionName(CommonData.defaultCollection)
  232. .withPartitionName(CommonData.defaultPartition)
  233. .build());
  234. logger.info(CommonData.defaultCollection + "Create Index:" + CommonData.defaultIndex);
  235. milvusClient.createIndex(
  236. CreateIndexParam.newBuilder()
  237. .withCollectionName(CommonData.defaultCollection)
  238. .withFieldName(CommonData.defaultVectorField)
  239. .withIndexName(CommonData.defaultIndex)
  240. .withMetricType(MetricType.L2)
  241. .withIndexType(IndexType.IVF_FLAT)
  242. .withExtraParam(CommonData.defaultExtraParam)
  243. .withSyncMode(Boolean.FALSE)
  244. .build());
  245. logger.info("insert data");
  246. List<InsertParam.Field> fields = CommonFunction.generateData(2000);
  247. milvusClient.insert(
  248. InsertParam.newBuilder()
  249. .withCollectionName(CommonData.defaultCollection)
  250. .withPartitionName(CommonData.defaultPartition)
  251. .withFields(fields)
  252. .build());
  253. logger.info("Create Default Credential:" + CommonData.defaultUserName);
  254. milvusClient.createCredential(
  255. CreateCredentialParam.newBuilder()
  256. .withUsername(CommonData.defaultUserName)
  257. .withPassword(CommonData.defaultPassword)
  258. .build());
  259. }
  260. // generate Collection with String primary key and float vector
  261. public void initStringPKCollection() {
  262. FieldType strFieldType1 =
  263. FieldType.newBuilder()
  264. .withName("book_name")
  265. .withDataType(DataType.VarChar)
  266. .withMaxLength(20)
  267. .withPrimaryKey(true)
  268. .withAutoID(false)
  269. .build();
  270. FieldType strFieldType2 =
  271. FieldType.newBuilder()
  272. .withName("book_content")
  273. .withDataType(DataType.VarChar)
  274. .withMaxLength(20)
  275. .build();
  276. FieldType strFieldType3 =
  277. FieldType.newBuilder()
  278. .withName(CommonData.defaultVectorField)
  279. .withDataType(DataType.FloatVector)
  280. .withDimension(128)
  281. .build();
  282. CreateCollectionParam createStrCollectionReq =
  283. CreateCollectionParam.newBuilder()
  284. .withCollectionName(CommonData.defaultStringPKCollection)
  285. .withDescription("Test" + CommonData.defaultStringPKCollection + "search")
  286. .withShardsNum(2)
  287. .addFieldType(strFieldType1)
  288. .addFieldType(strFieldType2)
  289. .addFieldType(strFieldType3)
  290. .build();
  291. BaseTest.milvusClient.createCollection(createStrCollectionReq);
  292. logger.info(
  293. "Create default String pk collection with String type field:" + CommonData.defaultStringPKCollection);
  294. logger.info((CommonData.defaultStringPKCollection + "Create Alies:" + CommonData.defaultStringPKAlias));
  295. milvusClient.createAlias(
  296. CreateAliasParam.newBuilder()
  297. .withCollectionName(CommonData.defaultStringPKCollection)
  298. .withAlias(CommonData.defaultStringPKAlias)
  299. .build());
  300. logger.info(CommonData.defaultStringPKCollection + "Create Partition:" + CommonData.defaultStringPKPartition);
  301. milvusClient.createPartition(
  302. CreatePartitionParam.newBuilder()
  303. .withCollectionName(CommonData.defaultStringPKCollection)
  304. .withPartitionName(CommonData.defaultStringPKPartition)
  305. .build());
  306. logger.info(CommonData.defaultStringPKCollection + "Create Index:" + CommonData.defaultIndex);
  307. milvusClient.createIndex(
  308. CreateIndexParam.newBuilder()
  309. .withCollectionName(CommonData.defaultStringPKCollection)
  310. .withFieldName(CommonData.defaultVectorField)
  311. .withIndexName(CommonData.defaultIndex)
  312. .withMetricType(MetricType.L2)
  313. .withIndexType(IndexType.IVF_FLAT)
  314. .withExtraParam(CommonData.defaultExtraParam)
  315. .withSyncMode(Boolean.FALSE)
  316. .build());
  317. logger.info("insert data");
  318. List<InsertParam.Field> fields = CommonFunction.generateStringData(2000);
  319. milvusClient.insert(
  320. InsertParam.newBuilder()
  321. .withCollectionName(CommonData.defaultStringPKCollection)
  322. .withPartitionName(CommonData.defaultStringPKPartition)
  323. .withFields(fields)
  324. .build());
  325. }
  326. // generate Collection with String primary key and binary vector
  327. public void initStringPKBinaryCollection() {
  328. FieldType strFieldType1 =
  329. FieldType.newBuilder()
  330. .withName("book_name")
  331. .withDataType(DataType.VarChar)
  332. .withMaxLength(20)
  333. .withPrimaryKey(true)
  334. .withAutoID(false)
  335. .build();
  336. FieldType strFieldType2 =
  337. FieldType.newBuilder()
  338. .withName("book_content")
  339. .withDataType(DataType.VarChar)
  340. .withMaxLength(20)
  341. .build();
  342. FieldType strFieldType3 =
  343. FieldType.newBuilder()
  344. .withName(CommonData.defaultBinaryVectorField)
  345. .withDataType(DataType.BinaryVector)
  346. .withDimension(128)
  347. .build();
  348. CreateCollectionParam createStrCollectionReq =
  349. CreateCollectionParam.newBuilder()
  350. .withCollectionName(CommonData.defaultStringPKBinaryCollection)
  351. .withDescription("Test" + CommonData.defaultStringPKBinaryCollection + "search")
  352. .withShardsNum(2)
  353. .addFieldType(strFieldType1)
  354. .addFieldType(strFieldType2)
  355. .addFieldType(strFieldType3)
  356. .build();
  357. BaseTest.milvusClient.createCollection(createStrCollectionReq);
  358. logger.info(
  359. "Create default String pk and binary vector collection with String type field:" + CommonData.defaultStringPKBinaryCollection);
  360. logger.info(CommonData.defaultStringPKBinaryCollection + "Create Partition:" + CommonData.defaultStringPKBinaryPartition);
  361. milvusClient.createPartition(
  362. CreatePartitionParam.newBuilder()
  363. .withCollectionName(CommonData.defaultStringPKBinaryCollection)
  364. .withPartitionName(CommonData.defaultStringPKBinaryPartition)
  365. .build());
  366. logger.info(CommonData.defaultStringPKBinaryCollection + "Create Index:" + CommonData.defaultBinaryIndex);
  367. milvusClient.createIndex(
  368. CreateIndexParam.newBuilder()
  369. .withCollectionName(CommonData.defaultStringPKBinaryCollection)
  370. .withFieldName(CommonData.defaultBinaryVectorField)
  371. .withIndexName(CommonData.defaultBinaryIndex)
  372. .withMetricType(MetricType.JACCARD)
  373. .withIndexType(IndexType.BIN_IVF_FLAT)
  374. .withExtraParam(CommonData.defaultExtraParam)
  375. .withSyncMode(Boolean.FALSE)
  376. .build());
  377. logger.info("insert data");
  378. List<InsertParam.Field> fields = CommonFunction.generateStringPKBinaryData(2000);
  379. R<MutationResult> insert = milvusClient.insert(
  380. InsertParam.newBuilder()
  381. .withCollectionName(CommonData.defaultStringPKBinaryCollection)
  382. .withPartitionName(CommonData.defaultStringPKBinaryPartition)
  383. .withFields(fields)
  384. .build());
  385. logger.info("String pk and binary vector collection insert data"+insert.getStatus());
  386. }
  387. public void checkCollection(List<String> collections) {
  388. collections.forEach(
  389. x -> {
  390. R<Boolean> booleanR =
  391. milvusClient.hasCollection(
  392. HasCollectionParam.newBuilder().withCollectionName(x).build());
  393. if (booleanR.getData()) {
  394. milvusClient.dropCollection(
  395. DropCollectionParam.newBuilder().withCollectionName(x).build());
  396. }
  397. });
  398. }
  399. }