blob: 27334879018bbe023edf358f9bff7abeacb6b3c3 [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.felix.http.base.internal.registry;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.felix.http.base.internal.HttpConfig;
import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
import org.junit.Test;
/**
* Test for the ordering of servlet contexts
*/
public class PerContextHandlerRegistryTest
{
@Test
public void testPathOrdering()
{
final List<PerContextHandlerRegistry> list = new ArrayList<>();
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/", 1L, 0), new HttpConfig()));
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/foo", 2L, 0), new HttpConfig()));
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/", 3L, 0), new HttpConfig()));
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/bar", 4L, 0), new HttpConfig()));
Collections.sort(list);
assertEquals(2L, list.get(0).getContextServiceId());
assertEquals(4L, list.get(1).getContextServiceId());
assertEquals(1L, list.get(2).getContextServiceId());
assertEquals(3L, list.get(3).getContextServiceId());
}
@Test
public void testRankingOrdering()
{
final List<PerContextHandlerRegistry> list = new ArrayList<>();
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/", 1L, 0), new HttpConfig()));
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/", 2L, 0), new HttpConfig()));
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/", 3L, -30), new HttpConfig()));
list.add(new PerContextHandlerRegistry(createServletContextHelperInfo("/", 4L, 50), new HttpConfig()));
Collections.sort(list);
assertEquals(4L, list.get(0).getContextServiceId());
assertEquals(1L, list.get(1).getContextServiceId());
assertEquals(2L, list.get(2).getContextServiceId());
assertEquals(3L, list.get(3).getContextServiceId());
}
@Test
public void testOrderingSymetry()
{
testSymetry("/", "/foo", 1L, 2L, 0, 0);
testSymetry("/", "/", 1L, 2L, 0, 10);
testSymetry("/", "/", 1L, 2L, 0, 0);
testSymetry("/", "/", 1L, -2L, 0, 0);
testSymetry("/", "/", -1L, -2L, 0, 0);
testSymetry("/", "/", 0L, -1L, 0, 0);
testSymetry("/", "/", 0L, 1L, 0, 0);
}
private void testSymetry(String path, String otherPath, long id, long otherId, int ranking, int otherRanking)
{
PerContextHandlerRegistry handlerRegistry = new PerContextHandlerRegistry(createServletContextHelperInfo(path, id, ranking), new HttpConfig());
PerContextHandlerRegistry other = new PerContextHandlerRegistry(createServletContextHelperInfo(otherPath, otherId, otherRanking), new HttpConfig());
assertEquals(handlerRegistry.compareTo(other), -other.compareTo(handlerRegistry));
}
@Test
public void testOrderingTransitivity()
{
testTransitivity("/", "/foo", "/barrr", 1L, 2L, 3L, 0, 0, 0);
testTransitivity("/", "/", "/", 1L, 2L, 3L, 1, 2, 3);
testTransitivity("/", "/", "/", 2L, 1L, 0L, 1, 2, 3);
testTransitivity("/", "/", "/", 2L, 1L, 0L, 0, 0, 0);
testTransitivity("/", "/", "/", 1L, -1L, 0L, 0, 0, 0);
testTransitivity("/", "/", "/", -2L, -1L, 0L, 0, 0, 0);
}
private void testTransitivity(String highPath, String midPath, String lowPath, long highId, long midId, long lowId, int highRanking, int midRanking, int lowRanking)
{
PerContextHandlerRegistry high = new PerContextHandlerRegistry(createServletContextHelperInfo(highPath, highId, highRanking), new HttpConfig());
PerContextHandlerRegistry mid = new PerContextHandlerRegistry(createServletContextHelperInfo(midPath, midId, midRanking), new HttpConfig());
PerContextHandlerRegistry low = new PerContextHandlerRegistry(createServletContextHelperInfo(lowPath, lowId, lowRanking), new HttpConfig());
assertTrue(high.compareTo(mid) > 0);
assertTrue(mid.compareTo(low) > 0);
assertTrue(high.compareTo(low) > 0);
}
private ServletContextHelperInfo createServletContextHelperInfo(final String path, final long serviceId, final int ranking)
{
return new ServletContextHelperInfo(ranking, serviceId, "", path, null);
}
}