1 // 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 "StalePtrRegistry.h"
16
17 #include <gtest/gtest.h>
18
TEST(StalePtrRegistry,Constructor)19 TEST(StalePtrRegistry, Constructor) {
20 StalePtrRegistry<void> reg;
21 }
22
TEST(StalePtrRegistry,Add)23 TEST(StalePtrRegistry, Add) {
24 StalePtrRegistry<void> reg;
25 EXPECT_EQ(reg.numCurrEntries(), 0);
26 reg.addPtr(nullptr);
27 EXPECT_EQ(reg.numCurrEntries(), 1);
28 }
29
TEST(StalePtrRegistry,AddRemove)30 TEST(StalePtrRegistry, AddRemove) {
31 StalePtrRegistry<void> reg;
32 EXPECT_EQ(reg.numCurrEntries(), 0);
33 reg.addPtr(nullptr);
34 EXPECT_EQ(reg.numCurrEntries(), 1);
35 reg.removePtr(nullptr);
36 EXPECT_EQ(reg.numCurrEntries(), 0);
37 }
38
TEST(StalePtrRegistry,AddMakeStale)39 TEST(StalePtrRegistry, AddMakeStale) {
40 StalePtrRegistry<void> reg;
41 EXPECT_EQ(reg.numCurrEntries(), 0);
42 reg.addPtr(nullptr);
43 EXPECT_EQ(reg.numCurrEntries(), 1);
44 EXPECT_EQ(reg.numStaleEntries(), 0);
45 reg.makeCurrentPtrsStale();
46 EXPECT_EQ(reg.numCurrEntries(), 0);
47 EXPECT_EQ(reg.numStaleEntries(), 1);
48 }
49
TEST(StalePtrRegistry,Get)50 TEST(StalePtrRegistry, Get) {
51 StalePtrRegistry<void> reg;
52 EXPECT_EQ(reg.numCurrEntries(), 0);
53 reg.addPtr(nullptr);
54 EXPECT_EQ(reg.numCurrEntries(), 1);
55 EXPECT_EQ(reg.getPtr(0), nullptr);
56 }
57
TEST(StalePtrRegistry,GetDefaultVal)58 TEST(StalePtrRegistry, GetDefaultVal) {
59 StalePtrRegistry<void> reg;
60 EXPECT_EQ(reg.numCurrEntries(), 0);
61 EXPECT_EQ(reg.getPtr(0), nullptr);
62 EXPECT_EQ(reg.getPtr(0, (void*)0x1), (void*)0x1);
63 }
64
TEST(StalePtrRegistry,GetNonExisting)65 TEST(StalePtrRegistry, GetNonExisting) {
66 StalePtrRegistry<void> reg;
67 EXPECT_EQ(reg.numCurrEntries(), 0);
68 EXPECT_EQ(reg.getPtr(0), nullptr);
69 EXPECT_EQ(reg.numCurrEntries(), 0);
70 }
71
TEST(StalePtrRegistry,AddMakeStaleGetStale)72 TEST(StalePtrRegistry, AddMakeStaleGetStale) {
73 StalePtrRegistry<void> reg;
74 void* ptr = (void*)0xabcdef;
75 uint64_t handle = (uint64_t)(uintptr_t)ptr;
76
77 EXPECT_EQ(reg.numCurrEntries(), 0);
78
79 reg.addPtr(ptr);
80
81 EXPECT_EQ(reg.numCurrEntries(), 1);
82 EXPECT_EQ(reg.numStaleEntries(), 0);
83
84 reg.makeCurrentPtrsStale();
85
86 EXPECT_EQ(reg.numCurrEntries(), 0);
87 EXPECT_EQ(reg.numStaleEntries(), 1);
88
89 EXPECT_EQ(reg.getPtr(handle), ptr);
90 }
91
TEST(StalePtrRegistry,AddMakeStaleGetStaleWithDelete)92 TEST(StalePtrRegistry, AddMakeStaleGetStaleWithDelete) {
93 StalePtrRegistry<void> reg;
94 void* ptr = (void*)0xabcdef;
95 uint64_t handle = (uint64_t)(uintptr_t)ptr;
96
97 EXPECT_EQ(reg.numCurrEntries(), 0);
98
99 reg.addPtr(ptr);
100
101 EXPECT_EQ(reg.numCurrEntries(), 1);
102 EXPECT_EQ(reg.numStaleEntries(), 0);
103
104 reg.makeCurrentPtrsStale();
105
106 EXPECT_EQ(reg.numCurrEntries(), 0);
107 EXPECT_EQ(reg.numStaleEntries(), 1);
108
109 EXPECT_EQ(reg.getPtr(handle, nullptr, true), ptr);
110 EXPECT_EQ(reg.getPtr(handle, nullptr, true), nullptr);
111 }
112
TEST(StalePtrRegistry,AddMakeStaleWithRemap)113 TEST(StalePtrRegistry, AddMakeStaleWithRemap) {
114 StalePtrRegistry<void> reg;
115 void* ptr = (void*)0xabcdef;
116 void* remapped = (void*)0xbcdefa;
117 uint64_t handle = (uint64_t)(uintptr_t)ptr;
118
119 EXPECT_EQ(reg.numCurrEntries(), 0);
120
121 reg.addPtr(ptr);
122
123 EXPECT_EQ(reg.numCurrEntries(), 1);
124 EXPECT_EQ(reg.numStaleEntries(), 0);
125
126 reg.makeCurrentPtrsStale();
127
128 EXPECT_EQ(reg.numCurrEntries(), 0);
129 EXPECT_EQ(reg.numStaleEntries(), 1);
130
131 reg.remapStalePtr(handle, remapped);
132
133 EXPECT_EQ(reg.getPtr(handle), remapped);
134 }
135
TEST(StalePtrRegistry,AddMakeStaleWithRemapNameCollision)136 TEST(StalePtrRegistry, AddMakeStaleWithRemapNameCollision) {
137 StalePtrRegistry<void> reg;
138 void* ptr = (void*)0xabcdef;
139 void* remapped = (void*)0xbcdefa;
140 uint64_t handle = (uint64_t)(uintptr_t)ptr;
141
142 EXPECT_EQ(reg.numCurrEntries(), 0);
143
144 reg.addPtr(ptr);
145
146 EXPECT_EQ(reg.numCurrEntries(), 1);
147 EXPECT_EQ(reg.numStaleEntries(), 0);
148
149 reg.makeCurrentPtrsStale();
150
151 EXPECT_EQ(reg.numCurrEntries(), 0);
152 EXPECT_EQ(reg.numStaleEntries(), 1);
153
154 reg.remapStalePtr(handle, remapped);
155
156 EXPECT_EQ(reg.getPtr(handle), remapped);
157
158 reg.addPtr(ptr);
159
160 EXPECT_EQ(reg.getPtr(handle), ptr);
161 }
162
TEST(StalePtrRegistry,AddMakeStaleTwice)163 TEST(StalePtrRegistry, AddMakeStaleTwice) {
164 StalePtrRegistry<void> reg;
165 void* ptr1 = (void*)0xabcdef;
166 uint64_t handle1 = (uint64_t)(uintptr_t)ptr1;
167 void* ptr2 = (void*)0xbcdefa;
168 uint64_t handle2 = (uint64_t)(uintptr_t)ptr2;
169
170 reg.addPtr(ptr1);
171 reg.makeCurrentPtrsStale();
172 EXPECT_EQ(reg.numStaleEntries(), 1);
173 reg.addPtr(ptr2);
174 reg.makeCurrentPtrsStale();
175
176 EXPECT_EQ(reg.numCurrEntries(), 0);
177 EXPECT_EQ(reg.numStaleEntries(), 2);
178
179 EXPECT_EQ(reg.getPtr(handle1), ptr1);
180 EXPECT_EQ(reg.getPtr(handle2), ptr2);
181 }
182
TEST(StalePtrRegistry,AddMakeStaleTwiceWithCollision)183 TEST(StalePtrRegistry, AddMakeStaleTwiceWithCollision) {
184 StalePtrRegistry<void> reg;
185 void* ptr1 = (void*)0xabcdef;
186 uint64_t handle1 = (uint64_t)(uintptr_t)ptr1;
187 void* ptr2 = (void*)0xabcdef;
188 uint64_t handle2 = (uint64_t)(uintptr_t)ptr2;
189
190 reg.addPtr(ptr1);
191 reg.makeCurrentPtrsStale();
192 EXPECT_EQ(reg.numStaleEntries(), 1);
193 reg.addPtr(ptr2);
194 reg.makeCurrentPtrsStale();
195
196 EXPECT_EQ(reg.numCurrEntries(), 0);
197 EXPECT_EQ(reg.numStaleEntries(), 1);
198
199 EXPECT_EQ(reg.getPtr(handle1), ptr1);
200 EXPECT_EQ(reg.getPtr(handle2), ptr2);
201 }
202