1c55a96383497a772a307b346368133960b02ad03Eric Laurent/* 2c55a96383497a772a307b346368133960b02ad03Eric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3c55a96383497a772a307b346368133960b02ad03Eric Laurent * 4c55a96383497a772a307b346368133960b02ad03Eric Laurent * Use of this source code is governed by a BSD-style license 5c55a96383497a772a307b346368133960b02ad03Eric Laurent * that can be found in the LICENSE file in the root of the source 6c55a96383497a772a307b346368133960b02ad03Eric Laurent * tree. An additional intellectual property rights grant can be found 7c55a96383497a772a307b346368133960b02ad03Eric Laurent * in the file PATENTS. All contributing project authors may 8c55a96383497a772a307b346368133960b02ad03Eric Laurent * be found in the AUTHORS file in the root of the source tree. 9c55a96383497a772a307b346368133960b02ad03Eric Laurent */ 10c55a96383497a772a307b346368133960b02ad03Eric Laurent 11c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <map> 12c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <string> 13c55a96383497a772a307b346368133960b02ad03Eric Laurent 14c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "system_wrappers/interface/data_log.h" 15c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "system_wrappers/interface/data_log_c.h" 16c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "system_wrappers/source/data_log_c_helpers_unittest.h" 17c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "gtest/gtest.h" 18c55a96383497a772a307b346368133960b02ad03Eric Laurent 19c55a96383497a772a307b346368133960b02ad03Eric Laurentusing ::webrtc::DataLog; 20c55a96383497a772a307b346368133960b02ad03Eric Laurent 21c55a96383497a772a307b346368133960b02ad03Eric Laurent// A class for storing the values expected from a log table column when 22c55a96383497a772a307b346368133960b02ad03Eric Laurent// verifying a log table file. 23c55a96383497a772a307b346368133960b02ad03Eric Laurentstruct ExpectedValues { 24c55a96383497a772a307b346368133960b02ad03Eric Laurent public: 25c55a96383497a772a307b346368133960b02ad03Eric Laurent ExpectedValues() 26c55a96383497a772a307b346368133960b02ad03Eric Laurent : values(NULL), 27c55a96383497a772a307b346368133960b02ad03Eric Laurent multi_value_length(1) { 28c55a96383497a772a307b346368133960b02ad03Eric Laurent } 29c55a96383497a772a307b346368133960b02ad03Eric Laurent 30c55a96383497a772a307b346368133960b02ad03Eric Laurent ExpectedValues(std::vector<std::string> expected_values, 31c55a96383497a772a307b346368133960b02ad03Eric Laurent int expected_multi_value_length) 32c55a96383497a772a307b346368133960b02ad03Eric Laurent : values(expected_values), 33c55a96383497a772a307b346368133960b02ad03Eric Laurent multi_value_length(expected_multi_value_length) { 34c55a96383497a772a307b346368133960b02ad03Eric Laurent } 35c55a96383497a772a307b346368133960b02ad03Eric Laurent 36c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string> values; 37c55a96383497a772a307b346368133960b02ad03Eric Laurent int multi_value_length; 38c55a96383497a772a307b346368133960b02ad03Eric Laurent}; 39c55a96383497a772a307b346368133960b02ad03Eric Laurent 40c55a96383497a772a307b346368133960b02ad03Eric Laurenttypedef std::map<std::string, ExpectedValues> ExpectedValuesMap; 41c55a96383497a772a307b346368133960b02ad03Eric Laurent 42c55a96383497a772a307b346368133960b02ad03Eric Laurent// A static class used for parsing and verifying data log files. 43c55a96383497a772a307b346368133960b02ad03Eric Laurentclass DataLogParser { 44c55a96383497a772a307b346368133960b02ad03Eric Laurent public: 45c55a96383497a772a307b346368133960b02ad03Eric Laurent // Verifies that the log table stored in the file "log_file" corresponds to 46c55a96383497a772a307b346368133960b02ad03Eric Laurent // the cells and columns specified in "columns". 47c55a96383497a772a307b346368133960b02ad03Eric Laurent static int VerifyTable(FILE* log_file, const ExpectedValuesMap& columns) { 48c55a96383497a772a307b346368133960b02ad03Eric Laurent int row = 0; 49c55a96383497a772a307b346368133960b02ad03Eric Laurent char line_buffer[kMaxLineLength]; 50c55a96383497a772a307b346368133960b02ad03Eric Laurent char* ret = fgets(line_buffer, kMaxLineLength, log_file); 51c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_FALSE(ret == NULL); 52c55a96383497a772a307b346368133960b02ad03Eric Laurent if (ret == NULL) 53c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 54c55a96383497a772a307b346368133960b02ad03Eric Laurent 55c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string line(line_buffer, kMaxLineLength); 56c55a96383497a772a307b346368133960b02ad03Eric Laurent VerifyHeader(line, columns); 57c55a96383497a772a307b346368133960b02ad03Eric Laurent while (fgets(line_buffer, kMaxLineLength, log_file) != NULL) { 58c55a96383497a772a307b346368133960b02ad03Eric Laurent line = std::string(line_buffer, kMaxLineLength); 59c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t line_position = 0; 60c55a96383497a772a307b346368133960b02ad03Eric Laurent 61c55a96383497a772a307b346368133960b02ad03Eric Laurent for (ExpectedValuesMap::const_iterator it = columns.begin(); 62c55a96383497a772a307b346368133960b02ad03Eric Laurent it != columns.end(); ++it) { 63c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string str = ParseElement(line, &line_position, 64c55a96383497a772a307b346368133960b02ad03Eric Laurent it->second.multi_value_length); 65c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(str, it->second.values[row]); 66c55a96383497a772a307b346368133960b02ad03Eric Laurent if (str != it->second.values[row]) 67c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 68c55a96383497a772a307b346368133960b02ad03Eric Laurent } 69c55a96383497a772a307b346368133960b02ad03Eric Laurent ++row; 70c55a96383497a772a307b346368133960b02ad03Eric Laurent } 71c55a96383497a772a307b346368133960b02ad03Eric Laurent return 0; 72c55a96383497a772a307b346368133960b02ad03Eric Laurent } 73c55a96383497a772a307b346368133960b02ad03Eric Laurent 74c55a96383497a772a307b346368133960b02ad03Eric Laurent // Verifies the table header stored in "line" to correspond with the header 75c55a96383497a772a307b346368133960b02ad03Eric Laurent // specified in "columns". 76c55a96383497a772a307b346368133960b02ad03Eric Laurent static int VerifyHeader(const std::string& line, 77c55a96383497a772a307b346368133960b02ad03Eric Laurent const ExpectedValuesMap& columns) { 78c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t line_position = 0; 79c55a96383497a772a307b346368133960b02ad03Eric Laurent for (ExpectedValuesMap::const_iterator it = columns.begin(); 80c55a96383497a772a307b346368133960b02ad03Eric Laurent it != columns.end(); ++it) { 81c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string str = ParseElement(line, &line_position, 82c55a96383497a772a307b346368133960b02ad03Eric Laurent it->second.multi_value_length); 83c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(str, it->first); 84c55a96383497a772a307b346368133960b02ad03Eric Laurent if (str != it->first) 85c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 86c55a96383497a772a307b346368133960b02ad03Eric Laurent } 87c55a96383497a772a307b346368133960b02ad03Eric Laurent return 0; 88c55a96383497a772a307b346368133960b02ad03Eric Laurent } 89c55a96383497a772a307b346368133960b02ad03Eric Laurent 90c55a96383497a772a307b346368133960b02ad03Eric Laurent // Parses out and returns one element from the string "line", which contains 91c55a96383497a772a307b346368133960b02ad03Eric Laurent // one line read from a log table file. An element can either be a column 92c55a96383497a772a307b346368133960b02ad03Eric Laurent // header or a cell of a row. 93c55a96383497a772a307b346368133960b02ad03Eric Laurent static std::string ParseElement(const std::string& line, 94c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t* line_position, 95c55a96383497a772a307b346368133960b02ad03Eric Laurent int multi_value_length) { 96c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string parsed_cell; 97c55a96383497a772a307b346368133960b02ad03Eric Laurent parsed_cell = ""; 98c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int i = 0; i < multi_value_length; ++i) { 99c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t next_separator = line.find(',', *line_position); 100c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_NE(next_separator, std::string::npos); 101c55a96383497a772a307b346368133960b02ad03Eric Laurent if (next_separator == std::string::npos) 102c55a96383497a772a307b346368133960b02ad03Eric Laurent break; 103c55a96383497a772a307b346368133960b02ad03Eric Laurent parsed_cell += line.substr(*line_position, 104c55a96383497a772a307b346368133960b02ad03Eric Laurent next_separator - *line_position + 1); 105c55a96383497a772a307b346368133960b02ad03Eric Laurent *line_position = next_separator + 1; 106c55a96383497a772a307b346368133960b02ad03Eric Laurent } 107c55a96383497a772a307b346368133960b02ad03Eric Laurent return parsed_cell; 108c55a96383497a772a307b346368133960b02ad03Eric Laurent } 109c55a96383497a772a307b346368133960b02ad03Eric Laurent 110c55a96383497a772a307b346368133960b02ad03Eric Laurent // This constant defines the maximum line length the DataLogParser can 111c55a96383497a772a307b346368133960b02ad03Eric Laurent // parse. 112c55a96383497a772a307b346368133960b02ad03Eric Laurent enum { kMaxLineLength = 100 }; 113c55a96383497a772a307b346368133960b02ad03Eric Laurent}; 114c55a96383497a772a307b346368133960b02ad03Eric Laurent 115c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(TestDataLog, CreateReturnTest) { 116c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int i = 0; i < 10; ++i) 117c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_EQ(DataLog::CreateLog(), 0); 118c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_EQ(DataLog::AddTable(DataLog::Combine("a proper table", 1)), 0); 119c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int i = 0; i < 10; ++i) 120c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::ReturnLog(); 121c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_LT(DataLog::AddTable(DataLog::Combine("table failure", 1)), 0); 122c55a96383497a772a307b346368133960b02ad03Eric Laurent} 123c55a96383497a772a307b346368133960b02ad03Eric Laurent 124c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(TestDataLog, VerifyCombineMethod) { 125c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(std::string("a proper table_1"), 126c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::Combine("a proper table", 1)); 127c55a96383497a772a307b346368133960b02ad03Eric Laurent} 128c55a96383497a772a307b346368133960b02ad03Eric Laurent 129c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(TestDataLog, VerifySingleTable) { 130c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::CreateLog(); 131c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddTable(DataLog::Combine("table", 1)); 132c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 1), "arrival", 1); 133c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 1), "timestamp", 1); 134c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 1), "size", 5); 135c55a96383497a772a307b346368133960b02ad03Eric Laurent WebRtc_UWord32 sizes[5] = {1400, 1500, 1600, 1700, 1800}; 136c55a96383497a772a307b346368133960b02ad03Eric Laurent for (int i = 0; i < 10; ++i) { 137c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 1), "arrival", 138c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<double>(i)); 139c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 1), "timestamp", 140c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word64>(4354 + i)); 141c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 1), "size", sizes, 5); 142c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::NextRow(DataLog::Combine("table", 1)); 143c55a96383497a772a307b346368133960b02ad03Eric Laurent } 144c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::ReturnLog(); 145c55a96383497a772a307b346368133960b02ad03Eric Laurent // Verify file 146c55a96383497a772a307b346368133960b02ad03Eric Laurent FILE* table = fopen("table_1.txt", "r"); 147c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_FALSE(table == NULL); 148c55a96383497a772a307b346368133960b02ad03Eric Laurent // Read the column names and verify with the expected columns. 149c55a96383497a772a307b346368133960b02ad03Eric Laurent // Note that the columns are written to file in alphabetical order. 150c55a96383497a772a307b346368133960b02ad03Eric Laurent // Data expected from parsing the file 151c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kNumberOfRows = 10; 152c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string string_arrival[kNumberOfRows] = { 153c55a96383497a772a307b346368133960b02ad03Eric Laurent "0,", "1,", "2,", "3,", "4,", 154c55a96383497a772a307b346368133960b02ad03Eric Laurent "5,", "6,", "7,", "8,", "9," 155c55a96383497a772a307b346368133960b02ad03Eric Laurent }; 156c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string string_timestamp[kNumberOfRows] = { 157c55a96383497a772a307b346368133960b02ad03Eric Laurent "4354,", "4355,", "4356,", "4357,", 158c55a96383497a772a307b346368133960b02ad03Eric Laurent "4358,", "4359,", "4360,", "4361,", 159c55a96383497a772a307b346368133960b02ad03Eric Laurent "4362,", "4363," 160c55a96383497a772a307b346368133960b02ad03Eric Laurent }; 161c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string string_sizes = "1400,1500,1600,1700,1800,"; 162c55a96383497a772a307b346368133960b02ad03Eric Laurent ExpectedValuesMap expected; 163c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["arrival,"] = ExpectedValues( 164c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_arrival, 165c55a96383497a772a307b346368133960b02ad03Eric Laurent string_arrival + 166c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 167c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 168c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["size[5],,,,,"] = ExpectedValues( 169c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(10, string_sizes), 5); 170c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["timestamp,"] = ExpectedValues( 171c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_timestamp, 172c55a96383497a772a307b346368133960b02ad03Eric Laurent string_timestamp + 173c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 174c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 175c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 176c55a96383497a772a307b346368133960b02ad03Eric Laurent fclose(table); 177c55a96383497a772a307b346368133960b02ad03Eric Laurent} 178c55a96383497a772a307b346368133960b02ad03Eric Laurent 179c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(TestDataLog, VerifyMultipleTables) { 180c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::CreateLog(); 181c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddTable(DataLog::Combine("table", 2)); 182c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddTable(DataLog::Combine("table", 3)); 183c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 2), "arrival", 1); 184c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 2), "timestamp", 1); 185c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 2), "size", 1); 186c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddTable(DataLog::Combine("table", 4)); 187c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 3), "timestamp", 1); 188c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 3), "arrival", 1); 189c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::AddColumn(DataLog::Combine("table", 4), "size", 1); 190c55a96383497a772a307b346368133960b02ad03Eric Laurent for (WebRtc_Word32 i = 0; i < 10; ++i) { 191c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 2), "arrival", 192c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word32>(i)); 193c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 2), "timestamp", 194c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word32>(4354 + i)); 195c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 2), "size", 196c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word32>(1200 + 10 * i)); 197c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 3), "timestamp", 198c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word32>(4354 + i)); 199c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 3), "arrival", 200c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word32>(i)); 201c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::InsertCell(DataLog::Combine("table", 4), "size", 202c55a96383497a772a307b346368133960b02ad03Eric Laurent static_cast<WebRtc_Word32>(1200 + 10 * i)); 203c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::NextRow(DataLog::Combine("table", 4)); 204c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::NextRow(DataLog::Combine("table", 2)); 205c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::NextRow(DataLog::Combine("table", 3)); 206c55a96383497a772a307b346368133960b02ad03Eric Laurent } 207c55a96383497a772a307b346368133960b02ad03Eric Laurent DataLog::ReturnLog(); 208c55a96383497a772a307b346368133960b02ad03Eric Laurent 209c55a96383497a772a307b346368133960b02ad03Eric Laurent // Data expected from parsing the file 210c55a96383497a772a307b346368133960b02ad03Eric Laurent const int kNumberOfRows = 10; 211c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string string_arrival[kNumberOfRows] = { 212c55a96383497a772a307b346368133960b02ad03Eric Laurent "0,", "1,", "2,", "3,", "4,", 213c55a96383497a772a307b346368133960b02ad03Eric Laurent "5,", "6,", "7,", "8,", "9," 214c55a96383497a772a307b346368133960b02ad03Eric Laurent }; 215c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string string_timestamp[kNumberOfRows] = { 216c55a96383497a772a307b346368133960b02ad03Eric Laurent "4354,", "4355,", "4356,", "4357,", 217c55a96383497a772a307b346368133960b02ad03Eric Laurent "4358,", "4359,", "4360,", "4361,", 218c55a96383497a772a307b346368133960b02ad03Eric Laurent "4362,", "4363," 219c55a96383497a772a307b346368133960b02ad03Eric Laurent }; 220c55a96383497a772a307b346368133960b02ad03Eric Laurent std::string string_size[kNumberOfRows] = { 221c55a96383497a772a307b346368133960b02ad03Eric Laurent "1200,", "1210,", "1220,", "1230,", 222c55a96383497a772a307b346368133960b02ad03Eric Laurent "1240,", "1250,", "1260,", "1270,", 223c55a96383497a772a307b346368133960b02ad03Eric Laurent "1280,", "1290," 224c55a96383497a772a307b346368133960b02ad03Eric Laurent }; 225c55a96383497a772a307b346368133960b02ad03Eric Laurent 226c55a96383497a772a307b346368133960b02ad03Eric Laurent // Verify table 2 227c55a96383497a772a307b346368133960b02ad03Eric Laurent { 228c55a96383497a772a307b346368133960b02ad03Eric Laurent FILE* table = fopen("table_2.txt", "r"); 229c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_FALSE(table == NULL); 230c55a96383497a772a307b346368133960b02ad03Eric Laurent ExpectedValuesMap expected; 231c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["arrival,"] = ExpectedValues( 232c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_arrival, 233c55a96383497a772a307b346368133960b02ad03Eric Laurent string_arrival + 234c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 235c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 236c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["size,"] = ExpectedValues( 237c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_size, 238c55a96383497a772a307b346368133960b02ad03Eric Laurent string_size + kNumberOfRows), 239c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 240c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["timestamp,"] = ExpectedValues( 241c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_timestamp, 242c55a96383497a772a307b346368133960b02ad03Eric Laurent string_timestamp + 243c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 244c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 245c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 246c55a96383497a772a307b346368133960b02ad03Eric Laurent fclose(table); 247c55a96383497a772a307b346368133960b02ad03Eric Laurent } 248c55a96383497a772a307b346368133960b02ad03Eric Laurent 249c55a96383497a772a307b346368133960b02ad03Eric Laurent // Verify table 3 250c55a96383497a772a307b346368133960b02ad03Eric Laurent { 251c55a96383497a772a307b346368133960b02ad03Eric Laurent FILE* table = fopen("table_3.txt", "r"); 252c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_FALSE(table == NULL); 253c55a96383497a772a307b346368133960b02ad03Eric Laurent ExpectedValuesMap expected; 254c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["arrival,"] = ExpectedValues( 255c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_arrival, 256c55a96383497a772a307b346368133960b02ad03Eric Laurent string_arrival + 257c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 258c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 259c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["timestamp,"] = ExpectedValues( 260c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_timestamp, 261c55a96383497a772a307b346368133960b02ad03Eric Laurent string_timestamp + 262c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 263c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 264c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 265c55a96383497a772a307b346368133960b02ad03Eric Laurent fclose(table); 266c55a96383497a772a307b346368133960b02ad03Eric Laurent } 267c55a96383497a772a307b346368133960b02ad03Eric Laurent 268c55a96383497a772a307b346368133960b02ad03Eric Laurent // Verify table 4 269c55a96383497a772a307b346368133960b02ad03Eric Laurent { 270c55a96383497a772a307b346368133960b02ad03Eric Laurent FILE* table = fopen("table_4.txt", "r"); 271c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_FALSE(table == NULL); 272c55a96383497a772a307b346368133960b02ad03Eric Laurent ExpectedValuesMap expected; 273c55a96383497a772a307b346368133960b02ad03Eric Laurent expected["size,"] = ExpectedValues( 274c55a96383497a772a307b346368133960b02ad03Eric Laurent std::vector<std::string>(string_size, 275c55a96383497a772a307b346368133960b02ad03Eric Laurent string_size + 276c55a96383497a772a307b346368133960b02ad03Eric Laurent kNumberOfRows), 277c55a96383497a772a307b346368133960b02ad03Eric Laurent 1); 278c55a96383497a772a307b346368133960b02ad03Eric Laurent ASSERT_EQ(DataLogParser::VerifyTable(table, expected), 0); 279c55a96383497a772a307b346368133960b02ad03Eric Laurent fclose(table); 280c55a96383497a772a307b346368133960b02ad03Eric Laurent } 281c55a96383497a772a307b346368133960b02ad03Eric Laurent} 282c55a96383497a772a307b346368133960b02ad03Eric Laurent 283c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(TestDataLogCWrapper, VerifyCWrapper) { 284c55a96383497a772a307b346368133960b02ad03Eric Laurent // Simply call all C wrapper log functions through the C helper unittests. 285c55a96383497a772a307b346368133960b02ad03Eric Laurent // Main purpose is to make sure that the linkage is correct. 286c55a96383497a772a307b346368133960b02ad03Eric Laurent 287c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestCreateLog()); 288c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestCombine()); 289c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestAddTable()); 290c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestAddColumn()); 291c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_int()); 292c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_int()); 293c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 294c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_float()); 295c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_float()); 296c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 297c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_double()); 298c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_double()); 299c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 300c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_int32()); 301c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_int32()); 302c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 303c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_uint32()); 304c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_uint32()); 305c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 306c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertCell_int64()); 307c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestInsertArray_int64()); 308c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestNextRow()); 309c55a96383497a772a307b346368133960b02ad03Eric Laurent EXPECT_EQ(0, WebRtcDataLogCHelper_TestReturnLog()); 310c55a96383497a772a307b346368133960b02ad03Eric Laurent} 311