// Copyright 2013 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 "base/metrics/histogram_delta_serialization.h"

#include <vector>

#include "base/metrics/histogram.h"
#include "base/metrics/histogram_base.h"
#include "base/metrics/statistics_recorder.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {

TEST(HistogramDeltaSerializationTest, DeserializeHistogramAndAddSamples) {
  StatisticsRecorder statistic_recorder;
  HistogramDeltaSerialization serializer("HistogramDeltaSerializationTest");
  std::vector<std::string> deltas;
  // Nothing was changed yet.
  serializer.PrepareAndSerializeDeltas(&deltas, true);
  EXPECT_TRUE(deltas.empty());

  HistogramBase* histogram = Histogram::FactoryGet(
      "TestHistogram", 1, 1000, 10, HistogramBase::kIPCSerializationSourceFlag);
  histogram->Add(1);
  histogram->Add(10);
  histogram->Add(100);
  histogram->Add(1000);

  serializer.PrepareAndSerializeDeltas(&deltas, true);
  EXPECT_FALSE(deltas.empty());

  HistogramDeltaSerialization::DeserializeAndAddSamples(deltas);

  // The histogram has kIPCSerializationSourceFlag. So samples will be ignored.
  std::unique_ptr<HistogramSamples> snapshot(histogram->SnapshotSamples());
  EXPECT_EQ(1, snapshot->GetCount(1));
  EXPECT_EQ(1, snapshot->GetCount(10));
  EXPECT_EQ(1, snapshot->GetCount(100));
  EXPECT_EQ(1, snapshot->GetCount(1000));

  // Clear kIPCSerializationSourceFlag to emulate multi-process usage.
  histogram->ClearFlags(HistogramBase::kIPCSerializationSourceFlag);
  HistogramDeltaSerialization::DeserializeAndAddSamples(deltas);

  std::unique_ptr<HistogramSamples> snapshot2(histogram->SnapshotSamples());
  EXPECT_EQ(2, snapshot2->GetCount(1));
  EXPECT_EQ(2, snapshot2->GetCount(10));
  EXPECT_EQ(2, snapshot2->GetCount(100));
  EXPECT_EQ(2, snapshot2->GetCount(1000));
}

}  // namespace base
