blob: cc38c4a4067aa86d6c11405d874e572e72610605 [file] [log] [blame]
David Chen9fdd4032018-03-20 14:38:56 -07001// Copyright (C) 2017 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include "StatsService.h"
16#include "config/ConfigKey.h"
17#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
18
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080019#include <android/binder_interface_utils.h>
David Chen9fdd4032018-03-20 14:38:56 -070020#include <gmock/gmock.h>
21#include <gtest/gtest.h>
22
23#include <stdio.h>
24
25using namespace android;
26using namespace testing;
27
28namespace android {
29namespace os {
30namespace statsd {
31
32using android::util::ProtoOutputStream;
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080033using ::ndk::SharedRefBase;
David Chen9fdd4032018-03-20 14:38:56 -070034
35#ifdef __ANDROID__
36
37TEST(StatsServiceTest, TestAddConfig_simple) {
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080038 shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
David Chen9fdd4032018-03-20 14:38:56 -070039 StatsdConfig config;
40 config.set_id(12345);
41 string serialized = config.SerializeAsString();
42
43 EXPECT_TRUE(
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080044 service->addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
David Chen9fdd4032018-03-20 14:38:56 -070045}
46
47TEST(StatsServiceTest, TestAddConfig_empty) {
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080048 shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
David Chen9fdd4032018-03-20 14:38:56 -070049 string serialized = "";
50
51 EXPECT_TRUE(
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080052 service->addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
David Chen9fdd4032018-03-20 14:38:56 -070053}
54
55TEST(StatsServiceTest, TestAddConfig_invalid) {
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080056 shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
David Chen9fdd4032018-03-20 14:38:56 -070057 string serialized = "Invalid config!";
58
59 EXPECT_FALSE(
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080060 service->addConfigurationChecked(123, 12345, {serialized.begin(), serialized.end()}));
David Chen9fdd4032018-03-20 14:38:56 -070061}
62
Bookatzd2386572018-12-14 15:53:14 -080063TEST(StatsServiceTest, TestGetUidFromArgs) {
64 Vector<String8> args;
65 args.push(String8("-1"));
66 args.push(String8("0"));
67 args.push(String8("1"));
Bookatzd2386572018-12-14 15:53:14 -080068 args.push(String8("a1"));
69 args.push(String8(""));
70
71 int32_t uid;
72
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080073 shared_ptr<StatsService> service = SharedRefBase::make<StatsService>(nullptr, nullptr);
74 service->mEngBuild = true;
Bookatzd2386572018-12-14 15:53:14 -080075
76 // "-1"
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080077 EXPECT_FALSE(service->getUidFromArgs(args, 0, uid));
Bookatzd2386572018-12-14 15:53:14 -080078
79 // "0"
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080080 EXPECT_TRUE(service->getUidFromArgs(args, 1, uid));
Bookatzd2386572018-12-14 15:53:14 -080081 EXPECT_EQ(0, uid);
82
83 // "1"
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080084 EXPECT_TRUE(service->getUidFromArgs(args, 2, uid));
Bookatzd2386572018-12-14 15:53:14 -080085 EXPECT_EQ(1, uid);
86
Tej Singh5d823b32019-05-21 20:13:21 -070087 // "a1"
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080088 EXPECT_FALSE(service->getUidFromArgs(args, 3, uid));
Bookatzd2386572018-12-14 15:53:14 -080089
Bookatzd2386572018-12-14 15:53:14 -080090 // ""
Tej Singh5d823b32019-05-21 20:13:21 -070091 EXPECT_FALSE(service->getUidFromArgs(args, 4, uid));
Bookatzd2386572018-12-14 15:53:14 -080092
93 // For a non-userdebug, uid "1" cannot be impersonated.
Ruchir Rastogie449b0c2020-02-10 17:40:09 -080094 service->mEngBuild = false;
95 EXPECT_FALSE(service->getUidFromArgs(args, 2, uid));
Bookatzd2386572018-12-14 15:53:14 -080096}
97
David Chen9fdd4032018-03-20 14:38:56 -070098#else
99GTEST_LOG_(INFO) << "This test does nothing.\n";
100#endif
101
102} // namespace statsd
103} // namespace os
104} // namespace android