1// Copyright 2017 The Chromium OS 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#ifndef _BSDIFF_FAKE_PATCH_WRITER_H_
6#define _BSDIFF_FAKE_PATCH_WRITER_H_
7
8#include <gtest/gtest.h>
9#include <vector>
10
11#include "bsdiff/patch_writer_interface.h"
12
13namespace bsdiff {
14
15// A fake PatchWriterInterface derived class with easy access to the data passed
16// to it.
17class FakePatchWriter : public PatchWriterInterface {
18 public:
19  FakePatchWriter() = default;
20  ~FakePatchWriter() override = default;
21
22  // PatchWriterInterface overrides.
23  bool Init(size_t new_size) override {
24    EXPECT_FALSE(initialized_);
25    initialized_ = true;
26    new_size_ = new_size;
27    return true;
28  }
29
30  bool AddControlEntry(const ControlEntry& entry) override {
31    EXPECT_TRUE(initialized_);
32    EXPECT_FALSE(closed_);
33    entries_.push_back(entry);
34    return true;
35  }
36
37  bool WriteDiffStream(const uint8_t* data, size_t size) override {
38    diff_stream_.insert(diff_stream_.end(), data, data + size);
39    return true;
40  }
41
42  bool WriteExtraStream(const uint8_t* data, size_t size) override {
43    extra_stream_.insert(extra_stream_.end(), data, data + size);
44    return true;
45  }
46
47  bool Close() override {
48    EXPECT_FALSE(closed_) << "Close() already called";
49    closed_ = true;
50    return true;
51  }
52
53  // Fake getter methods.
54  const std::vector<ControlEntry>& entries() const { return entries_; }
55  const std::vector<uint8_t>& diff_stream() const { return diff_stream_; }
56  const std::vector<uint8_t>& extra_stream() const { return extra_stream_; }
57  size_t new_size() const { return new_size_; }
58
59 private:
60  // The list of ControlEntry passed to this class.
61  std::vector<ControlEntry> entries_;
62  std::vector<uint8_t> diff_stream_;
63  std::vector<uint8_t> extra_stream_;
64
65  // The size of the new file for the patch we are writing.
66  size_t new_size_{0};
67
68  // Whether this class was initialized.
69  bool initialized_{false};
70
71  // Whether the patch was closed.
72  bool closed_{false};
73};
74
75}  // namespace bsdiff
76
77#endif  // _BSDIFF_FAKE_PATCH_WRITER_H_
78