1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.hadoop.hbase.procedure2.store.wal;
18
19 import static org.junit.Assert.assertEquals;
20
21 import java.io.IOException;
22 import java.util.Arrays;
23 import java.util.HashMap;
24 import java.util.HashSet;
25 import java.util.Map;
26 import java.util.Objects;
27
28 import org.apache.hadoop.hbase.procedure2.Procedure;
29 import org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos;
30 import org.apache.hadoop.hbase.testclassification.SmallTests;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.experimental.categories.Category;
34 import org.mockito.Mockito;
35
36 @Category({SmallTests.class})
37 public class TestProcedureWALFormatReader {
38 private ProcedureWALFormatReader reader;
39
40 @Before
41 public void setup() throws IOException {
42 this.reader = Mockito.mock(ProcedureWALFormatReader.class);
43 Mockito.doCallRealMethod().when(reader).deserializeAndStoreProcedure(
44 Mockito.anyMap(), Mockito.any(ProcedureProtos.Procedure.class), Mockito.anyLong());
45 }
46
47 @Test
48 public void testKnownProcedures() throws IOException {
49 Map<Long,Procedure> procedures = new HashMap<>();
50 reader.deserializeAndStoreProcedure(procedures, getProcedure(
51 "org.apache.hadoop.hbase.master.procedure.CreateTableProcedure"), 1L);
52 reader.deserializeAndStoreProcedure(procedures, getProcedure(
53 "org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure"), 2L);
54 reader.deserializeAndStoreProcedure(procedures, getProcedure(
55 "org.apache.hadoop.hbase.master.procedure.DisableTableProcedure"), 3L);
56 reader.deserializeAndStoreProcedure(procedures, getProcedure(
57 "org.apache.hadoop.hbase.master.procedure.DropTableProcedure"), 4L);
58 assertEquals(4, procedures.size());
59 assertEquals(new HashSet<Long>(Arrays.asList(1L, 2L, 3L, 4L)), procedures.keySet());
60 }
61
62 @Test
63 public void testSomeUnknownProcedures() throws IOException {
64 Map<Long,Procedure> procedures = new HashMap<>();
65 reader.deserializeAndStoreProcedure(procedures, getProcedure(
66 "org.apache.hadoop.hbase.master.procedure.CreateTableProcedure"), 1L);
67 reader.deserializeAndStoreProcedure(procedures, getProcedure(
68 "org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure"), 2L);
69 reader.deserializeAndStoreProcedure(procedures, getProcedure(
70 "org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure"), 3L);
71 reader.deserializeAndStoreProcedure(procedures, getProcedure(
72 "org.apache.hadoop.hbase.master.procedure.DisableTableProcedure"), 4L);
73 reader.deserializeAndStoreProcedure(procedures, getProcedure(
74 "org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure"), 5L);
75 reader.deserializeAndStoreProcedure(procedures, getProcedure(
76 "org.apache.hadoop.hbase.master.procedure.DropTableProcedure"), 6L);
77 assertEquals(4, procedures.size());
78 assertEquals(new HashSet<Long>(Arrays.asList(1L, 3L, 4L, 6L)), procedures.keySet());
79
80 }
81
82 ProcedureProtos.Procedure getProcedure(String className) {
83 return ProcedureProtos.Procedure.newBuilder()
84 .setClassName(Objects.requireNonNull(className))
85 .setLastUpdate(10)
86 .setProcId(1)
87 .setStartTime(2)
88 .setState(ProcedureProtos.ProcedureState.FINISHED)
89 .build();
90 }
91 }