Skip to content

Commit

Permalink
Add a basic backwards compatibility unittest.
Browse files Browse the repository at this point in the history
This verifies we can still apply old patches, but does not
verify that old clients can apply new patches. That seems
important, but I'm not sure how to do it without storing
old client binaries in version control.

BUG=None
TEST=New Unittest


Review URL: http://codereview.chromium.org/7915007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101606 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
dgarrett@chromium.org committed Sep 17, 2011
1 parent 92e1b7e commit dc07cbc
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -167,3 +167,4 @@ v8.log
/webkit/data/xbm_decoder
/x86-generic_out/
/xcodebuild
courgette.log
3 changes: 2 additions & 1 deletion courgette/courgette.gyp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# 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.

Expand Down Expand Up @@ -92,6 +92,7 @@
'image_info_unittest.cc',
'run_all_unittests.cc',
'streams_unittest.cc',
'versioning_unittest.cc',
'third_party/paged_array_unittest.cc'
],
'dependencies': [
Expand Down
Empty file.
83 changes: 83 additions & 0 deletions courgette/versioning_unittest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// 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 <string>

#include "base/path_service.h"
#include "base/file_util.h"
#include "base/string_util.h"

#include "courgette/courgette.h"
#include "courgette/streams.h"

#include "testing/gtest/include/gtest/gtest.h"

class VersioningTest : public testing::Test {
public:
void TestApplyingOldPatch(const char* src_file,
const char* patch_file,
const char* expected_file) const;

private:
void SetUp() {
PathService::Get(base::DIR_SOURCE_ROOT, &testdata_dir_);
testdata_dir_ = testdata_dir_.AppendASCII("courgette");
testdata_dir_ = testdata_dir_.AppendASCII("testdata");
}

void TearDown() { }

// Returns contents of |file_name| as uninterprested bytes stored in a string.
std::string FileContents(const char* file_name) const;

FilePath testdata_dir_; // Full path name of testdata directory
};

// Reads a test file into a string.
std::string VersioningTest::FileContents(const char* file_name) const {
FilePath file_path = testdata_dir_;
file_path = file_path.AppendASCII(file_name);
std::string file_contents;
EXPECT_TRUE(file_util::ReadFileToString(file_path, &file_contents));
return file_contents;
}

void VersioningTest::TestApplyingOldPatch(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::Status status =
courgette::ApplyEnsemblePatch(&old_stream,
&patch_stream,
&generated_stream);

EXPECT_EQ(status, courgette::C_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, All) {
TestApplyingOldPatch("setup1.exe", "setup1-setup2.v1.patch", "setup2.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.
}

0 comments on commit dc07cbc

Please sign in to comment.