View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
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 }