1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.hbtop.screen.field;
19
20 import static org.hamcrest.CoreMatchers.is;
21 import static org.junit.Assert.assertThat;
22 import static org.mockito.Mockito.any;
23 import static org.mockito.Mockito.anyBoolean;
24 import static org.mockito.Mockito.anyInt;
25 import static org.mockito.Mockito.eq;
26 import static org.mockito.Mockito.inOrder;
27 import static org.mockito.Mockito.verify;
28
29 import java.util.ArrayList;
30 import java.util.EnumMap;
31 import java.util.List;
32 import org.apache.hadoop.hbase.hbtop.field.Field;
33 import org.apache.hadoop.hbase.hbtop.field.FieldInfo;
34 import org.apache.hadoop.hbase.hbtop.mode.Mode;
35 import org.apache.hadoop.hbase.hbtop.screen.ScreenView;
36 import org.apache.hadoop.hbase.hbtop.screen.top.TopScreenView;
37 import org.apache.hadoop.hbase.testclassification.SmallTests;
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.junit.experimental.categories.Category;
41 import org.junit.runner.RunWith;
42 import org.mockito.InOrder;
43 import org.mockito.Mock;
44 import org.mockito.runners.MockitoJUnitRunner;
45
46 @Category(SmallTests.class)
47 @RunWith(MockitoJUnitRunner.class)
48 public class TestFieldScreenPresenter {
49
50 @Mock
51 private FieldScreenView fieldScreenView;
52
53 private int sortFieldPosition = -1;
54 private List<Field> fields;
55 private EnumMap<Field, Boolean> fieldDisplayMap;
56
57 @Mock
58 private FieldScreenPresenter.ResultListener resultListener;
59
60 @Mock
61 private TopScreenView topScreenView;
62
63 private FieldScreenPresenter fieldScreenPresenter;
64
65 @Before
66 public void setup() {
67 Field sortField = Mode.REGION.getDefaultSortField();
68
69 fields = new ArrayList<>();
70 for (FieldInfo fieldInfo : Mode.REGION.getFieldInfos()) {
71 fields.add(fieldInfo.getField());
72 }
73
74 fieldDisplayMap = new EnumMap<>(Field.class);
75 for (FieldInfo fieldInfo : Mode.REGION.getFieldInfos()) {
76 fieldDisplayMap.put(fieldInfo.getField(), fieldInfo.isDisplayByDefault());
77 }
78
79 fieldScreenPresenter =
80 new FieldScreenPresenter(fieldScreenView, sortField, fields, fieldDisplayMap, resultListener,
81 topScreenView);
82
83 for (int i = 0; i < fields.size(); i++) {
84 Field field = fields.get(i);
85 if (field == sortField) {
86 sortFieldPosition = i;
87 break;
88 }
89 }
90 }
91
92 @Test
93 public void testInit() {
94 fieldScreenPresenter.init();
95
96 int modeHeaderMaxLength = "#COMPingCell".length();
97 int modeDescriptionMaxLength = "Write Request Count per second".length();
98
99 verify(fieldScreenView).showFieldScreen(eq("#REQ/S"), eq(fields), eq(fieldDisplayMap),
100 eq(sortFieldPosition), eq(modeHeaderMaxLength), eq(modeDescriptionMaxLength), eq(false));
101 }
102
103 @Test
104 public void testChangeSortField() {
105 fieldScreenPresenter.arrowUp();
106 fieldScreenPresenter.setSortField();
107
108 fieldScreenPresenter.arrowDown();
109 fieldScreenPresenter.arrowDown();
110 fieldScreenPresenter.setSortField();
111
112 fieldScreenPresenter.pageUp();
113 fieldScreenPresenter.setSortField();
114
115 fieldScreenPresenter.pageDown();
116 fieldScreenPresenter.setSortField();
117
118 InOrder inOrder = inOrder(fieldScreenView);
119 inOrder.verify(fieldScreenView).showScreenDescription(eq("LRS"));
120 inOrder.verify(fieldScreenView).showScreenDescription(eq("#READ/S"));
121 inOrder.verify(fieldScreenView).showScreenDescription(eq(fields.get(0).getHeader()));
122 inOrder.verify(fieldScreenView).showScreenDescription(
123 eq(fields.get(fields.size() - 1).getHeader()));
124 }
125
126 @Test
127 public void testSwitchFieldDisplay() {
128 fieldScreenPresenter.switchFieldDisplay();
129 fieldScreenPresenter.switchFieldDisplay();
130
131 InOrder inOrder = inOrder(fieldScreenView);
132 inOrder.verify(fieldScreenView).showField(anyInt(), any(Field.class), eq(false),
133 anyBoolean(), anyInt(), anyInt(), anyBoolean());
134 inOrder.verify(fieldScreenView).showField(anyInt(), any(Field.class), eq(true),
135 anyBoolean(), anyInt(), anyInt(), anyBoolean());
136 }
137
138 @Test
139 @SuppressWarnings("unchecked")
140 public void testChangeFieldsOrder() {
141 fieldScreenPresenter.turnOnMoveMode();
142 fieldScreenPresenter.arrowUp();
143 fieldScreenPresenter.turnOffMoveMode();
144
145 Field removed = fields.remove(sortFieldPosition);
146 fields.add(sortFieldPosition - 1, removed);
147
148 assertThat(fieldScreenPresenter.transitionToNextScreen(), is((ScreenView) topScreenView));
149 verify(resultListener).accept(any(Field.class), eq(fields), any(EnumMap.class));
150 }
151 }