/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define TLOG_LEVEL TLOG_LEVEL_DEBUG #define TLOG_TAG "stats-test" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static handle_t metrics_chan; static int consumer_connect(handle_t* chan) { return tipc_connect(chan, METRICS_CONSUMER_PORT); } enum TrustyAtoms : int32_t { TrustyAppCrashed = 100072, TrustyError = 100145, TrustyStorageError = 100146 }; typedef struct { } stats_test_t; TEST_F_SETUP(stats_test) { int rc = consumer_connect(&metrics_chan); ASSERT_EQ(rc, 0); test_abort:; } TEST_F_TEARDOWN(stats_test) { close(metrics_chan); } TEST_F(stats_test, atom_trusty_app_crashed) { int rc; struct metrics_req req; struct metrics_report_crash_req args; char test_uuid[37] = "5247d19b-cf09-4272-a450-3ef20dbefc14"; memcpy(args.app_id, test_uuid, 37); req.cmd = METRICS_CMD_REPORT_CRASH; args.crash_reason = 0xdeafd00f; struct iovec iovs[] = { { .iov_base = &req, .iov_len = sizeof(req), }, { .iov_base = &args, .iov_len = sizeof(args), }, }; struct ipc_msg msg = { .num_iov = countof(iovs), .iov = iovs, }; int total_len = sizeof(req) + sizeof(args); rc = send_msg(metrics_chan, &msg); if (rc != (int)total_len) { TLOGE("failed (%d) to send storage event\n", rc); } test_abort:; } TEST_F(stats_test, atom_second_app_crashed) { int rc; struct metrics_req req; struct metrics_report_crash_req args; char test_uuid[37] = "5247d19b-cf09-4272-a450-3ef20dbefc14"; memcpy(args.app_id, test_uuid, 37); req.cmd = METRICS_CMD_REPORT_CRASH; args.crash_reason = 0xdeafd00f; struct iovec iovs[] = { { .iov_base = &req, .iov_len = sizeof(req), }, { .iov_base = &args, .iov_len = sizeof(args), }, }; struct ipc_msg msg = { .num_iov = countof(iovs), .iov = iovs, }; int total_len = sizeof(req) + sizeof(args); rc = send_msg(metrics_chan, &msg); if (rc != (int)total_len) { TLOGE("failed (%d) to send storage event\n", rc); } test_abort:; } PORT_TEST(stats_test, "com.android.trusty.stats.test")