docstr: collection schema: [pk, float_vector,
                  float_scalar, int_scalar, string_scalar, bool_scalar]
  data files: json file that one of entities has typo on boolean field
  Steps:
  1. create collection
  2. import data
  3. verify import failed with errors
code: def test_data_type_typo_on_bool(
      self, is_row_based, auto_id, dim, entities
  ):
      """
      collection schema: [pk, float_vector,
                      float_scalar, int_scalar, string_scalar, bool_scalar]
      data files: json file that one of entities has typo on boolean field
      Steps:
      1. create collection
      2. import data
      3. verify import failed with errors
      """
  
      multi_fields = [
          df.vec_field,
          df.int_field,
          df.string_field,
          df.bool_field,
          df.float_field,
      ]
      if not auto_id:
          multi_fields.insert(0, df.pk_field)
      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,
          data_fields=default_multi_fields,
          err_type=DataErrorType.typo_on_bool,
          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_float_vec_field(name=df.vec_field, dim=dim),
          cf.gen_int32_field(name=df.int_field),
          cf.gen_float_field(name=df.float_field),
          cf.gen_string_field(name=df.string_field),
          cf.gen_bool_field(name=df.bool_field),
      ]
      schema = cf.gen_collection_schema(fields=fields, auto_id=auto_id)
      self.collection_wrap.init_collection(c_name, schema=schema)
  
      # import data
      task_id, _ = self.utility_wrap.do_bulk_insert(
          collection_name=c_name, files=files
      )
      logging.info(f"bulk insert task ids:{task_id}")
      (
          success,
          states,
      ) = self.utility_wrap.wait_for_bulk_insert_tasks_completed(
          task_ids=[task_id], timeout=90
      )
      log.info(f"bulk insert state:{success}")
      assert not success
      failed_reason1 = "illegal value"
      failed_reason2 = "invalid character"
      for state in states.values():
          assert state.state_name in ["Failed", "Failed and cleaned"]
          assert failed_reason1 in state.infos.get(
              "failed_reason", ""
          ) or failed_reason2 in state.infos.get("failed_reason", "")
      assert self.collection_wrap.num_entities == 0
  
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 19 for calling the TestBulkInsertInvalidParams obj's underlying member method code with example usage: obj.test_data_type_typo_on_bool(is_row_based, auto_id, dim, entities) without return types