### Question:
IndexManager { public void mutate(final RowMutation mutation) throws BlurException, IOException { long s = System.nanoTime(); doMutates(Arrays.asList(mutation)); long e = System.nanoTime(); LOG.debug("doMutate took [{0} ms] to complete", (e - s) / 1000000.0); } IndexManager(IndexServer indexServer, ClusterStatus clusterStatus, BlurFilterCache filterCache,
      int maxHeapPerRowFetch, int fetchCount, int threadCount, int mutateThreadCount, int facetThreadCount,
      DeepPagingCache deepPagingCache, MemoryAllocationWatcher memoryAllocationWatcher, QueryStatusManager statusManager); synchronized void close(); List<FetchResult> fetchRowBatch(final String table, List<Selector> selectors); void fetchRow(String table, Selector selector, FetchResult fetchResult); static void populateSelector(IndexSearcherCloseable searcher, String shardName, String table, Selector selector); static void validSelector(Selector selector); BlurResultIterable query(final String table, final BlurQuery blurQuery, AtomicLongArray facetedCounts); String parseQuery(String table, org.apache.blur.thrift.generated.Query simpleQuery); void cancelQuery(String table, String uuid); List<BlurQueryStatus> currentQueries(String table); BlurQueryStatus queryStatus(String table, String uuid); List<String> queryStatusIdList(String table); static void fetchRow(IndexReader reader, String table, String shard, Selector selector,
      FetchResult fetchResult, Query highlightQuery, int maxHeap, TableContext tableContext, Filter filter); static void fetchRow(IndexReader reader, String table, String shard, Selector selector,
      FetchResult fetchResult, Query highlightQuery, FieldManager fieldManager, int maxHeap, TableContext tableContext,
      Filter filter); static ResetableDocumentStoredFieldVisitor getFieldSelector(final Selector selector); IndexServer getIndexServer(); long recordFrequency(final String table, final String columnFamily, final String columnName, final String value); List<String> terms(final String table, final String columnFamily, final String columnName,
      final String startWith, final short size); static long recordFrequency(IndexReader reader, String columnFamily, String columnName, String value); static List<String> terms(IndexReader reader, FieldTypeDefinition typeDef, String columnFamily,
      String columnName, String startWith, short size); void mutate(final RowMutation mutation); void mutate(final List<RowMutation> mutations); void enqueue(List<RowMutation> mutations); static boolean resetExitableReader(IndexReader indexReader, AtomicBoolean running); void optimize(String table, int numberOfSegmentsPerShard); void enqueue(RowMutation mutation); void bulkMutateAdd(String table, String bulkId, RowMutation mutation); void bulkMutateFinish(Set<String> potentialTables, String bulkId, boolean apply, boolean blockUntilComplete); void bulkMutateAddMultiple(String table, String bulkId, List<RowMutation> rowMutations); static final String NOT_FOUND; static AtomicBoolean DEBUG_RUN_SLOW; }### Answer:
@Test public void testMutationReplaceRowFailureWithNullRecordId() throws Exception { RowMutation mutation = newRowMutation( TABLE, "row-4", newRecordMutation(FAMILY, null, newColumn("testcol1", "value2"), newColumn("testcol2", "value3"), newColumn("testcol3", "value4"))); try { indexManager.mutate(mutation); fail(); } catch (BlurException e) { } }
@Test public void testMutationReplaceRowWithNullRowId() throws Exception { RowMutation mutation = newRowMutation( TABLE, null, newRecordMutation(FAMILY, "record-4", newColumn("testcol1", "value2"), newColumn("testcol2", "value3"), newColumn("testcol3", "value4"))); try { indexManager.mutate(mutation); fail(); } catch (BlurException e) { } }