1c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org/* 2c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * 4c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * Use of this source code is governed by a BSD-style license 5c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * that can be found in the LICENSE file in the root of the source 6c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * tree. An additional intellectual property rights grant can be found 7c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * in the file PATENTS. All contributing project authors may 8c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org */ 10c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1198f53510b222f71fdd8b799b2f33737ceeb28c61Henrik Kjellander#include "webrtc/system_wrappers/include/data_log.h" 12ba21c95e156eb57501ffcf36e2f8216b937fb80cphoglund@webrtc.org 13c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org#include <map> 14c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org#include <string> 15c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 16acaf3a1b131e049000552c53c8cbfe737e2d8f58pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 1798f53510b222f71fdd8b799b2f33737ceeb28c61Henrik Kjellander#include "webrtc/system_wrappers/include/data_log_c.h" 18ba21c95e156eb57501ffcf36e2f8216b937fb80cphoglund@webrtc.org#include "webrtc/system_wrappers/source/data_log_c_helpers_unittest.h" 19c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 20c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgusing ::webrtc::DataLog; 21c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 22c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org// A class for storing the values expected from a log table column when 23c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org// verifying a log table file. 24c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgstruct ExpectedValues { 25c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org public: 26c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ExpectedValues() 27e8ef807a2dc8320115af99ef222c8a3c3ddd3af6brykt@google.com : values(), 28c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org multi_value_length(1) { 29c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 30c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 31c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ExpectedValues(std::vector<std::string> expected_values, 32c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org int expected_multi_value_length) 33c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org : values(expected_values), 34c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org multi_value_length(expected_multi_value_length) { 35c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 36c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 37c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string> values; 38c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org int multi_value_length; 39c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org}; 40c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 41c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgtypedef std::map<std::string, ExpectedValues> ExpectedValuesMap; 42c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 43c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org// A static class used for parsing and verifying data log files. 44c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgclass DataLogParser { 45c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org public: 46c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Verifies that the log table stored in the file "log_file" corresponds to 47c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // the cells and columns specified in "columns". 48c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org static int VerifyTable(FILE* log_file, const ExpectedValuesMap& columns) { 49c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org int row = 0; 50c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org char line_buffer[kMaxLineLength]; 51c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org char* ret = fgets(line_buffer, kMaxLineLength, log_file); 52c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org EXPECT_FALSE(ret == NULL); 53c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org if (ret == NULL) 54c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org return -1; 55c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 56c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string line(line_buffer, kMaxLineLength); 57c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org VerifyHeader(line, columns); 58c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org while (fgets(line_buffer, kMaxLineLength, log_file) != NULL) { 59c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org line = std::string(line_buffer, kMaxLineLength); 60c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org size_t line_position = 0; 61c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 62c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org for (ExpectedValuesMap::const_iterator it = columns.begin(); 63c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org it != columns.end(); ++it) { 64c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string str = ParseElement(line, &line_position, 65c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org it->second.multi_value_length); 66c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org EXPECT_EQ(str, it->second.values[row]); 67c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org if (str != it->second.values[row]) 68c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org return -1; 69c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 70c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ++row; 71c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 72c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org return 0; 73c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 74c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 75c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Verifies the table header stored in "line" to correspond with the header 76c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // specified in "columns". 77c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org static int VerifyHeader(const std::string& line, 78c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org const ExpectedValuesMap& columns) { 79c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org size_t line_position = 0; 80c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org for (ExpectedValuesMap::const_iterator it = columns.begin(); 81c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org it != columns.end(); ++it) { 82c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string str = ParseElement(line, &line_position, 83c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org it->second.multi_value_length); 84c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org EXPECT_EQ(str, it->first); 85c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org if (str != it->first) 86c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org return -1; 87c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 88c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org return 0; 89c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 90c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 91c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Parses out and returns one element from the string "line", which contains 92c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // one line read from a log table file. An element can either be a column 93c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // header or a cell of a row. 94c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org static std::string ParseElement(const std::string& line, 95c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org size_t* line_position, 96c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org int multi_value_length) { 97c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string parsed_cell; 98c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org parsed_cell = ""; 99c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org for (int i = 0; i < multi_value_length; ++i) { 100c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org size_t next_separator = line.find(',', *line_position); 101c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org EXPECT_NE(next_separator, std::string::npos); 102c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org if (next_separator == std::string::npos) 103c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org break; 104c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org parsed_cell += line.substr(*line_position, 105c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org next_separator - *line_position + 1); 106c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org *line_position = next_separator + 1; 107c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 108c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org return parsed_cell; 109c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 110c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 111c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // This constant defines the maximum line length the DataLogParser can 112c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // parse. 113c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org enum { kMaxLineLength = 100 }; 114c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org}; 115c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 116c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgTEST(TestDataLog, CreateReturnTest) { 117c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org for (int i = 0; i < 10; ++i) 118c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_EQ(DataLog::CreateLog(), 0); 1193bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org ASSERT_EQ(DataLog::AddTable(DataLog::Combine("a proper table", 1)), 0); 120c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org for (int i = 0; i < 10; ++i) 121c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org DataLog::ReturnLog(); 1223bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org ASSERT_LT(DataLog::AddTable(DataLog::Combine("table failure", 1)), 0); 123c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org} 124c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1255dedd0ee386c55d6dbafcdd53c0ad67ea0b2140ehenrik.lundin@webrtc.orgTEST(TestDataLog, VerifyCombineMethod) { 1265dedd0ee386c55d6dbafcdd53c0ad67ea0b2140ehenrik.lundin@webrtc.org EXPECT_EQ(std::string("a proper table_1"), 1275dedd0ee386c55d6dbafcdd53c0ad67ea0b2140ehenrik.lundin@webrtc.org DataLog::Combine("a proper table", 1)); 1285dedd0ee386c55d6dbafcdd53c0ad67ea0b2140ehenrik.lundin@webrtc.org} 1295dedd0ee386c55d6dbafcdd53c0ad67ea0b2140ehenrik.lundin@webrtc.org 130c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgTEST(TestDataLog, VerifySingleTable) { 131c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org DataLog::CreateLog(); 1323bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddTable(DataLog::Combine("table", 1)); 1333bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 1), "arrival", 1); 1343bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 1), "timestamp", 1); 1353bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 1), "size", 5); 136046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org uint32_t sizes[5] = {1400, 1500, 1600, 1700, 1800}; 137c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org for (int i = 0; i < 10; ++i) { 1383bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 1), "arrival", 1393bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org static_cast<double>(i)); 1403bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 1), "timestamp", 141046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int64_t>(4354 + i)); 1423bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 1), "size", sizes, 5); 1433bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::NextRow(DataLog::Combine("table", 1)); 144c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 145c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org DataLog::ReturnLog(); 146c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Verify file 1473bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org FILE* table = fopen("table_1.txt", "r"); 148c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_FALSE(table == NULL); 149c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Read the column names and verify with the expected columns. 150c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Note that the columns are written to file in alphabetical order. 151c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Data expected from parsing the file 152c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org const int kNumberOfRows = 10; 153c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string string_arrival[kNumberOfRows] = { 154c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "0,", "1,", "2,", "3,", "4,", 155c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "5,", "6,", "7,", "8,", "9," 156c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org }; 157c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string string_timestamp[kNumberOfRows] = { 158c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "4354,", "4355,", "4356,", "4357,", 159c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "4358,", "4359,", "4360,", "4361,", 160c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "4362,", "4363," 161c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org }; 162c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string string_sizes = "1400,1500,1600,1700,1800,"; 163c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ExpectedValuesMap expected; 164c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["arrival,"] = ExpectedValues( 165c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_arrival, 166c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_arrival + 167c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org kNumberOfRows), 168c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 169c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["size[5],,,,,"] = ExpectedValues( 170c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(10, string_sizes), 5); 171c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["timestamp,"] = ExpectedValues( 172c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_timestamp, 173c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_timestamp + 174c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org kNumberOfRows), 175c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 176c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 177c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org fclose(table); 178c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org} 179c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 180c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.orgTEST(TestDataLog, VerifyMultipleTables) { 181c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org DataLog::CreateLog(); 1823bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddTable(DataLog::Combine("table", 2)); 1833bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddTable(DataLog::Combine("table", 3)); 1843bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 2), "arrival", 1); 1853bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 2), "timestamp", 1); 1863bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 2), "size", 1); 1873bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddTable(DataLog::Combine("table", 4)); 1883bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 3), "timestamp", 1); 1893bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 3), "arrival", 1); 1903bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::AddColumn(DataLog::Combine("table", 4), "size", 1); 191046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org for (int32_t i = 0; i < 10; ++i) { 1923bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 2), "arrival", 193046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int32_t>(i)); 1943bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 2), "timestamp", 195046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int32_t>(4354 + i)); 1963bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 2), "size", 197046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int32_t>(1200 + 10 * i)); 1983bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 3), "timestamp", 199046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int32_t>(4354 + i)); 2003bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 3), "arrival", 201046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int32_t>(i)); 2023bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::InsertCell(DataLog::Combine("table", 4), "size", 203046deb9b2050ebdf98a41e2d22f852e104dd365apbos@webrtc.org static_cast<int32_t>(1200 + 10 * i)); 2043bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::NextRow(DataLog::Combine("table", 4)); 2053bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::NextRow(DataLog::Combine("table", 2)); 2063bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org DataLog::NextRow(DataLog::Combine("table", 3)); 207c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 208c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org DataLog::ReturnLog(); 209c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 210c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Data expected from parsing the file 211c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org const int kNumberOfRows = 10; 212c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string string_arrival[kNumberOfRows] = { 213c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "0,", "1,", "2,", "3,", "4,", 214c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "5,", "6,", "7,", "8,", "9," 215c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org }; 216c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string string_timestamp[kNumberOfRows] = { 217c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "4354,", "4355,", "4356,", "4357,", 218c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "4358,", "4359,", "4360,", "4361,", 219c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "4362,", "4363," 220c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org }; 221c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::string string_size[kNumberOfRows] = { 222c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "1200,", "1210,", "1220,", "1230,", 223c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "1240,", "1250,", "1260,", "1270,", 224c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org "1280,", "1290," 225c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org }; 226c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 227c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Verify table 2 228c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org { 2293bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org FILE* table = fopen("table_2.txt", "r"); 230c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_FALSE(table == NULL); 231c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ExpectedValuesMap expected; 232c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["arrival,"] = ExpectedValues( 233c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_arrival, 234c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_arrival + 235c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org kNumberOfRows), 236c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 237c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["size,"] = ExpectedValues( 238c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_size, 239c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_size + kNumberOfRows), 240c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 241c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["timestamp,"] = ExpectedValues( 242c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_timestamp, 243c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_timestamp + 244c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org kNumberOfRows), 245c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 246c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 247c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org fclose(table); 248c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 249c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 250c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Verify table 3 251c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org { 2523bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org FILE* table = fopen("table_3.txt", "r"); 253c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_FALSE(table == NULL); 254c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ExpectedValuesMap expected; 255c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["arrival,"] = ExpectedValues( 256c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_arrival, 257c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_arrival + 2583bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org kNumberOfRows), 259c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 260c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["timestamp,"] = ExpectedValues( 261ba21c95e156eb57501ffcf36e2f8216b937fb80cphoglund@webrtc.org std::vector<std::string>(string_timestamp, 262ba21c95e156eb57501ffcf36e2f8216b937fb80cphoglund@webrtc.org string_timestamp + 263ba21c95e156eb57501ffcf36e2f8216b937fb80cphoglund@webrtc.org kNumberOfRows), 264c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 265c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 266c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org fclose(table); 267c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 268c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 269c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org // Verify table 4 270c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org { 2713bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org FILE* table = fopen("table_4.txt", "r"); 272c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_FALSE(table == NULL); 273c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ExpectedValuesMap expected; 274c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org expected["size,"] = ExpectedValues( 275c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org std::vector<std::string>(string_size, 276c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org string_size + 2773bbe41aad624506577b728efc98bf30a7406d700stefan@webrtc.org kNumberOfRows), 278c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org 1); 279c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 280c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org fclose(table); 281c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org } 282c9cff24ff0e08f4d1dd1b1282102c9e097e1061bstefan@webrtc.org} 283d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org 284d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.orgTEST(TestDataLogCWrapper, VerifyCWrapper) { 285d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org // Simply call all C wrapper log functions through the C helper unittests. 286d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org // Main purpose is to make sure that the linkage is correct. 287d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org 288d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestCreateLog()); 289d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestCombine()); 290d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestAddTable()); 291d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestAddColumn()); 292d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_int()); 293d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_int()); 294d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 295d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_float()); 296d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_float()); 297d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 298d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_double()); 299d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_double()); 300d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 301d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_int32()); 302d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_int32()); 303d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 304d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_uint32()); 305d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_uint32()); 306d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 307d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_int64()); 308d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_int64()); 309d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 310d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org EXPECT_EQ(0, WebRtcDataLogCHelper_TestReturnLog()); 311d855bd4d6fb129945ea2747525eecfe582faff54henrik.lundin@webrtc.org} 312