blob: 670881a96caba152a177c29a21a1b6f0fce16ceb [file] [log] [blame]
Yi Jinb44f7d42017-07-21 12:12:59 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "ih_util.h"
18
19#include <android-base/file.h>
Yi Jinb44f7d42017-07-21 12:12:59 -070020#include <gmock/gmock.h>
21#include <gtest/gtest.h>
22#include <string>
23
24using namespace android::base;
25using namespace std;
26using ::testing::StrEq;
27
Yi Jin4ef28b72017-08-14 14:45:28 -070028TEST(IhUtilTest, ParseHeader) {
29 header_t result, expected;
30 result = parseHeader(" \t \t\t ");
Yi Jinb44f7d42017-07-21 12:12:59 -070031 EXPECT_EQ(expected, result);
32
Yi Jin4ef28b72017-08-14 14:45:28 -070033 result = parseHeader(" \t 100 00\tOpQ \t wqrw");
34 expected = { "100", "00", "opq", "wqrw" };
35 EXPECT_EQ(expected, result);
36
37 result = parseHeader(" \t 100 00\toooh \t wTF", "\t");
38 expected = { "100 00", "oooh", "wtf" };
39 EXPECT_EQ(expected, result);
40
41 result = parseHeader("123,456,78_9", ",");
42 expected = { "123", "456", "78_9" };
43 EXPECT_EQ(expected, result);
44}
45
46TEST(IhUtilTest, ParseRecord) {
47 record_t result, expected;
48 result = parseRecord(" \t \t\t ");
49 EXPECT_EQ(expected, result);
50
51 result = parseRecord(" \t 100 00\toooh \t wqrw");
Yi Jinb44f7d42017-07-21 12:12:59 -070052 expected = { "100", "00", "oooh", "wqrw" };
53 EXPECT_EQ(expected, result);
54
Yi Jin4ef28b72017-08-14 14:45:28 -070055 result = parseRecord(" \t 100 00\toooh \t wqrw", "\t");
Yi Jinb44f7d42017-07-21 12:12:59 -070056 expected = { "100 00", "oooh", "wqrw" };
57 EXPECT_EQ(expected, result);
58
Yi Jin4ef28b72017-08-14 14:45:28 -070059 result = parseRecord("123,456,78_9", ",");
Yi Jinb44f7d42017-07-21 12:12:59 -070060 expected = { "123", "456", "78_9" };
61 EXPECT_EQ(expected, result);
Yi Jin3c034c92017-12-22 17:36:47 -080062
63 result = parseRecord("", " ");
64 EXPECT_TRUE(result.empty());
Yi Jinb44f7d42017-07-21 12:12:59 -070065}
66
Yi Jine2f7f792017-11-01 17:08:27 -070067TEST(IhUtilTest, ParseRecordByColumns) {
68 record_t result, expected;
69 std::vector<int> indices = { 3, 10 };
70
71 result = parseRecordByColumns("12345", indices);
72 expected = {};
73 EXPECT_EQ(expected, result);
74
75 result = parseRecordByColumns("abc \t2345 6789 ", indices);
Kweku Adamsf5cc5752017-12-20 17:59:17 -080076 expected = { "abc", "2345 6789" };
Yi Jine2f7f792017-11-01 17:08:27 -070077 EXPECT_EQ(expected, result);
78
Kweku Adamsf5cc5752017-12-20 17:59:17 -080079 std::string extraColumn1 = "abc \t23456789 bob";
80 std::string emptyMidColm = "abc \t bob";
81 std::string longFirstClm = "abcdefgt\t6789 bob";
82 std::string lngFrstEmpty = "abcdefgt\t bob";
83
84 result = parseRecordByColumns(extraColumn1, indices);
85 expected = { "abc", "23456789 bob" };
86 EXPECT_EQ(expected, result);
87
88 // 2nd column should be treated as an empty entry.
89 result = parseRecordByColumns(emptyMidColm, indices);
90 expected = { "abc", "bob" };
91 EXPECT_EQ(expected, result);
92
93 result = parseRecordByColumns(longFirstClm, indices);
94 expected = { "abcdefgt", "6789 bob" };
95 EXPECT_EQ(expected, result);
96
97 result = parseRecordByColumns(lngFrstEmpty, indices);
98 expected = { "abcdefgt", "bob" };
Yi Jine2f7f792017-11-01 17:08:27 -070099 EXPECT_EQ(expected, result);
100}
101
102TEST(IhUtilTest, stripPrefix) {
103 string data1 = "Swap: abc ";
104 EXPECT_TRUE(stripPrefix(&data1, "Swap:"));
105 EXPECT_THAT(data1, StrEq("abc"));
106
107 string data2 = "Swap: abc ";
108 EXPECT_FALSE(stripPrefix(&data2, "Total:"));
109 EXPECT_THAT(data2, StrEq("Swap: abc "));
110
111 string data3 = "Swap: abc ";
112 EXPECT_TRUE(stripPrefix(&data3, "Swa"));
113 EXPECT_THAT(data3, StrEq("p: abc"));
114
115 string data4 = "Swap: abc ";
116 EXPECT_FALSE(stripPrefix(&data4, "Swa", true));
117 EXPECT_THAT(data4, StrEq("Swap: abc "));
118}
119
120TEST(IhUtilTest, stripSuffix) {
121 string data1 = " 243%abc";
122 EXPECT_TRUE(stripSuffix(&data1, "abc"));
123 EXPECT_THAT(data1, StrEq("243%"));
124
125 string data2 = " 243%abc";
126 EXPECT_FALSE(stripSuffix(&data2, "Not right"));
127 EXPECT_THAT(data2, StrEq(" 243%abc"));
128
129 string data3 = " 243%abc";
130 EXPECT_TRUE(stripSuffix(&data3, "bc"));
131 EXPECT_THAT(data3, StrEq("243%a"));
132
133 string data4 = " 243%abc";
134 EXPECT_FALSE(stripSuffix(&data4, "bc", true));
135 EXPECT_THAT(data4, StrEq(" 243%abc"));
136}
137
Yi Jin3c034c92017-12-22 17:36:47 -0800138TEST(IhUtilTest, behead) {
139 string testcase1 = "81002 dropbox_file_copy (a)(b)";
140 EXPECT_THAT(behead(&testcase1, ' '), StrEq("81002"));
141 EXPECT_THAT(behead(&testcase1, ' '), StrEq("dropbox_file_copy"));
142 EXPECT_THAT(testcase1, "(a)(b)");
143
144 string testcase2 = "adbce,erwqr";
145 EXPECT_THAT(behead(&testcase2, ' '), StrEq("adbce,erwqr"));
146 EXPECT_THAT(testcase2, "");
147
148 string testcase3 = "first second";
149 EXPECT_THAT(behead(&testcase3, ' '), StrEq("first"));
150 EXPECT_THAT(behead(&testcase3, ' '), StrEq("second"));
151 EXPECT_THAT(testcase3, "");
152}
153
Yi Jinb44f7d42017-07-21 12:12:59 -0700154TEST(IhUtilTest, Reader) {
155 TemporaryFile tf;
156 ASSERT_NE(tf.fd, -1);
Wei Wang254102d2017-11-09 21:45:29 -0800157 ASSERT_TRUE(WriteStringToFile("test string\nsecond\nooo\n", tf.path));
Yi Jinb44f7d42017-07-21 12:12:59 -0700158
159 Reader r(tf.fd);
160 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700161 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700162 EXPECT_THAT(line, StrEq("test string"));
Yi Jin810b14f2017-09-11 19:01:08 -0700163 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700164 EXPECT_THAT(line, StrEq("second"));
Yi Jin810b14f2017-09-11 19:01:08 -0700165 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700166 EXPECT_THAT(line, StrEq("ooo"));
Yi Jin810b14f2017-09-11 19:01:08 -0700167 ASSERT_FALSE(r.readLine(&line));
168 ASSERT_TRUE(r.ok(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700169}
170
Yi Jinb44f7d42017-07-21 12:12:59 -0700171TEST(IhUtilTest, ReaderEmpty) {
172 TemporaryFile tf;
173 ASSERT_NE(tf.fd, -1);
Wei Wang254102d2017-11-09 21:45:29 -0800174 ASSERT_TRUE(WriteStringToFile("", tf.path));
Yi Jinb44f7d42017-07-21 12:12:59 -0700175
176 Reader r(tf.fd);
177 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700178 ASSERT_FALSE(r.readLine(&line));
Yi Jine2f7f792017-11-01 17:08:27 -0700179 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700180 ASSERT_TRUE(r.ok(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700181}
182
183TEST(IhUtilTest, ReaderMultipleEmptyLines) {
184 TemporaryFile tf;
185 ASSERT_NE(tf.fd, -1);
Wei Wang254102d2017-11-09 21:45:29 -0800186 ASSERT_TRUE(WriteStringToFile("\n\n", tf.path));
Yi Jinb44f7d42017-07-21 12:12:59 -0700187
188 Reader r(tf.fd);
189 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700190 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700191 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700192 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700193 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700194 ASSERT_FALSE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700195 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700196 ASSERT_TRUE(r.ok(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700197}
198
199TEST(IhUtilTest, ReaderFailedNegativeFd) {
200 Reader r(-123);
201 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700202 EXPECT_FALSE(r.readLine(&line));
203 EXPECT_FALSE(r.ok(&line));
Yi Jine2f7f792017-11-01 17:08:27 -0700204 EXPECT_THAT(line, StrEq("Invalid fd -123"));
Yi Jinb44f7d42017-07-21 12:12:59 -0700205}
206
207TEST(IhUtilTest, ReaderFailedBadFd) {
208 Reader r(1231432);
209 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700210 EXPECT_FALSE(r.readLine(&line));
211 EXPECT_FALSE(r.ok(&line));
Yi Jine2f7f792017-11-01 17:08:27 -0700212 EXPECT_THAT(line, StrEq("Invalid fd 1231432"));
Yi Jinb44f7d42017-07-21 12:12:59 -0700213}