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