xref: /aosp_15_r20/external/perfetto/src/base/status_unittest.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker /*
2*6dbdd20aSAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker  *
4*6dbdd20aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker  *
8*6dbdd20aSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker  *
10*6dbdd20aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker  * limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker  */
16*6dbdd20aSAndroid Build Coastguard Worker 
17*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/base/status.h"
18*6dbdd20aSAndroid Build Coastguard Worker #include <string>
19*6dbdd20aSAndroid Build Coastguard Worker 
20*6dbdd20aSAndroid Build Coastguard Worker #include "test/gtest_and_gmock.h"
21*6dbdd20aSAndroid Build Coastguard Worker 
22*6dbdd20aSAndroid Build Coastguard Worker namespace perfetto::base {
23*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,HugeError)24*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, HugeError) {
25*6dbdd20aSAndroid Build Coastguard Worker   std::string x(4096, 'x');
26*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::ErrStatus("%s", x.c_str());
27*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.message(), x);
28*6dbdd20aSAndroid Build Coastguard Worker }
29*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,GetMissingPayload)30*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, GetMissingPayload) {
31*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::ErrStatus("Error");
32*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar"), std::nullopt);
33*6dbdd20aSAndroid Build Coastguard Worker }
34*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,SetThenGetPayload)35*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, SetThenGetPayload) {
36*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::ErrStatus("Error");
37*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "payload_value");
38*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar"), "payload_value");
39*6dbdd20aSAndroid Build Coastguard Worker }
40*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,SetEraseGetPayload)41*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, SetEraseGetPayload) {
42*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::ErrStatus("Error");
43*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "payload_value");
44*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_TRUE(status.ErasePayload("test.foo.com/bar"));
45*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar"), std::nullopt);
46*6dbdd20aSAndroid Build Coastguard Worker }
47*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,SetOverride)48*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, SetOverride) {
49*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::ErrStatus("Error");
50*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "payload_value");
51*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "other_value");
52*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar"), "other_value");
53*6dbdd20aSAndroid Build Coastguard Worker }
54*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,SetGetOk)55*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, SetGetOk) {
56*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::OkStatus();
57*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "payload_value");
58*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar"), std::nullopt);
59*6dbdd20aSAndroid Build Coastguard Worker }
60*6dbdd20aSAndroid Build Coastguard Worker 
TEST(StatusTest,SetMultipleAndDuplicate)61*6dbdd20aSAndroid Build Coastguard Worker TEST(StatusTest, SetMultipleAndDuplicate) {
62*6dbdd20aSAndroid Build Coastguard Worker   base::Status status = base::ErrStatus("Error");
63*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "payload_value");
64*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar1", "1");
65*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar2", "2");
66*6dbdd20aSAndroid Build Coastguard Worker   status.SetPayload("test.foo.com/bar", "other_value");
67*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar"), "other_value");
68*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar1"), "1");
69*6dbdd20aSAndroid Build Coastguard Worker   ASSERT_EQ(status.GetPayload("test.foo.com/bar2"), "2");
70*6dbdd20aSAndroid Build Coastguard Worker }
71*6dbdd20aSAndroid Build Coastguard Worker 
72*6dbdd20aSAndroid Build Coastguard Worker }  // namespace perfetto::base
73