001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.hadoop.hbase.hbtop.screen.top;
019
020import static org.hamcrest.CoreMatchers.is;
021import static org.hamcrest.MatcherAssert.assertThat;
022
023import org.apache.hadoop.hbase.HBaseClassTestRule;
024import org.apache.hadoop.hbase.testclassification.SmallTests;
025import org.junit.ClassRule;
026import org.junit.Test;
027import org.junit.experimental.categories.Category;
028
029@Category(SmallTests.class)
030public class TestPaging {
031
032  @ClassRule
033  public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestPaging.class);
034
035  @Test
036  public void testArrowUpAndArrowDown() {
037    Paging paging = new Paging();
038    paging.updatePageSize(3);
039    paging.updateRecordsSize(5);
040
041    assertPaging(paging, 0, 0, 3);
042
043    paging.arrowDown();
044    assertPaging(paging, 1, 0, 3);
045
046    paging.arrowDown();
047    assertPaging(paging, 2, 0, 3);
048
049    paging.arrowDown();
050    assertPaging(paging, 3, 1, 4);
051
052    paging.arrowDown();
053    assertPaging(paging, 4, 2, 5);
054
055    paging.arrowDown();
056    assertPaging(paging, 4, 2, 5);
057
058    paging.arrowUp();
059    assertPaging(paging, 3, 2, 5);
060
061    paging.arrowUp();
062    assertPaging(paging, 2, 2, 5);
063
064    paging.arrowUp();
065    assertPaging(paging, 1, 1, 4);
066
067    paging.arrowUp();
068    assertPaging(paging, 0, 0, 3);
069
070    paging.arrowUp();
071    assertPaging(paging, 0, 0, 3);
072  }
073
074  @Test
075  public void testPageUpAndPageDown() {
076    Paging paging = new Paging();
077    paging.updatePageSize(3);
078    paging.updateRecordsSize(8);
079
080    assertPaging(paging, 0, 0, 3);
081
082    paging.pageDown();
083    assertPaging(paging, 3, 3, 6);
084
085    paging.pageDown();
086    assertPaging(paging, 6, 5, 8);
087
088    paging.pageDown();
089    assertPaging(paging, 7, 5, 8);
090
091    paging.pageDown();
092    assertPaging(paging, 7, 5, 8);
093
094    paging.pageUp();
095    assertPaging(paging, 4, 4, 7);
096
097    paging.pageUp();
098    assertPaging(paging, 1, 1, 4);
099
100    paging.pageUp();
101    assertPaging(paging, 0, 0, 3);
102
103    paging.pageUp();
104    assertPaging(paging, 0, 0, 3);
105  }
106
107  @Test
108  public void testInit() {
109    Paging paging = new Paging();
110    paging.updatePageSize(3);
111    paging.updateRecordsSize(5);
112
113    assertPaging(paging, 0, 0, 3);
114
115    paging.pageDown();
116    paging.pageDown();
117    paging.pageDown();
118    paging.pageDown();
119    paging.init();
120
121    assertPaging(paging, 0, 0, 3);
122  }
123
124  @Test
125  public void testWhenPageSizeGraterThanRecordsSize() {
126    Paging paging = new Paging();
127    paging.updatePageSize(5);
128    paging.updateRecordsSize(3);
129
130    assertPaging(paging, 0, 0, 3);
131
132    paging.arrowDown();
133    assertPaging(paging, 1, 0, 3);
134
135    paging.arrowDown();
136    assertPaging(paging, 2, 0, 3);
137
138    paging.arrowDown();
139    assertPaging(paging, 2, 0, 3);
140
141    paging.arrowUp();
142    assertPaging(paging, 1, 0, 3);
143
144    paging.arrowUp();
145    assertPaging(paging, 0, 0, 3);
146
147    paging.arrowUp();
148    assertPaging(paging, 0, 0, 3);
149
150    paging.pageDown();
151    assertPaging(paging, 2, 0, 3);
152
153    paging.pageDown();
154    assertPaging(paging, 2, 0, 3);
155
156    paging.pageUp();
157    assertPaging(paging, 0, 0, 3);
158
159    paging.pageUp();
160    assertPaging(paging, 0, 0, 3);
161  }
162
163  @Test
164  public void testWhenPageSizeIsZero() {
165    Paging paging = new Paging();
166    paging.updatePageSize(0);
167    paging.updateRecordsSize(5);
168
169    assertPaging(paging, 0, 0, 0);
170
171    paging.arrowDown();
172    assertPaging(paging, 1, 0, 0);
173
174    paging.arrowUp();
175    assertPaging(paging, 0, 0, 0);
176
177    paging.pageDown();
178    assertPaging(paging, 0, 0, 0);
179
180    paging.pageUp();
181    assertPaging(paging, 0, 0, 0);
182  }
183
184  @Test
185  public void testWhenRecordsSizeIsZero() {
186    Paging paging = new Paging();
187    paging.updatePageSize(3);
188    paging.updateRecordsSize(0);
189
190    assertPaging(paging, 0, 0, 0);
191
192    paging.arrowDown();
193    assertPaging(paging, 0, 0, 0);
194
195    paging.arrowUp();
196    assertPaging(paging, 0, 0, 0);
197
198    paging.pageDown();
199    assertPaging(paging, 0, 0, 0);
200
201    paging.pageUp();
202    assertPaging(paging, 0, 0, 0);
203  }
204
205  @Test
206  public void testWhenChangingPageSizeDynamically() {
207    Paging paging = new Paging();
208    paging.updatePageSize(3);
209    paging.updateRecordsSize(5);
210
211    assertPaging(paging, 0, 0, 3);
212
213    paging.arrowDown();
214    assertPaging(paging, 1, 0, 3);
215
216    paging.updatePageSize(2);
217    assertPaging(paging, 1, 0, 2);
218
219    paging.arrowDown();
220    assertPaging(paging, 2, 1, 3);
221
222    paging.arrowDown();
223    assertPaging(paging, 3, 2, 4);
224
225    paging.updatePageSize(4);
226    assertPaging(paging, 3, 1, 5);
227
228    paging.updatePageSize(5);
229    assertPaging(paging, 3, 0, 5);
230
231    paging.updatePageSize(0);
232    assertPaging(paging, 3, 0, 0);
233
234    paging.arrowDown();
235    assertPaging(paging, 4, 0, 0);
236
237    paging.arrowUp();
238    assertPaging(paging, 3, 0, 0);
239
240    paging.pageDown();
241    assertPaging(paging, 3, 0, 0);
242
243    paging.pageUp();
244    assertPaging(paging, 3, 0, 0);
245
246    paging.updatePageSize(1);
247    assertPaging(paging, 3, 3, 4);
248  }
249
250  @Test
251  public void testWhenChangingRecordsSizeDynamically() {
252    Paging paging = new Paging();
253    paging.updatePageSize(3);
254    paging.updateRecordsSize(5);
255
256    assertPaging(paging, 0, 0, 3);
257
258    paging.updateRecordsSize(2);
259    assertPaging(paging, 0, 0, 2);
260    assertThat(paging.getCurrentPosition(), is(0));
261    assertThat(paging.getPageStartPosition(), is(0));
262    assertThat(paging.getPageEndPosition(), is(2));
263
264    paging.arrowDown();
265    assertPaging(paging, 1, 0, 2);
266
267    paging.updateRecordsSize(3);
268    assertPaging(paging, 1, 0, 3);
269
270    paging.arrowDown();
271    assertPaging(paging, 2, 0, 3);
272
273    paging.updateRecordsSize(1);
274    assertPaging(paging, 0, 0, 1);
275
276    paging.updateRecordsSize(0);
277    assertPaging(paging, 0, 0, 0);
278
279    paging.arrowDown();
280    assertPaging(paging, 0, 0, 0);
281
282    paging.arrowUp();
283    assertPaging(paging, 0, 0, 0);
284
285    paging.pageDown();
286    assertPaging(paging, 0, 0, 0);
287
288    paging.pageUp();
289    assertPaging(paging, 0, 0, 0);
290  }
291
292  private void assertPaging(Paging paging, int currentPosition, int pageStartPosition,
293    int pageEndPosition) {
294    assertThat(paging.getCurrentPosition(), is(currentPosition));
295    assertThat(paging.getPageStartPosition(), is(pageStartPosition));
296    assertThat(paging.getPageEndPosition(), is(pageEndPosition));
297  }
298}