1fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo// Copyright 2017 The Chromium OS Authors. All rights reserved. 2fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo// Use of this source code is governed by a BSD-style license that can be 3fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo// found in the LICENSE file. 4fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 5fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo#ifndef _BSDIFF_FAKE_PATCH_WRITER_H_ 6fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo#define _BSDIFF_FAKE_PATCH_WRITER_H_ 7fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 8fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo#include <gtest/gtest.h> 9fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo#include <vector> 10fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 11fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo#include "bsdiff/patch_writer_interface.h" 12fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 13fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymonamespace bsdiff { 14fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 15fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo// A fake PatchWriterInterface derived class with easy access to the data passed 16fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo// to it. 17fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymoclass FakePatchWriter : public PatchWriterInterface { 18fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo public: 19fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo FakePatchWriter() = default; 20fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo ~FakePatchWriter() override = default; 21fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 22fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo // PatchWriterInterface overrides. 234dadd8b4439358585be374226357b35aece52f17Alex Deymo bool Init(size_t new_size) override { 24fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo EXPECT_FALSE(initialized_); 25fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo initialized_ = true; 264dadd8b4439358585be374226357b35aece52f17Alex Deymo new_size_ = new_size; 27fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo return true; 28fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo } 29fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 30fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo bool AddControlEntry(const ControlEntry& entry) override { 31fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo EXPECT_TRUE(initialized_); 32fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo EXPECT_FALSE(closed_); 33fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo entries_.push_back(entry); 34fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo return true; 35fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo } 36fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 3768c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo bool WriteDiffStream(const uint8_t* data, size_t size) override { 3868c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo diff_stream_.insert(diff_stream_.end(), data, data + size); 3968c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo return true; 4068c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo } 4168c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo 4268c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo bool WriteExtraStream(const uint8_t* data, size_t size) override { 4368c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo extra_stream_.insert(extra_stream_.end(), data, data + size); 4468c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo return true; 4568c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo } 4668c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo 47fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo bool Close() override { 48fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo EXPECT_FALSE(closed_) << "Close() already called"; 49fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo closed_ = true; 50fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo return true; 51fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo } 52fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 53fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo // Fake getter methods. 54fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo const std::vector<ControlEntry>& entries() const { return entries_; } 5568c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo const std::vector<uint8_t>& diff_stream() const { return diff_stream_; } 5668c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo const std::vector<uint8_t>& extra_stream() const { return extra_stream_; } 574dadd8b4439358585be374226357b35aece52f17Alex Deymo size_t new_size() const { return new_size_; } 58fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 59fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo private: 60fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo // The list of ControlEntry passed to this class. 61fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo std::vector<ControlEntry> entries_; 6268c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo std::vector<uint8_t> diff_stream_; 6368c0e7f20623158c007735100b95f2ccbc468ad7Alex Deymo std::vector<uint8_t> extra_stream_; 64fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 654dadd8b4439358585be374226357b35aece52f17Alex Deymo // The size of the new file for the patch we are writing. 664dadd8b4439358585be374226357b35aece52f17Alex Deymo size_t new_size_{0}; 674dadd8b4439358585be374226357b35aece52f17Alex Deymo 68fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo // Whether this class was initialized. 69fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo bool initialized_{false}; 70fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 71fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo // Whether the patch was closed. 72fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo bool closed_{false}; 73fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo}; 74fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 75fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo} // namespace bsdiff 76fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo 77fb3b632fdebf18a93e137159c52bc90e4812318fAlex Deymo#endif // _BSDIFF_FAKE_PATCH_WRITER_H_ 78