• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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 
17 #include <gtest/gtest.h>
18 #include <gmock/gmock.h>
19 
20 #include <binder/Binder.h>
21 #include <binder/ProcessState.h>
22 #include <binder/IServiceManager.h>
23 
24 #include "fakeservicemanager/FakeServiceManager.h"
25 
26 using android::sp;
27 using android::BBinder;
28 using android::IBinder;
29 using android::OK;
30 using android::status_t;
31 using android::FakeServiceManager;
32 using android::String16;
33 using android::IServiceManager;
34 using testing::ElementsAre;
35 
getBinder()36 static sp<IBinder> getBinder() {
37     class LinkableBinder : public BBinder {
38         status_t linkToDeath(const sp<DeathRecipient>&, void*, uint32_t) override {
39             // let SM linkToDeath
40             return OK;
41         }
42     };
43 
44     return new LinkableBinder;
45 }
46 
TEST(AddService,HappyHappy)47 TEST(AddService, HappyHappy) {
48     auto sm = new FakeServiceManager();
49     EXPECT_EQ(sm->addService(String16("foo"), getBinder(), false /*allowIsolated*/,
50         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
51 }
52 
TEST(AddService,SadNullBinder)53 TEST(AddService, SadNullBinder) {
54     auto sm = new FakeServiceManager();
55     EXPECT_EQ(sm->addService(String16("foo"), nullptr, false /*allowIsolated*/,
56         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), android::UNEXPECTED_NULL);
57 }
58 
TEST(AddService,HappyOverExistingService)59 TEST(AddService, HappyOverExistingService) {
60     auto sm = new FakeServiceManager();
61     EXPECT_EQ(sm->addService(String16("foo"), getBinder(), false /*allowIsolated*/,
62         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
63     EXPECT_EQ(sm->addService(String16("foo"), getBinder(), false /*allowIsolated*/,
64         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
65 }
66 
TEST(AddService,HappyClearAddedService)67 TEST(AddService, HappyClearAddedService) {
68     auto sm = new FakeServiceManager();
69     EXPECT_EQ(sm->addService(String16("foo"), getBinder(), false /*allowIsolated*/,
70         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
71     EXPECT_NE(sm->getService(String16("foo")), nullptr);
72     sm->clear();
73     EXPECT_EQ(sm->getService(String16("foo")), nullptr);
74 }
75 
TEST(GetService,HappyHappy)76 TEST(GetService, HappyHappy) {
77     auto sm = new FakeServiceManager();
78     sp<IBinder> service = getBinder();
79 
80     EXPECT_EQ(sm->addService(String16("foo"), service, false /*allowIsolated*/,
81         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
82 
83     EXPECT_EQ(sm->getService(String16("foo")), service);
84 }
85 
TEST(GetService,NonExistant)86 TEST(GetService, NonExistant) {
87     auto sm = new FakeServiceManager();
88 
89     EXPECT_EQ(sm->getService(String16("foo")), nullptr);
90 }
91 
TEST(ListServices,AllServices)92 TEST(ListServices, AllServices) {
93     auto sm = new FakeServiceManager();
94 
95     EXPECT_EQ(sm->addService(String16("sd"), getBinder(), false /*allowIsolated*/,
96         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
97     EXPECT_EQ(sm->addService(String16("sc"), getBinder(), false /*allowIsolated*/,
98         IServiceManager::DUMP_FLAG_PRIORITY_NORMAL), OK);
99     EXPECT_EQ(sm->addService(String16("sb"), getBinder(), false /*allowIsolated*/,
100         IServiceManager::DUMP_FLAG_PRIORITY_HIGH), OK);
101     EXPECT_EQ(sm->addService(String16("sa"), getBinder(), false /*allowIsolated*/,
102         IServiceManager::DUMP_FLAG_PRIORITY_CRITICAL), OK);
103 
104     android::Vector<String16> out = sm->listServices(IServiceManager::DUMP_FLAG_PRIORITY_ALL);
105 
106     // all there and in the right order
107     EXPECT_THAT(out, ElementsAre(String16("sa"), String16("sb"), String16("sc"),
108         String16("sd")));
109 }
110 
TEST(WaitForService,NonExistant)111 TEST(WaitForService, NonExistant) {
112     auto sm = new FakeServiceManager();
113 
114     EXPECT_EQ(sm->waitForService(String16("foo")), nullptr);
115 }
116 
TEST(WaitForService,HappyHappy)117 TEST(WaitForService, HappyHappy) {
118     auto sm = new FakeServiceManager();
119     sp<IBinder> service = getBinder();
120 
121     EXPECT_EQ(sm->addService(String16("foo"), service, false /*allowIsolated*/,
122         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
123 
124     EXPECT_EQ(sm->waitForService(String16("foo")), service);
125 }
126 
TEST(IsDeclared,NonExistant)127 TEST(IsDeclared, NonExistant) {
128     auto sm = new FakeServiceManager();
129 
130     EXPECT_FALSE(sm->isDeclared(String16("foo")));
131 }
132 
TEST(IsDeclared,HappyHappy)133 TEST(IsDeclared, HappyHappy) {
134     auto sm = new FakeServiceManager();
135     sp<IBinder> service = getBinder();
136 
137     EXPECT_EQ(sm->addService(String16("foo"), service, false /*allowIsolated*/,
138         IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT), OK);
139 
140     EXPECT_TRUE(sm->isDeclared(String16("foo")));
141 }
142