diff --git a/base/cvd/cuttlefish/host/commands/cvd_send_sms/BUILD.bazel b/base/cvd/cuttlefish/host/commands/cvd_send_sms/BUILD.bazel index 9e83145e415..51e48af6e2e 100644 --- a/base/cvd/cuttlefish/host/commands/cvd_send_sms/BUILD.bazel +++ b/base/cvd/cuttlefish/host/commands/cvd_send_sms/BUILD.bazel @@ -1,59 +1,64 @@ -load("//cuttlefish/bazel:rules.bzl", "cf_cc_binary", "cf_cc_library", "cf_cc_test") +load("//cuttlefish/bazel:rules.bzl", "cf_build_test", "cf_cc_binary", "cf_cc_library", "cf_cc_test") package( default_visibility = ["//:android_cuttlefish"], ) +cf_build_test(name = "cvd_send_sms_build_test") + cf_cc_binary( name = "cvd_send_sms", - srcs = [ - "main.cc", - ], - depend_on_what_you_use_enabled = False, - include_cleaner_enabled = False, + srcs = ["main.cc"], deps = [ - ":libcvd_send_sms", "//cuttlefish/common/libs/fs", - "//libbase", + "//cuttlefish/host/commands/cvd_send_sms:sms_sender", "@abseil-cpp//absl/log", + "@abseil-cpp//absl/strings", "@gflags", ], ) cf_cc_library( - name = "libcvd_send_sms", - srcs = [ - "pdu_format_builder.cc", - "sms_sender.cc", + name = "pdu_format_builder", + srcs = ["pdu_format_builder.cc"], + hdrs = ["pdu_format_builder.h"], + deps = [ + "@abseil-cpp//absl/log", + "@icu//icu4c/source/common:headers", + "@icu//icu4c/source/common:schriter", + "@icu//icu4c/source/common:utypes", ], - hdrs = [ - "pdu_format_builder.h", - "sms_sender.h", +) + +cf_cc_test( + name = "pdu_format_builder_test", + srcs = ["pdu_format_builder_test.cc"], + deps = [ + "//cuttlefish/host/commands/cvd_send_sms:pdu_format_builder", ], - depend_on_what_you_use_enabled = False, - include_cleaner_enabled = False, +) + +cf_cc_library( + name = "sms_sender", + srcs = ["sms_sender.cc"], + hdrs = ["sms_sender.h"], deps = [ "//cuttlefish/common/libs/fs", - "//libbase", + "//cuttlefish/host/commands/cvd_send_sms:pdu_format_builder", "@abseil-cpp//absl/log", - "@icu//icu4c/source/common:headers", "@icu//icu4c/source/common:schriter", "@icu//icu4c/source/common:utypes", ], ) cf_cc_test( - name = "libcvd_send_sms_test", - srcs = [ - "unittest/pdu_format_builder_test.cc", - "unittest/sms_sender_test.cc", - ], - depend_on_what_you_use_enabled = False, - include_cleaner_enabled = False, + name = "sms_sender_test", + srcs = ["sms_sender_test.cc"], deps = [ - ":libcvd_send_sms", "//cuttlefish/common/libs/fs", - "//libbase", + "//cuttlefish/host/commands/cvd_send_sms:sms_sender", + "//cuttlefish/result:result_matchers", + "//cuttlefish/result:result_type", "@abseil-cpp//absl/log:check", ], ) diff --git a/base/cvd/cuttlefish/host/commands/cvd_send_sms/main.cc b/base/cvd/cuttlefish/host/commands/cvd_send_sms/main.cc index 975aab7b9b6..124a6bd8838 100644 --- a/base/cvd/cuttlefish/host/commands/cvd_send_sms/main.cc +++ b/base/cvd/cuttlefish/host/commands/cvd_send_sms/main.cc @@ -14,7 +14,10 @@ * limitations under the License. */ +#include + #include "absl/log/log.h" +#include "absl/strings/str_cat.h" #include "gflags/gflags.h" #include "cuttlefish/common/libs/fs/shared_fd.h" @@ -61,10 +64,10 @@ int SendSmsMain(int argc, char** argv) { } // Builds the name of the corresponding modem simulator monitor socket. // https://cs.android.com/android/platform/superproject/+/master:device/google/cuttlefish/host/commands/modem_simulator/main.cpp;l=115;drc=cbfe7dba44bfea95049152b828c1a5d35c9e0522 - std::string socket_name = std::string("modem_simulator") + - std::to_string(1000 + FLAGS_instance_number); - auto client_socket = cuttlefish::SharedFD::SocketLocalClient( - socket_name.c_str(), /* abstract */ true, SOCK_STREAM); + const std::string socket_name = + absl::StrCat("modem_simulator", 1000 + FLAGS_instance_number); + SharedFD client_socket = SharedFD::SocketLocalClient( + socket_name, /* abstract */ true, SOCK_STREAM); SmsSender sms_sender(client_socket); if (!sms_sender.Send(argv[1], FLAGS_sender_number, FLAGS_modem_id)) { return -1; diff --git a/base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.cc b/base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.cc index 89229956b5d..5c7a9b22681 100644 --- a/base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.cc +++ b/base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.cc @@ -16,19 +16,22 @@ #include "cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.h" #include -#include #include #include #include -#include +#include #include #include +#include #include #include "absl/log/log.h" #include "unicode/uchriter.h" +#include "unicode/umachine.h" #include "unicode/unistr.h" -#include "unicode/ustring.h" +#include "unicode/urename.h" +#include "unicode/ustring.h" // IWYU pragma: keep: u_strToUTF8 +#include "unicode/utypes.h" namespace cuttlefish { diff --git a/base/cvd/cuttlefish/host/commands/cvd_send_sms/unittest/pdu_format_builder_test.cc b/base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder_test.cc similarity index 82% rename from base/cvd/cuttlefish/host/commands/cvd_send_sms/unittest/pdu_format_builder_test.cc rename to base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder_test.cc index 57eb5fad7a3..bd609a895cd 100644 --- a/base/cvd/cuttlefish/host/commands/cvd_send_sms/unittest/pdu_format_builder_test.cc +++ b/base/cvd/cuttlefish/host/commands/cvd_send_sms/pdu_format_builder_test.cc @@ -15,6 +15,8 @@ #include "cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.h" +#include + #include "gtest/gtest.h" namespace cuttlefish { @@ -23,9 +25,7 @@ namespace { TEST(PDUFormatBuilderTest, EmptyUserDataFails) { PDUFormatBuilder builder; - std::string result = builder.Build(); - - EXPECT_EQ(result, ""); + EXPECT_EQ(builder.Build(), ""); } TEST(PDUFormatBuilderTest, NotInAlphabetCharacterFails) { @@ -33,9 +33,7 @@ TEST(PDUFormatBuilderTest, NotInAlphabetCharacterFails) { builder.SetUserData("ccccccc☺"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, ""); + EXPECT_EQ(builder.Build(), ""); } TEST(PDUFormatBuilderTest, With161CharactersFails) { @@ -46,9 +44,7 @@ TEST(PDUFormatBuilderTest, With161CharactersFails) { "ccccccccccccccccccccccccccccccccccccccccc"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, ""); + EXPECT_EQ(builder.Build(), ""); } TEST(PDUFormatBuilderTest, With1CharacterSucceeds) { @@ -56,9 +52,7 @@ TEST(PDUFormatBuilderTest, With1CharacterSucceeds) { builder.SetUserData("c"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, "0001000b916105214365f700000163"); + EXPECT_EQ(builder.Build(), "0001000b916105214365f700000163"); } TEST(PDUFormatBuilderTest, With7CharactersSucceeds) { @@ -66,9 +60,7 @@ TEST(PDUFormatBuilderTest, With7CharactersSucceeds) { builder.SetUserData("ccccccc"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, "0001000b916105214365f7000007e3f1783c1e8f01"); + EXPECT_EQ(builder.Build(), "0001000b916105214365f7000007e3f1783c1e8f01"); } TEST(PDUFormatBuilderTest, With8CharactersSucceeds) { @@ -76,9 +68,7 @@ TEST(PDUFormatBuilderTest, With8CharactersSucceeds) { builder.SetUserData("cccccccc"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, "0001000b916105214365f7000008e3f1783c1e8fc7"); + EXPECT_EQ(builder.Build(), "0001000b916105214365f7000008e3f1783c1e8fc7"); } TEST(PDUFormatBuilderTest, With160CharactersSucceeds) { @@ -89,9 +79,7 @@ TEST(PDUFormatBuilderTest, With160CharactersSucceeds) { "cccccccccccccccccccccccccccccccccccccccc"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, + EXPECT_EQ(builder.Build(), "0001000b916105214365f70000a0" "e3f1783c1e8fc7" "e3f1783c1e8fc7" @@ -123,9 +111,7 @@ TEST(PDUFormatBuilderTest, With160MultiByteCharactersSucceeds) { "ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, + EXPECT_EQ(builder.Build(), "0001000b916105214365f70000a0" "954aa552a9542a" "954aa552a9542a" @@ -158,10 +144,8 @@ TEST(PDUFormatBuilderTest, FullAlphabetSucceeds) { "¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - EXPECT_EQ( - result, + builder.Build(), "0001000b916105214365f70000808080604028180e888462c168381e90886442a9582e98" "8c66c3e9783ea09068442a994ea8946ac56ab95eb0986c46abd96eb89c6ec7ebf97ec0a0" "70482c1a8fc8a472c96c3a9fd0a8744aad5aafd8ac76cbed7abfe0b0784c2e9bcfe8b47a" @@ -173,18 +157,15 @@ TEST(PDUFormatBuilderTest, WithEmptySenderPhoneNumberFails) { builder.SetUserData("c"); builder.SetSenderNumber(""); - std::string result = builder.Build(); - - EXPECT_EQ(result, ""); + EXPECT_EQ(builder.Build(), ""); } TEST(PDUFormatBuilderTest, WithInvalidSenderPhoneNumberFails) { - std::vector numbers{"06501234567", "1", "1650603619399999"}; PDUFormatBuilder builder; builder.SetUserData("c"); - for (auto n : numbers) { - builder.SetSenderNumber(n); + for (const std::string& number : {"06501234567", "1", "1650603619399999"}) { + builder.SetSenderNumber(number); EXPECT_EQ(builder.Build(), ""); } } @@ -194,9 +175,7 @@ TEST(PDUFormatBuilderTest, WithoutLeadingPlusSignSucceeds) { builder.SetUserData("c"); builder.SetSenderNumber("16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, "0001000b916105214365f700000163"); + EXPECT_EQ(builder.Build(), "0001000b916105214365f700000163"); } TEST(PDUFormatBuilderTest, WithOddSenderPhoneNumberLengthSucceeds) { @@ -204,9 +183,7 @@ TEST(PDUFormatBuilderTest, WithOddSenderPhoneNumberLengthSucceeds) { builder.SetUserData("c"); builder.SetSenderNumber("+16501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, "0001000b916105214365f700000163"); + EXPECT_EQ(builder.Build(), "0001000b916105214365f700000163"); } TEST(PDUFormatBuilderTest, WithEvenSenderPhoneNumberLengthSucceeds) { @@ -214,9 +191,7 @@ TEST(PDUFormatBuilderTest, WithEvenSenderPhoneNumberLengthSucceeds) { builder.SetUserData("c"); builder.SetSenderNumber("+526501234567"); - std::string result = builder.Build(); - - EXPECT_EQ(result, "0001000c9125561032547600000163"); + EXPECT_EQ(builder.Build(), "0001000c9125561032547600000163"); } } // namespace diff --git a/base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender.cc b/base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender.cc index e517a58a510..9573f1d8b41 100644 --- a/base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender.cc +++ b/base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender.cc @@ -15,18 +15,14 @@ */ #include "cuttlefish/host/commands/cvd_send_sms/sms_sender.h" -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include #include "absl/log/log.h" #include "cuttlefish/common/libs/fs/shared_buf.h" +#include "cuttlefish/common/libs/fs/shared_fd.h" #include "cuttlefish/host/commands/cvd_send_sms/pdu_format_builder.h" namespace cuttlefish { diff --git a/base/cvd/cuttlefish/host/commands/cvd_send_sms/unittest/sms_sender_test.cc b/base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender_test.cc similarity index 78% rename from base/cvd/cuttlefish/host/commands/cvd_send_sms/unittest/sms_sender_test.cc rename to base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender_test.cc index 8ae34fd591b..432b763f75a 100644 --- a/base/cvd/cuttlefish/host/commands/cvd_send_sms/unittest/sms_sender_test.cc +++ b/base/cvd/cuttlefish/host/commands/cvd_send_sms/sms_sender_test.cc @@ -15,13 +15,21 @@ #include "cuttlefish/host/commands/cvd_send_sms/sms_sender.h" +#include +#include + #include +#include +#include +#include #include "absl/log/check.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "cuttlefish/common/libs/fs/shared_fd.h" +#include "cuttlefish/result/result_matchers.h" +#include "cuttlefish/result/result_type.h" namespace cuttlefish { namespace { @@ -36,17 +44,16 @@ class SmsSenderTest : public ::testing::Test { CHECK(fake_server_fd_->IsOpen()); } - void AssertCommandIsSent(std::string expected_command) { + void AssertCommandIsSent(std::string_view expected_command) { std::stringstream ss; std::vector buffer(4096); - Result bytes_read; + Result bytes_read; do { bytes_read = fake_server_fd_->Read(buffer.data(), buffer.size()); - CHECK(bytes_read.has_value()) << fake_server_fd_->StrError(); + ASSERT_THAT(bytes_read, IsOk()); ss << std::string(buffer.data(), *bytes_read); - CHECK_GT(*bytes_read, 0) << "Expected to receive data"; } while (buffer[*bytes_read - 1] != '\r'); - EXPECT_THAT(ss.str(), testing::Eq(expected_command)); + EXPECT_EQ(ss.str(), expected_command); } SharedFD client_fd_; @@ -56,17 +63,14 @@ class SmsSenderTest : public ::testing::Test { TEST_F(SmsSenderTest, InvalidContentFails) { SmsSender sender(client_fd_); - bool result = sender.Send("", "+16501234567"); - - EXPECT_FALSE(result); + EXPECT_FALSE(sender.Send("", "+16501234567")); } TEST_F(SmsSenderTest, ValidContentSucceeds) { SmsSender sender(client_fd_); - bool result = sender.Send("hellohello", "+16501234567"); + EXPECT_TRUE(sender.Send("hellohello", "+16501234567")); - EXPECT_TRUE(result); AssertCommandIsSent( "REM0AT+REMOTESMS=0001000b916105214365f700000ae8329bfd4697d9ec37\r"); } @@ -74,9 +78,8 @@ TEST_F(SmsSenderTest, ValidContentSucceeds) { TEST_F(SmsSenderTest, NonDefaultModemIdValueSucceeds) { SmsSender sender(client_fd_); - bool result = sender.Send("hellohello", "+16501234567", 1); + EXPECT_TRUE(sender.Send("hellohello", "+16501234567", 1)); - EXPECT_TRUE(result); AssertCommandIsSent( "REM1AT+REMOTESMS=0001000b916105214365f700000ae8329bfd4697d9ec37\r"); }