xref: /aosp_15_r20/external/cronet/testing/perf/luci_test_result.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef TESTING_PERF_LUCI_TEST_RESULT_H_
6*6777b538SAndroid Build Coastguard Worker #define TESTING_PERF_LUCI_TEST_RESULT_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <optional>
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker #include <vector>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/containers/flat_map.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace perf_test {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // Generates TestResultEntry dict in LUCI Test Results format.
19*6777b538SAndroid Build Coastguard Worker // See: go/luci-test-results-design
20*6777b538SAndroid Build Coastguard Worker //      //infra/go/src/go.chromium.org/luci/results/proto/v1/test_result.proto
21*6777b538SAndroid Build Coastguard Worker class LuciTestResult {
22*6777b538SAndroid Build Coastguard Worker  public:
23*6777b538SAndroid Build Coastguard Worker   // Represents a test result status.
24*6777b538SAndroid Build Coastguard Worker   enum class Status {
25*6777b538SAndroid Build Coastguard Worker     // The test status is unspecified.
26*6777b538SAndroid Build Coastguard Worker     kUnspecified,
27*6777b538SAndroid Build Coastguard Worker     // The test has passed.
28*6777b538SAndroid Build Coastguard Worker     kPass,
29*6777b538SAndroid Build Coastguard Worker     // The test has failed.
30*6777b538SAndroid Build Coastguard Worker     kFail,
31*6777b538SAndroid Build Coastguard Worker     // The test did not complete because it crashed.
32*6777b538SAndroid Build Coastguard Worker     kCrash,
33*6777b538SAndroid Build Coastguard Worker     // The test did not complete because it was interrupted, e.g. timeout.
34*6777b538SAndroid Build Coastguard Worker     kAbort,
35*6777b538SAndroid Build Coastguard Worker     // The test or test framework decided not to run the test, or the test was
36*6777b538SAndroid Build Coastguard Worker     // not run due to previous tests timing out.
37*6777b538SAndroid Build Coastguard Worker     kSkip
38*6777b538SAndroid Build Coastguard Worker   };
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker   // Represents an artifact.
41*6777b538SAndroid Build Coastguard Worker   struct Artifact {
42*6777b538SAndroid Build Coastguard Worker     Artifact();
43*6777b538SAndroid Build Coastguard Worker     Artifact(const Artifact& other);
44*6777b538SAndroid Build Coastguard Worker     Artifact(const base::FilePath file_path, const std::string& content_type);
45*6777b538SAndroid Build Coastguard Worker     Artifact(const std::string& contents, const std::string& content_type);
46*6777b538SAndroid Build Coastguard Worker     ~Artifact();
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker     // Use only one of the two fields below.
49*6777b538SAndroid Build Coastguard Worker     // Absolute path on the same machine running the test.
50*6777b538SAndroid Build Coastguard Worker     std::optional<base::FilePath> file_path;
51*6777b538SAndroid Build Coastguard Worker     // The data of the artifact.
52*6777b538SAndroid Build Coastguard Worker     std::optional<std::string> contents;
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker     std::string content_type;
55*6777b538SAndroid Build Coastguard Worker   };
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker   // Represents a tag.
58*6777b538SAndroid Build Coastguard Worker   struct Tag {
59*6777b538SAndroid Build Coastguard Worker     std::string key;
60*6777b538SAndroid Build Coastguard Worker     std::string value;
61*6777b538SAndroid Build Coastguard Worker   };
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker   LuciTestResult();
64*6777b538SAndroid Build Coastguard Worker   LuciTestResult(const LuciTestResult& other);
65*6777b538SAndroid Build Coastguard Worker   LuciTestResult(LuciTestResult&& other);
66*6777b538SAndroid Build Coastguard Worker   ~LuciTestResult();
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker   // Helper to create a LuciTestResult and fill in info for the current gtest.
69*6777b538SAndroid Build Coastguard Worker   static LuciTestResult CreateForGTest();
70*6777b538SAndroid Build Coastguard Worker 
71*6777b538SAndroid Build Coastguard Worker   // Adds a variant key-value pair to |extra_variant_pairs_|. See VariantDef in
72*6777b538SAndroid Build Coastguard Worker   //   //infra/go/src/go.chromium.org/luci/resultdb/proto/v1/common.proto
73*6777b538SAndroid Build Coastguard Worker   // for more details.
74*6777b538SAndroid Build Coastguard Worker   void AddVariant(const std::string& key, const std::string& value);
75*6777b538SAndroid Build Coastguard Worker 
76*6777b538SAndroid Build Coastguard Worker   // Adds an output artifact.
77*6777b538SAndroid Build Coastguard Worker   void AddOutputArtifactFile(const std::string& artifact_name,
78*6777b538SAndroid Build Coastguard Worker                              const base::FilePath& file_path,
79*6777b538SAndroid Build Coastguard Worker                              const std::string& content_type);
80*6777b538SAndroid Build Coastguard Worker   void AddOutputArtifactContents(const std::string& artifact_name,
81*6777b538SAndroid Build Coastguard Worker                                  const std::string& contents,
82*6777b538SAndroid Build Coastguard Worker                                  const std::string& content_type);
83*6777b538SAndroid Build Coastguard Worker 
84*6777b538SAndroid Build Coastguard Worker   // Adds a tag.
85*6777b538SAndroid Build Coastguard Worker   void AddTag(const std::string& key, const std::string& value);
86*6777b538SAndroid Build Coastguard Worker 
87*6777b538SAndroid Build Coastguard Worker   // Writes to |result_file|.
88*6777b538SAndroid Build Coastguard Worker   void WriteToFile(const base::FilePath& result_file) const;
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker   // Getters and setters.
test_path()91*6777b538SAndroid Build Coastguard Worker   const std::string& test_path() const { return test_path_; }
set_test_path(const std::string & test_path)92*6777b538SAndroid Build Coastguard Worker   void set_test_path(const std::string& test_path) { test_path_ = test_path; }
93*6777b538SAndroid Build Coastguard Worker 
extra_variant_pairs()94*6777b538SAndroid Build Coastguard Worker   const base::flat_map<std::string, std::string>& extra_variant_pairs() const {
95*6777b538SAndroid Build Coastguard Worker     return extra_variant_pairs_;
96*6777b538SAndroid Build Coastguard Worker   }
97*6777b538SAndroid Build Coastguard Worker 
status()98*6777b538SAndroid Build Coastguard Worker   Status status() const { return status_; }
set_status(Status status)99*6777b538SAndroid Build Coastguard Worker   void set_status(Status status) { status_ = status; }
100*6777b538SAndroid Build Coastguard Worker 
is_expected()101*6777b538SAndroid Build Coastguard Worker   bool is_expected() const { return is_expected_; }
set_is_expected(bool is_expcted)102*6777b538SAndroid Build Coastguard Worker   void set_is_expected(bool is_expcted) { is_expected_ = is_expcted; }
103*6777b538SAndroid Build Coastguard Worker 
start_time()104*6777b538SAndroid Build Coastguard Worker   base::Time start_time() const { return start_time_; }
set_start_time(base::Time start_time)105*6777b538SAndroid Build Coastguard Worker   void set_start_time(base::Time start_time) { start_time_ = start_time; }
106*6777b538SAndroid Build Coastguard Worker 
duration()107*6777b538SAndroid Build Coastguard Worker   base::TimeDelta duration() const { return duration_; }
set_duration(base::TimeDelta duration)108*6777b538SAndroid Build Coastguard Worker   void set_duration(base::TimeDelta duration) { duration_ = duration; }
109*6777b538SAndroid Build Coastguard Worker 
output_artifacts()110*6777b538SAndroid Build Coastguard Worker   const base::flat_map<std::string, Artifact>& output_artifacts() const {
111*6777b538SAndroid Build Coastguard Worker     return output_artifacts_;
112*6777b538SAndroid Build Coastguard Worker   }
113*6777b538SAndroid Build Coastguard Worker 
tags()114*6777b538SAndroid Build Coastguard Worker   const std::vector<Tag>& tags() const { return tags_; }
115*6777b538SAndroid Build Coastguard Worker 
116*6777b538SAndroid Build Coastguard Worker  private:
117*6777b538SAndroid Build Coastguard Worker   // For gtest, |test_path_| is <test_suite_name>.<test_case_name>, without
118*6777b538SAndroid Build Coastguard Worker   // the param annotations. E.g. "InstantiationName/SuiteName.CaseName/0"
119*6777b538SAndroid Build Coastguard Worker   // will have "/0" stripped and be just "InstantiationName/SuiteName.CaseName".
120*6777b538SAndroid Build Coastguard Worker   std::string test_path_;
121*6777b538SAndroid Build Coastguard Worker   // For gtest, |extra_variant_pairs_| holds info about the type param and
122*6777b538SAndroid Build Coastguard Worker   // value param for typed/parameterized tests.
123*6777b538SAndroid Build Coastguard Worker   base::flat_map<std::string, std::string> extra_variant_pairs_;
124*6777b538SAndroid Build Coastguard Worker   // Status of the test result.
125*6777b538SAndroid Build Coastguard Worker   Status status_ = Status::kUnspecified;
126*6777b538SAndroid Build Coastguard Worker   // Whether |status| is expected.
127*6777b538SAndroid Build Coastguard Worker   bool is_expected_ = false;
128*6777b538SAndroid Build Coastguard Worker   // Test start time.
129*6777b538SAndroid Build Coastguard Worker   base::Time start_time_;
130*6777b538SAndroid Build Coastguard Worker   // Duration of the test.
131*6777b538SAndroid Build Coastguard Worker   base::TimeDelta duration_;
132*6777b538SAndroid Build Coastguard Worker   // Artifacts of the test run.
133*6777b538SAndroid Build Coastguard Worker   base::flat_map<std::string, Artifact> output_artifacts_;
134*6777b538SAndroid Build Coastguard Worker   // Tags of the test run.
135*6777b538SAndroid Build Coastguard Worker   std::vector<Tag> tags_;
136*6777b538SAndroid Build Coastguard Worker };
137*6777b538SAndroid Build Coastguard Worker 
138*6777b538SAndroid Build Coastguard Worker }  // namespace perf_test
139*6777b538SAndroid Build Coastguard Worker 
140*6777b538SAndroid Build Coastguard Worker #endif  // TESTING_PERF_LUCI_TEST_RESULT_H_
141