Details
Description
The api for deleteRows specifies: Delete rows between (start, end] but the current implementation for MockTableOperations.deleteRows is implemented as (start, end)
Here is the failing test case
public class TestDelete { private static final String INSTANCE = "mock"; private static final String TABLE = "foo"; private static final String USER = "user"; private static final String PASS = "password"; private static final Authorizations AUTHS = new Authorizations(); @Test public void testDelete() throws TableNotFoundException, AccumuloException, AccumuloSecurityException, TableExistsException { MockInstance mockAcc = new MockInstance(INSTANCE); Connector conn = mockAcc.getConnector(USER, new PasswordToken(PASS)); conn.tableOperations().create(TABLE); conn.securityOperations().grantTablePermission(USER, TABLE, TablePermission.READ); conn.securityOperations().grantTablePermission(USER, TABLE, TablePermission.WRITE); Mutation mut = new Mutation("2"); mut.put("colfam", "colqual", "value"); BatchWriter writer = conn.createBatchWriter(TABLE, new BatchWriterConfig()); writer.addMutation(mut); Scanner scan = conn.createScanner(TABLE, AUTHS); scan.setRange(new Range("2", "2")); assertEquals(1, countRecords(scan)); // this should delete (1,2] conn.tableOperations().deleteRows(TABLE, new Text("1"), new Text("2")); scan = conn.createScanner(TABLE, AUTHS); scan.setRange(new Range("2", "2")); // this will fail if row 2 exists assertEquals(0, countRecords(scan)); } private int countRecords(Scanner scan) { int cnt = 0; for (Entry<Key, Value> entry : scan) { cnt++; } scan.close(); return cnt; } }