blob: 329ca552fc0142d180368d5fa3eb4fba30fcadc7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.vysper.xmpp.extension.xep0124;
import junit.framework.TestCase;
/**
*/
public class RequestsWindowTest extends TestCase {
protected RequestsWindow requestsWindow;
public void testSetHighestContinousFromDiscontinousInsert() {
requestsWindow = new RequestsWindow("1");
queueNewRequest(1L);
assertHighestContinuous(1);
queueNewRequest(3L); // 3 before 2
assertHighestContinuous(1); // HCR is still on 1
queueNewRequest(2L); // 2 after 3
assertHighestContinuous(3); // HCR is correct
assertRID(1L, requestsWindow.pollNext());
assertRID(2L, requestsWindow.pollNext());
assertRID(3L, requestsWindow.pollNext());
}
public void testAllowDuplicateRIDs() {
requestsWindow = new RequestsWindow("1");
queueNewRequest(100L);
queueNewRequest(100L); // another 100
assertEquals(2, requestsWindow.size());
}
public void testRequestGap() {
requestsWindow = new RequestsWindow("1");
queueNewRequest(3L);
assertHighestContinuous(3);
queueNewRequest(5L);
assertHighestContinuous(3);
// now, 3 is highest continous, 4 is missing, 5 is highest: [3 HCR, GAP, 5]
// now, fetch 3
final BoshRequest boshRequest3 = requestsWindow.pollNext();
assertRID(3L, boshRequest3);
final BoshRequest boshRequest5 = requestsWindow.pollNext();
assertHighestContinuous(5);
System.out.println("reqWin = " + requestsWindow.logRequestWindow());
}
public void testRequest2Gaps() {
requestsWindow = new RequestsWindow("1");
queueNewRequest(3L);
assertHighestContinuous(3);
queueNewRequest(5L);
queueNewRequest(6L);
assertHighestContinuous(3);
queueNewRequest(8L);
queueNewRequest(9L);
queueNewRequest(10L);
assertHighestContinuous(3);
// now we have request [3, 5, 6, 8, 9, 10]
// now, fetch 3
final BoshRequest boshRequest3 = requestsWindow.pollNext();
assertRID(3L, boshRequest3);
assertRID(5L, requestsWindow.pollNext());
assertRID(6L, requestsWindow.pollNext());
assertHighestContinuous(6);
assertRID(8L, requestsWindow.pollNext());
assertRID(9L, requestsWindow.pollNext());
assertRID(10L, requestsWindow.pollNext());
assertHighestContinuous(10);
}
private void assertRID(final long expectedRid, BoshRequest boshRequest) {
assertEquals(expectedRid, (long)boshRequest.getRid());
}
private void assertHighestContinuous(final int expected) {
assertEquals(expected, requestsWindow.getHighestContinuousRid());
}
private void queueNewRequest(final long rid) {
requestsWindow.queueRequest(new BoshRequest(null, null, rid));
}
}