1 //
2 // Copyright (C) 2022 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 #include "host/commands/cvd_send_sms/pdu_format_builder.h"
17
18 #include <gtest/gtest.h>
19
20 namespace cuttlefish {
21 namespace {
22
TEST(PDUFormatBuilderTest,EmptyUserDataFails)23 TEST(PDUFormatBuilderTest, EmptyUserDataFails) {
24 PDUFormatBuilder builder;
25
26 std::string result = builder.Build();
27
28 EXPECT_EQ(result, "");
29 }
30
TEST(PDUFormatBuilderTest,NotInAlphabetCharacterFails)31 TEST(PDUFormatBuilderTest, NotInAlphabetCharacterFails) {
32 PDUFormatBuilder builder;
33 builder.SetUserData("ccccccc☺");
34 builder.SetSenderNumber("+16501234567");
35
36 std::string result = builder.Build();
37
38 EXPECT_EQ(result, "");
39 }
40
TEST(PDUFormatBuilderTest,With161CharactersFails)41 TEST(PDUFormatBuilderTest, With161CharactersFails) {
42 PDUFormatBuilder builder;
43 builder.SetUserData(
44 "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
45 "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
46 "ccccccccccccccccccccccccccccccccccccccccc");
47 builder.SetSenderNumber("+16501234567");
48
49 std::string result = builder.Build();
50
51 EXPECT_EQ(result, "");
52 }
53
TEST(PDUFormatBuilderTest,With1CharacterSucceeds)54 TEST(PDUFormatBuilderTest, With1CharacterSucceeds) {
55 PDUFormatBuilder builder;
56 builder.SetUserData("c");
57 builder.SetSenderNumber("+16501234567");
58
59 std::string result = builder.Build();
60
61 EXPECT_EQ(result, "0001000b916105214365f700000163");
62 }
63
TEST(PDUFormatBuilderTest,With7CharactersSucceeds)64 TEST(PDUFormatBuilderTest, With7CharactersSucceeds) {
65 PDUFormatBuilder builder;
66 builder.SetUserData("ccccccc");
67 builder.SetSenderNumber("+16501234567");
68
69 std::string result = builder.Build();
70
71 EXPECT_EQ(result, "0001000b916105214365f7000007e3f1783c1e8f01");
72 }
73
TEST(PDUFormatBuilderTest,With8CharactersSucceeds)74 TEST(PDUFormatBuilderTest, With8CharactersSucceeds) {
75 PDUFormatBuilder builder;
76 builder.SetUserData("cccccccc");
77 builder.SetSenderNumber("+16501234567");
78
79 std::string result = builder.Build();
80
81 EXPECT_EQ(result, "0001000b916105214365f7000008e3f1783c1e8fc7");
82 }
83
TEST(PDUFormatBuilderTest,With160CharactersSucceeds)84 TEST(PDUFormatBuilderTest, With160CharactersSucceeds) {
85 PDUFormatBuilder builder;
86 builder.SetUserData(
87 "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
88 "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
89 "cccccccccccccccccccccccccccccccccccccccc");
90 builder.SetSenderNumber("+16501234567");
91
92 std::string result = builder.Build();
93
94 EXPECT_EQ(result,
95 "0001000b916105214365f70000a0"
96 "e3f1783c1e8fc7"
97 "e3f1783c1e8fc7"
98 "e3f1783c1e8fc7"
99 "e3f1783c1e8fc7"
100 "e3f1783c1e8fc7"
101 "e3f1783c1e8fc7"
102 "e3f1783c1e8fc7"
103 "e3f1783c1e8fc7"
104 "e3f1783c1e8fc7"
105 "e3f1783c1e8fc7"
106 "e3f1783c1e8fc7"
107 "e3f1783c1e8fc7"
108 "e3f1783c1e8fc7"
109 "e3f1783c1e8fc7"
110 "e3f1783c1e8fc7"
111 "e3f1783c1e8fc7"
112 "e3f1783c1e8fc7"
113 "e3f1783c1e8fc7"
114 "e3f1783c1e8fc7"
115 "e3f1783c1e8fc7");
116 }
117
TEST(PDUFormatBuilderTest,With160MultiByteCharactersSucceeds)118 TEST(PDUFormatBuilderTest, With160MultiByteCharactersSucceeds) {
119 PDUFormatBuilder builder;
120 builder.SetUserData(
121 "ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ"
122 "ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ"
123 "ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ");
124 builder.SetSenderNumber("+16501234567");
125
126 std::string result = builder.Build();
127
128 EXPECT_EQ(result,
129 "0001000b916105214365f70000a0"
130 "954aa552a9542a"
131 "954aa552a9542a"
132 "954aa552a9542a"
133 "954aa552a9542a"
134 "954aa552a9542a"
135 "954aa552a9542a"
136 "954aa552a9542a"
137 "954aa552a9542a"
138 "954aa552a9542a"
139 "954aa552a9542a"
140 "954aa552a9542a"
141 "954aa552a9542a"
142 "954aa552a9542a"
143 "954aa552a9542a"
144 "954aa552a9542a"
145 "954aa552a9542a"
146 "954aa552a9542a"
147 "954aa552a9542a"
148 "954aa552a9542a"
149 "954aa552a9542a");
150 }
151
TEST(PDUFormatBuilderTest,FullAlphabetSucceeds)152 TEST(PDUFormatBuilderTest, FullAlphabetSucceeds) {
153 PDUFormatBuilder builder;
154 builder.SetUserData(
155 "@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞ\uffffÆæßÉ "
156 "!\"#¤%&'()*+,-./"
157 "0123456789:;<=>?"
158 "¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà");
159 builder.SetSenderNumber("+16501234567");
160
161 std::string result = builder.Build();
162
163 EXPECT_EQ(
164 result,
165 "0001000b916105214365f70000808080604028180e888462c168381e90886442a9582e98"
166 "8c66c3e9783ea09068442a994ea8946ac56ab95eb0986c46abd96eb89c6ec7ebf97ec0a0"
167 "70482c1a8fc8a472c96c3a9fd0a8744aad5aafd8ac76cbed7abfe0b0784c2e9bcfe8b47a"
168 "cd6ebbdff0b87c4eafdbeff8bc7ecfeffbff");
169 }
170
TEST(PDUFormatBuilderTest,WithEmptySenderPhoneNumberFails)171 TEST(PDUFormatBuilderTest, WithEmptySenderPhoneNumberFails) {
172 PDUFormatBuilder builder;
173 builder.SetUserData("c");
174 builder.SetSenderNumber("");
175
176 std::string result = builder.Build();
177
178 EXPECT_EQ(result, "");
179 }
180
TEST(PDUFormatBuilderTest,WithInvalidSenderPhoneNumberFails)181 TEST(PDUFormatBuilderTest, WithInvalidSenderPhoneNumberFails) {
182 std::vector<std::string> numbers{"06501234567", "1", "1650603619399999"};
183 PDUFormatBuilder builder;
184 builder.SetUserData("c");
185
186 for (auto n : numbers) {
187 builder.SetSenderNumber(n);
188 EXPECT_EQ(builder.Build(), "");
189 }
190 }
191
TEST(PDUFormatBuilderTest,WithoutLeadingPlusSignSucceeds)192 TEST(PDUFormatBuilderTest, WithoutLeadingPlusSignSucceeds) {
193 PDUFormatBuilder builder;
194 builder.SetUserData("c");
195 builder.SetSenderNumber("16501234567");
196
197 std::string result = builder.Build();
198
199 EXPECT_EQ(result, "0001000b916105214365f700000163");
200 }
201
TEST(PDUFormatBuilderTest,WithOddSenderPhoneNumberLengthSucceeds)202 TEST(PDUFormatBuilderTest, WithOddSenderPhoneNumberLengthSucceeds) {
203 PDUFormatBuilder builder;
204 builder.SetUserData("c");
205 builder.SetSenderNumber("+16501234567");
206
207 std::string result = builder.Build();
208
209 EXPECT_EQ(result, "0001000b916105214365f700000163");
210 }
211
TEST(PDUFormatBuilderTest,WithEvenSenderPhoneNumberLengthSucceeds)212 TEST(PDUFormatBuilderTest, WithEvenSenderPhoneNumberLengthSucceeds) {
213 PDUFormatBuilder builder;
214 builder.SetUserData("c");
215 builder.SetSenderNumber("+526501234567");
216
217 std::string result = builder.Build();
218
219 EXPECT_EQ(result, "0001000c9125561032547600000163");
220 }
221
222 } // namespace
223 } // namespace cuttlefish
224