Home | History | Annotate | Download | only in courgette
      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