ACCUMULO-1505 - Applying Ryan Leary's patch
git-svn-id: https://svn.apache.org/repos/asf/accumulo/branches/1.4@1491900 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/225d7286 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/225d7286 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/225d7286 Branch: refs/heads/master Commit: 225d7286d2d5f382c7caef83ea7e6f22c044291a Parents: 8fd1c3b Author: John Vines <[email protected]> Authored: Tue Jun 11 18:50:30 2013 +0000 Committer: John Vines <[email protected]> Committed: Tue Jun 11 18:50:30 2013 +0000 ---------------------------------------------------------------------- .../core/client/mock/MockBatchWriter.java | 3 ++ .../accumulo/core/client/mock/MockTable.java | 2 + .../core/client/mock/MockConnectorTest.java | 39 ++++++++++++++++++++ 3 files changed, 44 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/225d7286/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchWriter.java ---------------------------------------------------------------------- diff --git a/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchWriter.java b/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchWriter.java index b33ebcb..d89a263 100644 --- a/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchWriter.java +++ b/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchWriter.java @@ -19,6 +19,7 @@ package org.apache.accumulo.core.client.mock; import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.MutationsRejectedException; import org.apache.accumulo.core.data.Mutation; +import org.apache.accumulo.core.util.ArgumentChecker; public class MockBatchWriter implements BatchWriter { @@ -32,11 +33,13 @@ public class MockBatchWriter implements BatchWriter { @Override public void addMutation(Mutation m) throws MutationsRejectedException { + ArgumentChecker.notNull(m); acu.addMutation(tablename, m); } @Override public void addMutations(Iterable<Mutation> iterable) throws MutationsRejectedException { + ArgumentChecker.notNull(iterable); for (Mutation m : iterable) { acu.addMutation(tablename, m); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/225d7286/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockTable.java ---------------------------------------------------------------------- diff --git a/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockTable.java b/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockTable.java index 0722ba1..999c9b2 100644 --- a/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockTable.java +++ b/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockTable.java @@ -97,6 +97,8 @@ public class MockTable { } synchronized void addMutation(Mutation m) { + if (m.size() == 0) + throw new IllegalArgumentException("Can not add empty mutations"); long now = System.currentTimeMillis(); mutationCount++; for (ColumnUpdate u : m.getUpdates()) { http://git-wip-us.apache.org/repos/asf/accumulo/blob/225d7286/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java ---------------------------------------------------------------------- diff --git a/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java b/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java index ab1ffb5..6fa9dff 100644 --- a/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java +++ b/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java @@ -20,8 +20,10 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; +import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; +import java.util.List; import java.util.Map.Entry; import java.util.Random; @@ -92,6 +94,43 @@ public class MockConnectorTest { } @Test + public void testBadMutations() throws Exception { + Connector c = new MockConnector("root", new MockInstance()); + c.tableOperations().create("test"); + BatchWriter bw = c.createBatchWriter("test", 10000L, 1000L, 4); + + try { + bw.addMutation(null); + Assert.fail("addMutation should throw IAE for null mutation"); + } catch (IllegalArgumentException iae) {} + try { + bw.addMutations(null); + Assert.fail("addMutations should throw IAE for null iterable"); + } catch (IllegalArgumentException iae) {} + + bw.addMutations(Collections.EMPTY_LIST); + + Mutation bad = new Mutation("bad"); + try { + bw.addMutation(bad); + Assert.fail("addMutation should throw IAE for empty mutation"); + } catch (IllegalArgumentException iae) {} + + + Mutation good = new Mutation("good"); + good.put(asText(random.nextInt()), asText(random.nextInt()), new Value("good".getBytes())); + List<Mutation> mutations = new ArrayList<Mutation>(); + mutations.add(good); + mutations.add(bad); + try { + bw.addMutations(mutations); + Assert.fail("addMutations should throw IAE if it contains empty mutation"); + } catch (IllegalArgumentException iae) {} + + bw.close(); + } + + @Test public void testAggregation() throws Exception { MockInstance mockInstance = new MockInstance(); Connector c = mockInstance.getConnector("root", new byte[] {});
