blob: efe714d98b18bc2bb1234db0204c97bc1d3d9a5b [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>
20#include <android-base/test_utils.h>
21#include <gmock/gmock.h>
22#include <gtest/gtest.h>
23#include <string>
24
25using namespace android::base;
26using namespace std;
27using ::testing::StrEq;
28
Yi Jin4ef28b72017-08-14 14:45:28 -070029TEST(IhUtilTest, ParseHeader) {
30 header_t result, expected;
31 result = parseHeader(" \t \t\t ");
Yi Jinb44f7d42017-07-21 12:12:59 -070032 EXPECT_EQ(expected, result);
33
Yi Jin4ef28b72017-08-14 14:45:28 -070034 result = parseHeader(" \t 100 00\tOpQ \t wqrw");
35 expected = { "100", "00", "opq", "wqrw" };
36 EXPECT_EQ(expected, result);
37
38 result = parseHeader(" \t 100 00\toooh \t wTF", "\t");
39 expected = { "100 00", "oooh", "wtf" };
40 EXPECT_EQ(expected, result);
41
42 result = parseHeader("123,456,78_9", ",");
43 expected = { "123", "456", "78_9" };
44 EXPECT_EQ(expected, result);
45}
46
47TEST(IhUtilTest, ParseRecord) {
48 record_t result, expected;
49 result = parseRecord(" \t \t\t ");
50 EXPECT_EQ(expected, result);
51
52 result = parseRecord(" \t 100 00\toooh \t wqrw");
Yi Jinb44f7d42017-07-21 12:12:59 -070053 expected = { "100", "00", "oooh", "wqrw" };
54 EXPECT_EQ(expected, result);
55
Yi Jin4ef28b72017-08-14 14:45:28 -070056 result = parseRecord(" \t 100 00\toooh \t wqrw", "\t");
Yi Jinb44f7d42017-07-21 12:12:59 -070057 expected = { "100 00", "oooh", "wqrw" };
58 EXPECT_EQ(expected, result);
59
Yi Jin4ef28b72017-08-14 14:45:28 -070060 result = parseRecord("123,456,78_9", ",");
Yi Jinb44f7d42017-07-21 12:12:59 -070061 expected = { "123", "456", "78_9" };
62 EXPECT_EQ(expected, result);
Yi Jin3c034c92017-12-22 17:36:47 -080063
64 result = parseRecord("", " ");
65 EXPECT_TRUE(result.empty());
Yi Jinb44f7d42017-07-21 12:12:59 -070066}
67
Yi Jine2f7f792017-11-01 17:08:27 -070068TEST(IhUtilTest, ParseRecordByColumns) {
69 record_t result, expected;
70 std::vector<int> indices = { 3, 10 };
71
72 result = parseRecordByColumns("12345", indices);
73 expected = {};
74 EXPECT_EQ(expected, result);
75
76 result = parseRecordByColumns("abc \t2345 6789 ", indices);
Kweku Adamsf5cc5752017-12-20 17:59:17 -080077 expected = { "abc", "2345 6789" };
Yi Jine2f7f792017-11-01 17:08:27 -070078 EXPECT_EQ(expected, result);
79
Kweku Adamsf5cc5752017-12-20 17:59:17 -080080 std::string extraColumn1 = "abc \t23456789 bob";
81 std::string emptyMidColm = "abc \t bob";
82 std::string longFirstClm = "abcdefgt\t6789 bob";
83 std::string lngFrstEmpty = "abcdefgt\t bob";
84
85 result = parseRecordByColumns(extraColumn1, indices);
86 expected = { "abc", "23456789 bob" };
87 EXPECT_EQ(expected, result);
88
89 // 2nd column should be treated as an empty entry.
90 result = parseRecordByColumns(emptyMidColm, indices);
91 expected = { "abc", "bob" };
92 EXPECT_EQ(expected, result);
93
94 result = parseRecordByColumns(longFirstClm, indices);
95 expected = { "abcdefgt", "6789 bob" };
96 EXPECT_EQ(expected, result);
97
98 result = parseRecordByColumns(lngFrstEmpty, indices);
99 expected = { "abcdefgt", "bob" };
Yi Jine2f7f792017-11-01 17:08:27 -0700100 EXPECT_EQ(expected, result);
101}
102
103TEST(IhUtilTest, stripPrefix) {
104 string data1 = "Swap: abc ";
105 EXPECT_TRUE(stripPrefix(&data1, "Swap:"));
106 EXPECT_THAT(data1, StrEq("abc"));
107
108 string data2 = "Swap: abc ";
109 EXPECT_FALSE(stripPrefix(&data2, "Total:"));
110 EXPECT_THAT(data2, StrEq("Swap: abc "));
111
112 string data3 = "Swap: abc ";
113 EXPECT_TRUE(stripPrefix(&data3, "Swa"));
114 EXPECT_THAT(data3, StrEq("p: abc"));
115
116 string data4 = "Swap: abc ";
117 EXPECT_FALSE(stripPrefix(&data4, "Swa", true));
118 EXPECT_THAT(data4, StrEq("Swap: abc "));
119}
120
121TEST(IhUtilTest, stripSuffix) {
122 string data1 = " 243%abc";
123 EXPECT_TRUE(stripSuffix(&data1, "abc"));
124 EXPECT_THAT(data1, StrEq("243%"));
125
126 string data2 = " 243%abc";
127 EXPECT_FALSE(stripSuffix(&data2, "Not right"));
128 EXPECT_THAT(data2, StrEq(" 243%abc"));
129
130 string data3 = " 243%abc";
131 EXPECT_TRUE(stripSuffix(&data3, "bc"));
132 EXPECT_THAT(data3, StrEq("243%a"));
133
134 string data4 = " 243%abc";
135 EXPECT_FALSE(stripSuffix(&data4, "bc", true));
136 EXPECT_THAT(data4, StrEq(" 243%abc"));
137}
138
Yi Jin3c034c92017-12-22 17:36:47 -0800139TEST(IhUtilTest, behead) {
140 string testcase1 = "81002 dropbox_file_copy (a)(b)";
141 EXPECT_THAT(behead(&testcase1, ' '), StrEq("81002"));
142 EXPECT_THAT(behead(&testcase1, ' '), StrEq("dropbox_file_copy"));
143 EXPECT_THAT(testcase1, "(a)(b)");
144
145 string testcase2 = "adbce,erwqr";
146 EXPECT_THAT(behead(&testcase2, ' '), StrEq("adbce,erwqr"));
147 EXPECT_THAT(testcase2, "");
148
149 string testcase3 = "first second";
150 EXPECT_THAT(behead(&testcase3, ' '), StrEq("first"));
151 EXPECT_THAT(behead(&testcase3, ' '), StrEq("second"));
152 EXPECT_THAT(testcase3, "");
153}
154
Yi Jinb44f7d42017-07-21 12:12:59 -0700155TEST(IhUtilTest, Reader) {
156 TemporaryFile tf;
157 ASSERT_NE(tf.fd, -1);
Wei Wang254102d2017-11-09 21:45:29 -0800158 ASSERT_TRUE(WriteStringToFile("test string\nsecond\nooo\n", tf.path));
Yi Jinb44f7d42017-07-21 12:12:59 -0700159
160 Reader r(tf.fd);
161 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700162 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700163 EXPECT_THAT(line, StrEq("test string"));
Yi Jin810b14f2017-09-11 19:01:08 -0700164 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700165 EXPECT_THAT(line, StrEq("second"));
Yi Jin810b14f2017-09-11 19:01:08 -0700166 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700167 EXPECT_THAT(line, StrEq("ooo"));
Yi Jin810b14f2017-09-11 19:01:08 -0700168 ASSERT_FALSE(r.readLine(&line));
169 ASSERT_TRUE(r.ok(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700170}
171
Yi Jinb44f7d42017-07-21 12:12:59 -0700172TEST(IhUtilTest, ReaderEmpty) {
173 TemporaryFile tf;
174 ASSERT_NE(tf.fd, -1);
Wei Wang254102d2017-11-09 21:45:29 -0800175 ASSERT_TRUE(WriteStringToFile("", tf.path));
Yi Jinb44f7d42017-07-21 12:12:59 -0700176
177 Reader r(tf.fd);
178 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700179 ASSERT_FALSE(r.readLine(&line));
Yi Jine2f7f792017-11-01 17:08:27 -0700180 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700181 ASSERT_TRUE(r.ok(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700182}
183
184TEST(IhUtilTest, ReaderMultipleEmptyLines) {
185 TemporaryFile tf;
186 ASSERT_NE(tf.fd, -1);
Wei Wang254102d2017-11-09 21:45:29 -0800187 ASSERT_TRUE(WriteStringToFile("\n\n", tf.path));
Yi Jinb44f7d42017-07-21 12:12:59 -0700188
189 Reader r(tf.fd);
190 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700191 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700192 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700193 ASSERT_TRUE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700194 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700195 ASSERT_FALSE(r.readLine(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700196 EXPECT_THAT(line, StrEq(""));
Yi Jin810b14f2017-09-11 19:01:08 -0700197 ASSERT_TRUE(r.ok(&line));
Yi Jinb44f7d42017-07-21 12:12:59 -0700198}
199
200TEST(IhUtilTest, ReaderFailedNegativeFd) {
201 Reader r(-123);
202 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700203 EXPECT_FALSE(r.readLine(&line));
204 EXPECT_FALSE(r.ok(&line));
Yi Jine2f7f792017-11-01 17:08:27 -0700205 EXPECT_THAT(line, StrEq("Invalid fd -123"));
Yi Jinb44f7d42017-07-21 12:12:59 -0700206}
207
208TEST(IhUtilTest, ReaderFailedBadFd) {
209 Reader r(1231432);
210 string line;
Yi Jin810b14f2017-09-11 19:01:08 -0700211 EXPECT_FALSE(r.readLine(&line));
212 EXPECT_FALSE(r.ok(&line));
Yi Jine2f7f792017-11-01 17:08:27 -0700213 EXPECT_THAT(line, StrEq("Invalid fd 1231432"));
Yi Jinb44f7d42017-07-21 12:12:59 -0700214}