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