blob: e0e7bcc269d1bed31459671f0a6da567071bad8e [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.jetty.internal;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.osgi.framework.BundleContext;
/**
* Unit test for JettyConfig
*/
public class JettyConfigTest
{
JettyConfig config;
BundleContext context;
@Test public void testGetDefaultPort()
{
assertEquals("HTTP port", 8080, this.config.getHttpPort());
assertEquals("HTTPS port", 8443, this.config.getHttpsPort());
}
@Test public void testGetPortInRange()
{
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.osgi.service.http.port", "[8000,9000]");
props.put("org.osgi.service.http.port.secure", "[10000,11000)");
this.config.update(props);
assertTrue(this.config.getHttpPort() >= 8000 && this.config.getHttpPort() <= 9000);
assertTrue(this.config.getHttpsPort() >= 10000 && this.config.getHttpsPort() < 11000);
props.put("org.osgi.service.http.port", "(12000,13000]");
props.put("org.osgi.service.http.port.secure", "(14000,15000)");
this.config.update(props);
assertTrue(this.config.getHttpPort() > 12000 && this.config.getHttpPort() <= 13000);
assertTrue(this.config.getHttpsPort() > 14000 && this.config.getHttpsPort() < 15000);
props.put("org.osgi.service.http.port", "[,9000]");
props.put("org.osgi.service.http.port.secure", "[9000,)");
this.config.update(props);
assertTrue(this.config.getHttpPort() >= 1 && this.config.getHttpPort() <= 9000);
assertTrue(this.config.getHttpsPort() >= 9000 && this.config.getHttpsPort() < 65535);
}
@Test public void testGetPortInvalidRange()
{
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.osgi.service.http.port", "+12000,13000*");
props.put("org.osgi.service.http.port.secure", "%14000,15000");
this.config.update(props);
assertEquals(8080, this.config.getHttpPort());
assertEquals(8443, this.config.getHttpsPort());
}
@Test public void testGetSpecificPortOne() throws Exception
{
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.osgi.service.http.port", "1");
this.config.update(props);
assertTrue(this.config.getHttpPort() == 1);
}
@Test public void testGetRandomPort()
{
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.osgi.service.http.port", "*");
props.put("org.osgi.service.http.port.secure", "*");
this.config.update(props);
assertTrue(this.config.getHttpPort() != 8080);
assertTrue(this.config.getHttpsPort() != 443);
}
@Test public void testGetRandomPortZero() throws Exception
{
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.osgi.service.http.port", "0");
this.config.update(props);
assertTrue(this.config.getHttpPort() != 0);
}
@Test public void testGetSpecificPort() throws Exception
{
int port = 80;
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.osgi.service.http.port", port);
props.put("org.osgi.service.http.port.secure", port);
this.config.update(props);
assertTrue(this.config.getHttpPort() == port);
assertTrue(this.config.getHttpsPort() == port);
}
@Test public void testParseStringArrayProperty() {
Hashtable<String, Object> props = new Hashtable<>();
props.put("org.apache.felix.https.jetty.ciphersuites.excluded",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_anon_WITH_RC4_128_SHA");
this.config.update(props);
String[] expecteds = {"TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECDH_anon_WITH_RC4_128_SHA"};
assertArrayEquals(expecteds, this.config.getExcludedCipherSuites());
}
@SuppressWarnings("unchecked")
@Test public void testAdditionalCustomProperties() {
Hashtable<String, Object> props = new Hashtable<>();
props.put(JettyConfig.FELIX_CUSTOM_HTTP_RUNTIME_PROPERTY_PREFIX + "number", 5);
props.put(JettyConfig.FELIX_CUSTOM_HTTP_RUNTIME_PROPERTY_PREFIX + "string", "testString");
List<String> list = new ArrayList<>(3);
list.add("string1");
list.add("string2");
list.add("string3");
props.put(JettyConfig.FELIX_CUSTOM_HTTP_RUNTIME_PROPERTY_PREFIX + "list", list);
this.config.update(props);
Hashtable<String, Object> toCheck = new Hashtable<>();
this.config.setServiceProperties(toCheck);
assertEquals(5, toCheck.get("number"));
assertEquals("testString", toCheck.get("string"));
assertTrue(toCheck.get("list") instanceof List);
assertEquals(3, ((List<String>)toCheck.get("list")).size());
assertEquals("string2", ((List<String>)toCheck.get("list")).get(1));
}
@Before
public void setUp()
{
this.context = Mockito.mock(BundleContext.class);
this.config = new JettyConfig(this.context);
}
}