// 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 #include #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. }