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.junit.Test;
27
28 public class TestTaskMonitor {
29
30 @Test
31 public void testTaskMonitorBasics() {
32 TaskMonitor tm = new TaskMonitor();
33 assertTrue("Task monitor should start empty",
34 tm.getTasks().isEmpty());
35
36
37 MonitoredTask task = tm.createStatus("Test task");
38 MonitoredTask taskFromTm = tm.getTasks().get(0);
39
40
41 assertEquals(task.getDescription(), taskFromTm.getDescription());
42 assertEquals(-1, taskFromTm.getCompletionTimestamp());
43 assertEquals(MonitoredTask.State.RUNNING, taskFromTm.getState());
44
45
46 task.markComplete("Finished!");
47 assertEquals(MonitoredTask.State.COMPLETE, task.getState());
48
49
50 assertEquals(1, tm.getTasks().size());
51
52
53 task.expireNow();
54 assertEquals(0, tm.getTasks().size());
55 }
56
57 @Test
58 public void testTasksGetAbortedOnLeak() throws InterruptedException {
59 final TaskMonitor tm = new TaskMonitor();
60 assertTrue("Task monitor should start empty",
61 tm.getTasks().isEmpty());
62
63 final AtomicBoolean threadSuccess = new AtomicBoolean(false);
64
65 Thread t = new Thread() {
66 @Override
67 public void run() {
68 MonitoredTask task = tm.createStatus("Test task");
69 assertEquals(MonitoredTask.State.RUNNING, task.getState());
70 threadSuccess.set(true);
71 }
72 };
73 t.start();
74 t.join();
75
76 assertTrue(threadSuccess.get());
77
78
79 System.gc();
80 System.gc();
81 System.gc();
82
83
84 MonitoredTask taskFromTm = tm.getTasks().get(0);
85 assertEquals(MonitoredTask.State.ABORTED, taskFromTm.getState());
86 }
87
88 @Test
89 public void testTaskLimit() throws Exception {
90 TaskMonitor tm = new TaskMonitor();
91 for (int i = 0; i < TaskMonitor.MAX_TASKS + 10; i++) {
92 tm.createStatus("task " + i);
93 }
94
95 assertEquals(TaskMonitor.MAX_TASKS, tm.getTasks().size());
96
97
98 assertEquals("task 10", tm.getTasks().get(0).getDescription());
99 }
100
101 }