1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.util;
20
21 import org.apache.hadoop.hbase.testclassification.SmallTests;
22 import org.junit.Assert;
23 import org.junit.Test;
24 import org.junit.experimental.categories.Category;
25
26 import java.util.concurrent.locks.ReentrantLock;
27
28 @Category(SmallTests.class)
29 public class TestKeyLocker {
30 @Test
31 public void testLocker(){
32 KeyLocker<String> locker = new KeyLocker();
33 ReentrantLock lock1 = locker.acquireLock("l1");
34 Assert.assertTrue(lock1.isHeldByCurrentThread());
35
36 ReentrantLock lock2 = locker.acquireLock("l2");
37 Assert.assertTrue(lock2.isHeldByCurrentThread());
38 Assert.assertTrue(lock1 != lock2);
39
40
41 ReentrantLock lock20 = locker.acquireLock("l2");
42 Assert.assertTrue(lock20 == lock2);
43 Assert.assertTrue(lock2.isHeldByCurrentThread());
44 Assert.assertTrue(lock20.isHeldByCurrentThread());
45
46
47 lock20.unlock();
48 Assert.assertTrue(lock20.isHeldByCurrentThread());
49
50 lock2.unlock();
51 Assert.assertFalse(lock20.isHeldByCurrentThread());
52
53
54 ReentrantLock lock200 = locker.acquireLock("l2");
55 Assert.assertTrue(lock2 != lock200);
56 lock200.unlock();
57 Assert.assertFalse(lock200.isHeldByCurrentThread());
58
59
60 Assert.assertTrue(lock1.isHeldByCurrentThread());
61 lock1.unlock();
62 Assert.assertFalse(lock1.isHeldByCurrentThread());
63 }
64 }