1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.monitoring;
21
22 import static org.junit.Assert.*;
23
24 import java.util.concurrent.atomic.AtomicBoolean;
25
26 import org.apache.hadoop.hbase.MediumTests;
27 import org.junit.Test;
28 import org.junit.experimental.categories.Category;
29
30 @Category(MediumTests.class)
31 public class TestTaskMonitor {
32
33 @Test
34 public void testTaskMonitorBasics() {
35 TaskMonitor tm = new TaskMonitor();
36 assertTrue("Task monitor should start empty",
37 tm.getTasks().isEmpty());
38
39
40 MonitoredTask task = tm.createStatus("Test task");
41 MonitoredTask taskFromTm = tm.getTasks().get(0);
42
43
44 assertEquals(task.getDescription(), taskFromTm.getDescription());
45 assertEquals(-1, taskFromTm.getCompletionTimestamp());
46 assertEquals(MonitoredTask.State.RUNNING, taskFromTm.getState());
47
48
49 task.markComplete("Finished!");
50 assertEquals(MonitoredTask.State.COMPLETE, task.getState());
51
52
53 assertEquals(1, tm.getTasks().size());
54
55
56 task.expireNow();
57 assertEquals(0, tm.getTasks().size());
58 }
59
60 @Test
61 public void testTasksGetAbortedOnLeak() throws InterruptedException {
62 final TaskMonitor tm = new TaskMonitor();
63 assertTrue("Task monitor should start empty",
64 tm.getTasks().isEmpty());
65
66 final AtomicBoolean threadSuccess = new AtomicBoolean(false);
67
68 Thread t = new Thread() {
69 @Override
70 public void run() {
71 MonitoredTask task = tm.createStatus("Test task");
72 assertEquals(MonitoredTask.State.RUNNING, task.getState());
73 threadSuccess.set(true);
74 }
75 };
76 t.start();
77 t.join();
78
79 assertTrue(threadSuccess.get());
80
81
82 System.gc();
83 System.gc();
84 System.gc();
85
86
87 MonitoredTask taskFromTm = tm.getTasks().get(0);
88 assertEquals(MonitoredTask.State.ABORTED, taskFromTm.getState());
89 }
90
91 @Test
92 public void testTaskLimit() throws Exception {
93 TaskMonitor tm = new TaskMonitor();
94 for (int i = 0; i < TaskMonitor.MAX_TASKS + 10; i++) {
95 tm.createStatus("task " + i);
96 }
97
98 assertEquals(TaskMonitor.MAX_TASKS, tm.getTasks().size());
99
100
101 assertEquals("task 10", tm.getTasks().get(0).getDescription());
102 }
103
104
105 @org.junit.Rule
106 public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
107 new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();
108 }
109