// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "courgette/base_test_unittest.h"

#include <string>

#include "base/basictypes.h"
#include "courgette/courgette.h"
#include "courgette/streams.h"
#include "courgette/third_party/bsdiff.h"

class VersioningTest : public BaseTest {
 public:
  void TestApplyingOldBsDiffPatch(const char* src_file,
                                  const char* patch_file,
                                  const char* expected_file) const;
};

void VersioningTest::TestApplyingOldBsDiffPatch(
    const char* src_file,
    const char* patch_file,
    const char* expected_file) const {
  std::string old_buffer = FileContents(src_file);
  std::string new_buffer = FileContents(patch_file);
  std::string expected_buffer = FileContents(expected_file);

  courgette::SourceStream old_stream;
  courgette::SourceStream patch_stream;
  old_stream.Init(old_buffer);
  patch_stream.Init(new_buffer);

  courgette::SinkStream generated_stream;

  courgette::BSDiffStatus status = courgette::ApplyBinaryPatch(
      &old_stream, &patch_stream, &generated_stream);

  EXPECT_EQ(status, courgette::OK);

  size_t expected_length = expected_buffer.size();
  size_t generated_length = generated_stream.Length();

  EXPECT_EQ(generated_length, expected_length);
  EXPECT_EQ(0, memcmp(generated_stream.Buffer(),
                      expected_buffer.c_str(),
                      expected_length));
}

TEST_F(VersioningTest, BsDiff) {
  TestApplyingOldBsDiffPatch("setup1.exe", "setup1-setup2.v1.bsdiff",
                             "setup2.exe");
  TestApplyingOldBsDiffPatch("chrome64_1.exe", "chrome64-1-2.v1.bsdiff",
                             "chrome64_2.exe");

  // We also need a way to test that newly generated patches are appropriately
  // applicable by older clients... not sure of the best way to do that.
}
