1 // Copyright 2011 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "courgette/base_test_unittest.h"
11 #include "courgette/courgette.h"
12 #include "courgette/streams.h"
13 #include "courgette/third_party/bsdiff/bsdiff.h"
15 class VersioningTest : public BaseTest {
17 void TestApplyingOldBsDiffPatch(const char* src_file,
18 const char* patch_file,
19 const char* expected_file) const;
22 void VersioningTest::TestApplyingOldBsDiffPatch(
24 const char* patch_file,
25 const char* expected_file) const {
26 std::string old_buffer = FileContents(src_file);
27 std::string new_buffer = FileContents(patch_file);
28 std::string expected_buffer = FileContents(expected_file);
30 courgette::SourceStream old_stream;
31 courgette::SourceStream patch_stream;
32 old_stream.Init(old_buffer);
33 patch_stream.Init(new_buffer);
35 courgette::SinkStream generated_stream;
37 bsdiff::BSDiffStatus status = bsdiff::ApplyBinaryPatch(
38 &old_stream, &patch_stream, &generated_stream);
40 EXPECT_EQ(status, bsdiff::OK);
42 size_t expected_length = expected_buffer.size();
43 size_t generated_length = generated_stream.Length();
45 EXPECT_EQ(generated_length, expected_length);
46 EXPECT_EQ(0, memcmp(generated_stream.Buffer(),
47 expected_buffer.c_str(),
51 TEST_F(VersioningTest, BsDiff) {
52 TestApplyingOldBsDiffPatch("setup1.exe", "setup1-setup2.v1.bsdiff",
54 TestApplyingOldBsDiffPatch("chrome64_1.exe", "chrome64-1-2.v1.bsdiff",
57 // We also need a way to test that newly generated patches are appropriately
58 // applicable by older clients... not sure of the best way to do that.