1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "courgette/base_test_unittest.h" 6 #include "courgette/courgette.h" 7 #include "courgette/streams.h" 8 9 class EnsembleTest : public BaseTest { 10 public: 11 12 void TestEnsemble(std::string src_bytes, std::string tgt_bytes) const; 13 14 void PeEnsemble() const; 15 }; 16 17 void EnsembleTest::TestEnsemble(std::string src_bytes, 18 std::string tgt_bytes) const { 19 20 courgette::SourceStream source; 21 courgette::SourceStream target; 22 23 source.Init(src_bytes); 24 target.Init(tgt_bytes); 25 26 courgette::SinkStream patch_sink; 27 28 courgette::Status status; 29 30 status = courgette::GenerateEnsemblePatch(&source, &target, &patch_sink); 31 EXPECT_EQ(courgette::C_OK, status); 32 33 courgette::SourceStream patch_source; 34 patch_source.Init(patch_sink.Buffer(), patch_sink.Length()); 35 36 courgette::SinkStream patch_result; 37 38 status = courgette::ApplyEnsemblePatch(&source, &patch_source, &patch_result); 39 EXPECT_EQ(courgette::C_OK, status); 40 41 EXPECT_EQ(target.OriginalLength(), patch_result.Length()); 42 EXPECT_FALSE(memcmp(target.Buffer(), 43 patch_result.Buffer(), 44 target.OriginalLength())); 45 } 46 47 void EnsembleTest::PeEnsemble() const { 48 std::list<std::string> src_ensemble; 49 std::list<std::string> tgt_ensemble; 50 51 src_ensemble.push_back("en-US.dll"); 52 src_ensemble.push_back("setup1.exe"); 53 src_ensemble.push_back("elf-32-1"); 54 src_ensemble.push_back("pe-64.exe"); 55 56 tgt_ensemble.push_back("en-US.dll"); 57 tgt_ensemble.push_back("setup2.exe"); 58 tgt_ensemble.push_back("elf-32-2"); 59 tgt_ensemble.push_back("pe-64.exe"); 60 61 std::string src_bytes = FilesContents(src_ensemble); 62 std::string tgt_bytes = FilesContents(tgt_ensemble); 63 64 src_bytes = "aaabbbccc" + src_bytes + "dddeeefff"; 65 tgt_bytes = "aaagggccc" + tgt_bytes + "dddeeefff"; 66 67 TestEnsemble(src_bytes, tgt_bytes); 68 } 69 70 TEST_F(EnsembleTest, DISABLED_All) { 71 // TODO(dgarrett) http://code.google.com/p/chromium/issues/detail?id=101614 72 PeEnsemble(); 73 } 74