@Test
  public void test_walk() {
    final RiakClient c = new RiakClient(RIAK_URL);

    final String ROOT = "root";
    final String LEAF1 = "leaf1";
    final String LEAF2 = "leaf2";
    final String EXCLUDED_LEAF = "excluded_leaf";
    final byte[] INCLUDED_VALUE = CharsetUtils.utf8StringToBytes("included");
    final byte[] EXCLUDED_VALUE = CharsetUtils.utf8StringToBytes("excluded");
    final String TAG_INCLUDE = "tag_include";
    final String TAG_EXCLUDE = "tag_exclude";

    // Clear out the objects we're testing with
    assertSuccess(c.delete(BUCKET, ROOT));
    assertSuccess(c.delete(BUCKET, LEAF1));
    assertSuccess(c.delete(BUCKET, LEAF2));
    assertSuccess(c.delete(BUCKET, EXCLUDED_LEAF));

    // Add a few objects
    RiakObject leaf1 = new RiakObject(BUCKET, LEAF1, INCLUDED_VALUE);
    RiakObject leaf2 = new RiakObject(BUCKET, LEAF2, INCLUDED_VALUE);
    RiakObject excludedLeaf = new RiakObject(BUCKET, EXCLUDED_LEAF, EXCLUDED_VALUE);
    RiakObject root =
        new RiakObject(c, BUCKET, ROOT)
            .addLink(new RiakLink(BUCKET, LEAF1, TAG_INCLUDE))
            .addLink(new RiakLink(BUCKET, LEAF2, TAG_INCLUDE))
            .addLink(new RiakLink(BUCKET, EXCLUDED_LEAF, TAG_EXCLUDE));
    assertSuccess(c.store(root, WRITE_3_REPLICAS()));
    assertSuccess(c.store(leaf1, WRITE_3_REPLICAS()));
    assertSuccess(c.store(leaf2, WRITE_3_REPLICAS()));
    assertSuccess(c.store(excludedLeaf, WRITE_3_REPLICAS()));

    // Perform walk
    WalkResponse walkresp = root.walk(BUCKET, TAG_INCLUDE).run();
    assertSuccess(walkresp);
    assertTrue(walkresp.hasSteps());
    assertEquals(1, walkresp.getSteps().size());
    assertEquals(2, walkresp.getSteps().get(0).size());

    // Verify expected only linked to objects are returned
    List<? extends List<RiakObject>> steps = walkresp.getSteps();
    List<String> keys = new ArrayList<String>();
    for (List<RiakObject> step : steps) {
      for (RiakObject object : step) {
        keys.add(object.getKey());
        assertArrayEquals(INCLUDED_VALUE, object.getValueAsBytes());
      }
    }
    assertTrue(keys.contains(LEAF1));
    assertTrue(keys.contains(LEAF2));
  }