docstr: collection schema: [pk, binary_vector]
  Steps:
  1. create collection
  2. create index and load collection
  3. import data
  4. verify build status
  5. verify the data entities
  6. load collection
  7. verify search successfully
  6. verify query successfully
code: def test_binary_vector_only(
      self, is_row_based, auto_id, dim, entities
  ):
      """
      collection schema: [pk, binary_vector]
      Steps:
      1. create collection
      2. create index and load collection
      3. import data
      4. verify build status
      5. verify the data entities
      6. load collection
      7. verify search successfully
      6. verify query successfully
      """
      float_vec = False
      files = prepare_bulk_insert_json_files(
          minio_endpoint=self.minio_endpoint,
          bucket_name=self.bucket_name,
          is_row_based=is_row_based,
          rows=entities,
          dim=dim,
          auto_id=auto_id,
          float_vector=float_vec,
          data_fields=default_vec_only_fields,
      )
      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, 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=90
      )
      tt = time.time() - t0
      log.info(f"bulk insert state:{success} in {tt}")
      assert success
      success = self.utility_wrap.wait_index_build_completed(c_name)
      assert success
      # 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(10)
      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
  import random
  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_k8s import get_pod_ip_name_pairs, get_milvus_instance_name, get_milvus_deploy_tool
  from utils.util_log import test_log
  from common.bulk_insert_data import prepare_bulk_insert_json_files, prepare_bulk_insert_numpy_files, DataField, DataErrorType
label_desc: Use image node_id 4 for calling the TestBulkInsert obj's underlying member method code with example usage: obj.test_binary_vector_only(is_row_based, auto_id, dim, entities) without return types