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