docstr: collection: auto_id, customized_id
  collection schema: [pk, int64, binary_vector]
  Step:
  1. create collection
  2. create index and load collection
  3. import data
  4. verify data entities
  5. load collection
  6. verify search successfully
  7. verify query successfully
docstr_tok: ["collection",":","auto_id",",","customized_id","collection","schema",":","[","pk",",","int64",",","binary_vector","]","Step",":","1.","create","collection","2.","create","index","and","load","collection","3.","import","data","4.","verify","data","entities","5.","load","collection","6.","verify","search","successfully","7.","verify","query","successfully"]
code: def test_binary_vector_csv(self, auto_id, dim, entities):
      """
      collection: auto_id, customized_id
      collection schema: [pk, int64, binary_vector]
      Step:
      1. create collection
      2. create index and load collection
      3. import data
      4. verify data entities
      5. load collection
      6. verify search successfully
      7. verify query successfully
      """
      files = prepare_bulk_insert_csv_files(
          minio_endpoint=self.minio_endpoint,
          bucket_name=self.bucket_name,
          rows=entities,
          dim=dim,
          auto_id=auto_id,
          float_vector=False,
          data_fields=default_vec_only_fields,
          force=True,
      )
      self._connect()
      c_name = cf.gen_unique_str("bulk_insert")
      fields = [
          cf.gen_int64_field(name=df.pk_field, is_primary=True),
          cf.gen_binary_vec_field(name=df.vec_field, dim=dim),
      ]
      schema = cf.gen_collection_schema(fields=fields, auto_id=auto_id)
      self.collection_wrap.init_collection(c_name, schema=schema)
      # build index before bulk insert
      binary_index_params = {
          "index_type": "BIN_IVF_FLAT",
          "metric_type": "JACCARD",
          "params": {"nlist": 64},
      }
      self.collection_wrap.create_index(
          field_name=df.vec_field, index_params=binary_index_params
      )
      # load collection
      self.collection_wrap.load()
      # import data
      t0 = time.time()
      task_id, _ = self.utility_wrap.do_bulk_insert(
          collection_name=c_name, partition_name=None, files=files
      )
      logging.info(f"bulk insert task ids:{task_id}")
      (
          success,
          _,
      ) = self.utility_wrap.wait_for_bulk_insert_tasks_completed(
          task_ids=[task_id], timeout=300
      )
      tt = time.time() - t0
      log.info(f"bulk insert state:{success} in {tt}")
      assert success
      time.sleep(2)
      self.utility_wrap.wait_for_index_building_complete(
          c_name, timeout=300
      )
      res, _ = self.utility_wrap.index_building_progress(c_name)
      log.info(f"index building progress: {res}")
  
      # verify num entities
      assert self.collection_wrap.num_entities == entities
      # verify search and query
      log.info(f"wait for load finished and be ready for search")
      self.collection_wrap.load(_refresh=True)
      time.sleep(2)
      search_data = cf.gen_binary_vectors(1, dim)[1]
      search_params = {
          "metric_type": "JACCARD",
          "params": {"nprobe": 10},
      }
      res, _ = self.collection_wrap.search(
          search_data,
          df.vec_field,
          param=search_params,
          limit=1,
          check_task=CheckTasks.check_search_results,
          check_items={"nq": 1, "limit": 1},
      )
      for hits in res:
          ids = hits.ids
          results, _ = self.collection_wrap.query(
              expr=f"{df.pk_field} in {ids}"
          )
          assert len(results) == len(ids)
  
imports: import logging
  import time
  import pytest
  from pymilvus import DataType
  import numpy
  from pathlib import Path
  from base.client_base import TestcaseBase
  from common import common_func
  from common import common_type
  from common.milvus_sys import MilvusSys
  from common.common_type import CaseLabel, CheckTasks
  from utils.util_log import test_log
  from common.bulk_insert_data import prepare_bulk_insert_json_files, prepare_bulk_insert_new_json_files, prepare_bulk_insert_numpy_files, prepare_bulk_insert_parquet_files, prepare_bulk_insert_csv_files, DataField
label_desc: Use image node_id 17 for calling the TestBulkInsert obj's underlying member method code with example usage: obj.test_binary_vector_csv(auto_id, dim, entities) without return types