public void testDeltaHistoryRequiresCorrectHash() throws Exception {
    appendDeltas(d1);

    // Wrong start hash.
    assertNull(
        target.getTransformedDeltaHistory(HashedVersion.unsigned(0), d1.getResultingVersion()));
    assertNull(target.getAppliedDeltaHistory(HashedVersion.unsigned(0), d1.getResultingVersion()));

    // Wrong end hash.
    assertNull(
        target.getTransformedDeltaHistory(
            V0, HashedVersion.unsigned(d1.getResultingVersion().getVersion())));
    assertNull(
        target.getAppliedDeltaHistory(
            V0, HashedVersion.unsigned(d1.getResultingVersion().getVersion())));
  }
  public void testSingleDeltaHistoryAccessible() throws Exception {
    appendDeltas(d1);
    DeltaSequence transformedHistory =
        target.getTransformedDeltaHistory(V0, d1.getResultingVersion());
    assertNotNull(transformedHistory);
    assertEquals(1, transformedHistory.size());
    assertEquals(d1.transformed, transformedHistory.get(0));

    Collection<ByteStringMessage<ProtocolAppliedWaveletDelta>> appliedHistory =
        target.getAppliedDeltaHistory(V0, d1.getResultingVersion());
    assertNotNull(appliedHistory);
    assertEquals(1, appliedHistory.size());
    assertEquals(d1.applied, Iterables.getOnlyElement(appliedHistory));
  }
  /**
   * Checks that a request for the deltas spanning a contiguous sequence of delta facets produces
   * correct results.
   */
  private void checkHistoryForDeltas(WaveletDeltaRecord... deltas) {
    HashedVersion beginVersion = deltas[0].appliedAtVersion;
    HashedVersion endVersion = deltas[deltas.length - 1].transformed.getResultingVersion();

    {
      List<TransformedWaveletDelta> expected = Lists.newArrayListWithExpectedSize(deltas.length);
      for (WaveletDeltaRecord d : deltas) {
        expected.add(d.transformed);
      }
      assertEquals(expected, target.getTransformedDeltaHistory(beginVersion, endVersion));
    }
    {
      List<ByteStringMessage<ProtocolAppliedWaveletDelta>> expected =
          Lists.newArrayListWithExpectedSize(deltas.length);
      for (WaveletDeltaRecord d : deltas) {
        expected.add(d.applied);
      }
      assertTrue(
          Iterables.elementsEqual(
              expected, target.getAppliedDeltaHistory(beginVersion, endVersion)));
    }
  }