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