1 // Copyright 2016 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 "host-common/VmLock.h"
16 #include "host-common/testing/TestVmLock.h"
17
18 #include <gtest/gtest.h>
19
20 namespace android {
21
TEST(VmLock,Default)22 TEST(VmLock, Default) {
23 VmLock* vmLock = VmLock::get();
24 ASSERT_TRUE(vmLock);
25 vmLock->lock();
26 vmLock->unlock();
27 }
28
TEST(VmLock,CustomVmLock)29 TEST(VmLock, CustomVmLock) {
30 TestVmLock myLock;
31
32 EXPECT_EQ(0, myLock.mLockCount);
33 EXPECT_EQ(0, myLock.mUnlockCount);
34 EXPECT_FALSE(myLock.isLockedBySelf());
35
36 VmLock::get()->lock();
37 EXPECT_EQ(1, myLock.mLockCount);
38 EXPECT_EQ(0, myLock.mUnlockCount);
39 EXPECT_TRUE(myLock.isLockedBySelf());
40
41 VmLock::get()->unlock();
42 EXPECT_EQ(1, myLock.mLockCount);
43 EXPECT_EQ(1, myLock.mUnlockCount);
44 EXPECT_FALSE(myLock.isLockedBySelf());
45
46 VmLock::get()->lock();
47 EXPECT_EQ(2, myLock.mLockCount);
48 EXPECT_EQ(1, myLock.mUnlockCount);
49 EXPECT_TRUE(myLock.isLockedBySelf());
50
51 VmLock::get()->unlock();
52 EXPECT_EQ(2, myLock.mLockCount);
53 EXPECT_EQ(2, myLock.mUnlockCount);
54 EXPECT_FALSE(myLock.isLockedBySelf());
55
56 myLock.release();
57
58 VmLock::get()->lock();
59 EXPECT_EQ(2, myLock.mLockCount);
60 EXPECT_EQ(2, myLock.mUnlockCount);
61 EXPECT_FALSE(myLock.isLockedBySelf());
62
63 VmLock::get()->unlock();
64 EXPECT_EQ(2, myLock.mLockCount);
65 EXPECT_EQ(2, myLock.mUnlockCount);
66 EXPECT_FALSE(myLock.isLockedBySelf());
67 }
68
TEST(ScopedVmLock,Default)69 TEST(ScopedVmLock, Default) {
70 ScopedVmLock vlock;
71 }
72
TEST(ScopedVmLock,CustomVmLock)73 TEST(ScopedVmLock, CustomVmLock) {
74 TestVmLock myLock;
75
76 EXPECT_EQ(0, myLock.mLockCount);
77 EXPECT_EQ(0, myLock.mUnlockCount);
78
79 {
80 ScopedVmLock vlock;
81 EXPECT_EQ(1, myLock.mLockCount);
82 EXPECT_EQ(0, myLock.mUnlockCount);
83 }
84 EXPECT_EQ(1, myLock.mLockCount);
85 EXPECT_EQ(1, myLock.mUnlockCount);
86
87 {
88 ScopedVmLock vlock;
89 EXPECT_EQ(2, myLock.mLockCount);
90 EXPECT_EQ(1, myLock.mUnlockCount);
91 }
92 EXPECT_EQ(2, myLock.mLockCount);
93 EXPECT_EQ(2, myLock.mUnlockCount);
94
95 myLock.release();
96 {
97 ScopedVmLock vlock;
98 EXPECT_EQ(2, myLock.mLockCount);
99 EXPECT_EQ(2, myLock.mUnlockCount);
100 }
101 EXPECT_EQ(2, myLock.mLockCount);
102 EXPECT_EQ(2, myLock.mUnlockCount);
103 }
104
105 } // namespace android
106