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