1 // Copyright 2020 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 "services/network/trust_tokens/trust_token_operation_metrics_recorder.h"
6
7 #include "base/strings/string_util.h"
8 #include "base/test/metrics/histogram_tester.h"
9 #include "base/test/task_environment.h"
10 #include "services/network/public/mojom/trust_tokens.mojom-shared.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace network {
14
TEST(TrustTokenOperationMetricsRecorder,Success)15 TEST(TrustTokenOperationMetricsRecorder, Success) {
16 base::test::TaskEnvironment env(
17 base::test::TaskEnvironment::TimeSource::MOCK_TIME);
18 TrustTokenOperationMetricsRecorder recorder;
19 base::HistogramTester histograms;
20
21 recorder.BeginBegin(mojom::TrustTokenOperationType::kIssuance);
22 env.FastForwardBy(base::TimeDelta::FromSeconds(1));
23 recorder.FinishBegin(mojom::TrustTokenOperationStatus::kOk);
24
25 env.FastForwardBy(base::TimeDelta::FromSeconds(2));
26 recorder.BeginFinalize();
27 env.FastForwardBy(base::TimeDelta::FromSeconds(3));
28 recorder.FinishFinalize(mojom::TrustTokenOperationStatus::kOk);
29
30 histograms.ExpectUniqueTimeSample(
31 base::JoinString({internal::kTrustTokenBeginTimeHistogramNameBase,
32 "Success", "Issuance"},
33 "."),
34 base::TimeDelta::FromSeconds(1),
35 /*expected_count=*/1);
36
37 histograms.ExpectUniqueTimeSample(
38 base::JoinString({internal::kTrustTokenServerTimeHistogramNameBase,
39 "Success", "Issuance"},
40 "."),
41 base::TimeDelta::FromSeconds(2),
42 /*expected_count=*/1);
43
44 histograms.ExpectUniqueTimeSample(
45 base::JoinString({internal::kTrustTokenFinalizeTimeHistogramNameBase,
46 "Success", "Issuance"},
47 "."),
48 base::TimeDelta::FromSeconds(3),
49 /*expected_count=*/1);
50
51 histograms.ExpectUniqueTimeSample(
52 base::JoinString({internal::kTrustTokenTotalTimeHistogramNameBase,
53 "Success", "Issuance"},
54 "."),
55 base::TimeDelta::FromSeconds(1 + 2 + 3),
56 /*expected_count=*/1);
57 }
58
TEST(TrustTokenOperationMetricsRecorder,BeginFailure)59 TEST(TrustTokenOperationMetricsRecorder, BeginFailure) {
60 base::test::TaskEnvironment env(
61 base::test::TaskEnvironment::TimeSource::MOCK_TIME);
62 TrustTokenOperationMetricsRecorder recorder;
63 base::HistogramTester histograms;
64
65 recorder.BeginBegin(mojom::TrustTokenOperationType::kRedemption);
66 env.FastForwardBy(base::TimeDelta::FromSeconds(1));
67 recorder.FinishBegin(mojom::TrustTokenOperationStatus::kUnknownError);
68
69 histograms.ExpectUniqueTimeSample(
70 base::JoinString({internal::kTrustTokenBeginTimeHistogramNameBase,
71 "Failure", "Redemption"},
72 "."),
73 base::TimeDelta::FromSeconds(1),
74 /*expected_count=*/1);
75 }
76
TEST(TrustTokenOperationMetricsRecorder,FinalizeFailure)77 TEST(TrustTokenOperationMetricsRecorder, FinalizeFailure) {
78 base::test::TaskEnvironment env(
79 base::test::TaskEnvironment::TimeSource::MOCK_TIME);
80 TrustTokenOperationMetricsRecorder recorder;
81 base::HistogramTester histograms;
82
83 recorder.BeginBegin(mojom::TrustTokenOperationType::kSigning);
84 env.FastForwardBy(base::TimeDelta::FromSeconds(1));
85 recorder.FinishBegin(mojom::TrustTokenOperationStatus::kOk);
86
87 env.FastForwardBy(base::TimeDelta::FromSeconds(2));
88 recorder.BeginFinalize();
89 env.FastForwardBy(base::TimeDelta::FromSeconds(3));
90 recorder.FinishFinalize(mojom::TrustTokenOperationStatus::kUnknownError);
91
92 histograms.ExpectUniqueTimeSample(
93 base::JoinString({internal::kTrustTokenBeginTimeHistogramNameBase,
94 "Success", "Signing"},
95 "."),
96 base::TimeDelta::FromSeconds(1),
97 /*expected_count=*/1);
98
99 histograms.ExpectUniqueTimeSample(
100 base::JoinString({internal::kTrustTokenServerTimeHistogramNameBase,
101 "Failure", "Signing"},
102 "."),
103 base::TimeDelta::FromSeconds(2),
104 /*expected_count=*/1);
105
106 histograms.ExpectUniqueTimeSample(
107 base::JoinString({internal::kTrustTokenFinalizeTimeHistogramNameBase,
108 "Failure", "Signing"},
109 "."),
110 base::TimeDelta::FromSeconds(3),
111 /*expected_count=*/1);
112
113 histograms.ExpectUniqueTimeSample(
114 base::JoinString({internal::kTrustTokenTotalTimeHistogramNameBase,
115 "Failure", "Signing"},
116 "."),
117 base::TimeDelta::FromSeconds(1 + 2 + 3),
118 /*expected_count=*/1);
119 }
120
121 } // namespace network
122