| Index: net/reporting/reporting_serializer_unittest.cc
|
| diff --git a/net/reporting/reporting_serializer_unittest.cc b/net/reporting/reporting_serializer_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..15f1f39efbc779fe0a5f281a9eff57c4708d6daa
|
| --- /dev/null
|
| +++ b/net/reporting/reporting_serializer_unittest.cc
|
| @@ -0,0 +1,90 @@
|
| +// Copyright 2017 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 "net/reporting/reporting_serializer.h"
|
| +
|
| +#include "base/json/json_writer.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/test/simple_test_clock.h"
|
| +#include "base/test/simple_test_tick_clock.h"
|
| +#include "base/time/time.h"
|
| +#include "base/values.h"
|
| +#include "net/reporting/reporting_cache.h"
|
| +#include "net/reporting/reporting_client.h"
|
| +#include "net/reporting/reporting_policy.h"
|
| +#include "net/reporting/reporting_report.h"
|
| +#include "net/reporting/reporting_test_util.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace net {
|
| +namespace {
|
| +
|
| +class ReportingSerializerTest : public ReportingTestBase {
|
| + protected:
|
| + ReportingSerializerTest() : new_context(ReportingPolicy()) {}
|
| +
|
| + const GURL kUrl_ = GURL("https://origin/path");
|
| + const url::Origin kOrigin_ = url::Origin(kUrl_);
|
| + const GURL kEndpoint_ = GURL("https://endpoint/");
|
| + const std::string kGroup_ = "group";
|
| + const std::string kType_ = "default";
|
| +
|
| + TestReportingContext new_context;
|
| +};
|
| +
|
| +TEST_F(ReportingSerializerTest, Test) {
|
| + ReportingPolicy policy;
|
| + policy.persist_reports_across_restarts = true;
|
| + policy.persist_clients_across_restarts = true;
|
| + UsePolicy(policy);
|
| +
|
| + static const int kAttempts = 3;
|
| +
|
| + base::DictionaryValue body;
|
| + body.SetString("key", "value");
|
| +
|
| + cache()->AddReport(kUrl_, kGroup_, kType_, body.CreateDeepCopy(),
|
| + tick_clock()->NowTicks(), kAttempts);
|
| + cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
|
| + kGroup_,
|
| + tick_clock()->NowTicks() + base::TimeDelta::FromDays(1));
|
| +
|
| + auto serialized = ReportingSerializer::SerializeToValue(context());
|
| +
|
| + std::string json;
|
| + ASSERT_TRUE(base::JSONWriter::Write(*serialized, &json));
|
| +
|
| + // Ticks can go backwards!
|
| + new_context.test_tick_clock()->SetNowTicks(tick_clock()->NowTicks() -
|
| + base::TimeDelta::FromHours(3));
|
| + new_context.test_clock()->Advance(base::TimeDelta::FromHours(1));
|
| +
|
| + bool deserialized =
|
| + ReportingSerializer::DeserializeFromValue(*serialized, &new_context);
|
| + ASSERT_TRUE(deserialized);
|
| +
|
| + std::vector<const ReportingReport*> reports;
|
| + new_context.cache()->GetReports(&reports);
|
| + ASSERT_EQ(1u, reports.size());
|
| + EXPECT_EQ(kUrl_, reports[0]->url);
|
| + EXPECT_EQ(kGroup_, reports[0]->group);
|
| + EXPECT_EQ(kType_, reports[0]->type);
|
| + EXPECT_TRUE(base::Value::Equals(&body, reports[0]->body.get()));
|
| + EXPECT_EQ(
|
| + new_context.tick_clock()->NowTicks() - base::TimeDelta::FromHours(1),
|
| + reports[0]->queued);
|
| + EXPECT_EQ(kAttempts, reports[0]->attempts);
|
| +
|
| + const ReportingClient* client =
|
| + FindClientInCache(new_context.cache(), kOrigin_, kEndpoint_);
|
| + ASSERT_TRUE(client);
|
| + EXPECT_EQ(ReportingClient::Subdomains::EXCLUDE, client->subdomains);
|
| + EXPECT_EQ(kGroup_, client->group);
|
| + EXPECT_EQ(new_context.tick_clock()->NowTicks() +
|
| + base::TimeDelta::FromDays(1) - base::TimeDelta::FromHours(1),
|
| + client->expires);
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace net
|
|
|