@SuppressWarnings("unchecked")
 public void insertStringTuples(IIndexTestContext ctx, int numTuples, Random rnd)
     throws Exception {
   int fieldCount = ctx.getFieldCount();
   int numKeyFields = ctx.getKeyFieldCount();
   String[] fieldValues = new String[fieldCount];
   for (int i = 0; i < numTuples; i++) {
     if (LOGGER.isLoggable(Level.INFO)) {
       if ((i + 1) % (numTuples / Math.min(10, numTuples)) == 0) {
         LOGGER.info("Inserting Tuple " + (i + 1) + "/" + numTuples);
       }
     }
     // Set keys.
     for (int j = 0; j < numKeyFields; j++) {
       int length = (Math.abs(rnd.nextInt()) % 10) + 1;
       fieldValues[j] = getRandomString(length, rnd);
     }
     // Set values.
     for (int j = numKeyFields; j < fieldCount; j++) {
       fieldValues[j] = getRandomString(5, rnd);
     }
     TupleUtils.createTuple(
         ctx.getTupleBuilder(), ctx.getTuple(), ctx.getFieldSerdes(), (Object[]) fieldValues);
     try {
       ctx.getIndexAccessor().insert(ctx.getTuple());
       // Set expected values. Do this only after insertion succeeds
       // because we ignore duplicate keys.
       ctx.insertCheckTuple(
           createStringCheckTuple(fieldValues, ctx.getKeyFieldCount()), ctx.getCheckTuples());
     } catch (TreeIndexDuplicateKeyException e) {
       // Ignore duplicate key insertions.
     }
   }
 }