blob: ef0946ddf967f75cb90ff5b3a29c41ae7bdc28eb [file] [log] [blame]
/*
* 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 <inttypes.h>
#include <lk/macros.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <lib/tipc/tipc.h>
#include <lib/unittest/unittest.h>
#include <trusty/memref.h>
#include <trusty/sys/mman.h>
#include <trusty/time.h>
#include <trusty/uuid.h>
#include <trusty_log.h>
#include <interface/metrics/consumer.h>
#include <trusty_unittest.h>
#include <uapi/err.h>
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")