示例#1
0
  /** Tests scanning for multiple prefixes. */
  public void testScanPrefixMultiple() throws StorageException {
    List<String> keys =
        Arrays.asList(
            "/root/foo", "/root/bar", "/root/baz", "/some/other/file", "/a/different/file");
    for (String s : keys) {
      store.put(StringUtils.stringToBytes(s), new byte[] {});
    }

    // well-known prefix
    store.scan(Arrays.asList(StringUtils.stringToBytes("/roo")), callback);
    checkSubsetAndClear(3, keys, callback.keys);

    // overlapping prefix
    store.scan(
        Arrays.asList(StringUtils.stringToBytes("/roo"), StringUtils.stringToBytes("/root/f")),
        callback);
    checkSubsetAndClear(3, keys, callback.keys);

    // no prefixes
    store.scan(new ArrayList<byte[]>(), callback);
    checkSubsetAndClear(0, keys, callback.keys);

    // multiple
    store.scan(
        Arrays.asList(StringUtils.stringToBytes("/roo"), StringUtils.stringToBytes("/a/di")),
        callback);
    checkSubsetAndClear(4, keys, callback.keys);
  }
示例#2
0
  /** Tests the corner case in prefix scanning interface. */
  public void testScanPrefixCornerCase() throws StorageException {
    byte[] prefix = {17, 18, 19, (byte) 0xff};
    store.put(prefix, prefix);

    CollectingCallBack callback = new CollectingCallBack();
    store.scan(prefix, callback);
    assertEquals(1, callback.keys.size());
  }
示例#3
0
  /** Tests the prefix scanning interface. */
  public void testScanPrefix() throws StorageException {
    List<String> keys = Arrays.asList("/root/foo", "/root/bar", "/root/baz", "/some/other/file");
    for (String s : keys) {
      store.put(StringUtils.stringToBytes(s), new byte[] {});
    }

    // well-known prefix
    store.scan(StringUtils.stringToBytes("/roo"), callback);
    checkSubsetAndClear(3, keys, callback.keys);

    // invalid prefix
    store.scan(StringUtils.stringToBytes("inv"), callback);
    checkSubsetAndClear(0, keys, callback.keys);

    // empty prefix
    store.scan(new byte[] {}, callback);
    checkSubsetAndClear(keys.size(), keys, callback.keys);
  }
示例#4
0
  /** Tests the range scanning interface. */
  public void testScanRange() throws StorageException {
    // space makes first key appear before others
    List<String> keys =
        Arrays.asList(StringUtils.SPACE + "first", "aab", "aac", "abc", "aaa", "aaaa");
    for (String s : keys) {
      store.put(StringUtils.stringToBytes(s), new byte[] {});
    }

    store.scan(StringUtils.stringToBytes("aaa"), StringUtils.stringToBytes("aaa"), callback);
    assertEquals(0, callback.keys.size());

    callback.keys.clear();
    store.scan(StringUtils.stringToBytes("aaa"), StringUtils.stringToBytes("aaab"), callback);
    assertEquals(
        new HashSet<String>(Arrays.asList("aaa", "aaaa")), new HashSet<String>(callback.keys));

    callback.keys.clear();
    store.scan(StringUtils.stringToBytes("aabq"), null, callback);
    assertEquals(
        new HashSet<String>(Arrays.asList("aac", "abc")), new HashSet<String>(callback.keys));
  }
示例#5
0
  /** Test for multi-get and set. */
  public void testSetGetMultiple() throws StorageException {
    PairList<byte[], byte[]> entries = new PairList<byte[], byte[]>();
    entries.add(new byte[] {1}, new byte[] {1});
    entries.add(new byte[] {2}, new byte[] {2});
    store.put(entries);
    List<byte[]> values = store.get(Arrays.asList(new byte[] {1}, new byte[] {3}, new byte[] {2}));
    assertEquals(3, values.size());
    assertTrue(Arrays.equals(new byte[] {1}, values.get(0)));
    assertNull(values.get(1));
    assertTrue(Arrays.equals(new byte[] {2}, values.get(2)));

    store.remove(entries.extractFirstList());
    store.scan(new byte[] {}, callback);
    assertEquals(0, callback.keys.size());
  }