1 // Copyright (c) 2013 The Chromium OS 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 #ifndef CHROMIUMOS_WIDE_PROFILING_TEST_UTILS_H_ 6 #define CHROMIUMOS_WIDE_PROFILING_TEST_UTILS_H_ 7 8 #include <stdint.h> 9 10 #include <map> 11 #include <string> 12 #include <vector> 13 14 #include "compat/string.h" 15 #include "compat/test.h" 16 #include "file_utils.h" 17 #include "perf_parser.h" 18 19 namespace quipper { 20 21 extern const char* kSupportedMetadata[]; 22 23 // Container for all the metadata from one perf report. The key is the metadata 24 // type, as shown in |kSupportedMetadata|. The value is a vector of all the 25 // occurrences of that type. For some types, there is only one occurrence. 26 typedef std::map<string, std::vector<string> > MetadataSet; 27 28 // Path to the perf executable. 29 string GetPerfPath(); 30 31 // Converts a perf data filename to the full path. 32 string GetTestInputFilePath(const string& filename); 33 34 // Returns the size of a file in bytes. 35 int64_t GetFileSize(const string& filename); 36 37 // Returns true if the contents of the two files are the same, false otherwise. 38 bool CompareFileContents(const string& filename1, const string& filename2); 39 40 template <typename T> 41 void CompareTextProtoFiles(const string& filename1, const string& filename2) { 42 std::vector<char> file1_contents; 43 std::vector<char> file2_contents; 44 ASSERT_TRUE(FileToBuffer(filename1, &file1_contents)); 45 ASSERT_TRUE(FileToBuffer(filename2, &file2_contents)); 46 47 ArrayInputStream arr1(file1_contents.data(), file1_contents.size()); 48 ArrayInputStream arr2(file2_contents.data(), file2_contents.size()); 49 50 T proto1, proto2; 51 ASSERT_TRUE(TextFormat::Parse(&arr1, &proto1)); 52 ASSERT_TRUE(TextFormat::Parse(&arr2, &proto2)); 53 54 EXPECT_TRUE(EqualsProto(proto1, proto2)); 55 } 56 57 // Given a perf data file, get the list of build ids and create a map from 58 // filenames to build ids. 59 bool GetPerfBuildIDMap(const string& filename, 60 std::map<string, string>* output); 61 62 bool CheckPerfDataAgainstBaseline(const string& filename); 63 64 // Returns true if the perf buildid-lists are the same. 65 bool ComparePerfBuildIDLists(const string& file1, const string& file2); 66 67 // Returns options suitable for correctness tests. 68 PerfParserOptions GetTestOptions(); 69 70 template <typename T> 71 bool EqualsProto(T actual, T expected) { 72 MessageDifferencer differencer; 73 differencer.set_message_field_comparison(MessageDifferencer::EQUAL); 74 return differencer.Compare(expected, actual); 75 } 76 77 template <typename T> 78 bool PartiallyEqualsProto(T actual, T expected) { 79 MessageDifferencer differencer; 80 differencer.set_message_field_comparison(MessageDifferencer::EQUAL); 81 differencer.set_scope(MessageDifferencer::PARTIAL); 82 return differencer.Compare(expected, actual); 83 } 84 85 } // namespace quipper 86 87 #endif // CHROMIUMOS_WIDE_PROFILING_TEST_UTILS_H_ 88