blob: 6cd804ac8b69a3bfb78f939b41d20e893f3fd4c7 [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.sling.discovery.base.connectors.ping;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import javax.servlet.http.HttpServletRequest;
import org.apache.sling.discovery.base.commons.ClusterViewService;
import org.apache.sling.discovery.base.connectors.BaseConfig;
import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.osgi.service.http.HttpService;
import java.util.Hashtable;
public class TopologyConnectorServletTest {
private TopologyConnectorServlet servlet;
@Rule
public final OsgiContext context = new OsgiContext();
private HttpServletRequest getRequest(String host, String addr) {
HttpServletRequest result = mock(HttpServletRequest.class);
when(result.getRemoteAddr()).thenReturn(addr);
when(result.getRemoteHost()).thenReturn(host);
return result;
}
@Before
public void setUp() throws Exception {
//Mock BaseConfig
BaseConfig baseConfig = mock(BaseConfig.class);
context.registerService(BaseConfig.class, baseConfig);
//Mock AnnouncementRegistry
AnnouncementRegistry announcementRegistry = mock(AnnouncementRegistry.class);
context.registerService(AnnouncementRegistry.class, announcementRegistry);
//Mock ClusterViewService
ClusterViewService clusterViewService = mock(ClusterViewService.class);
context.registerService(ClusterViewService.class, clusterViewService);
//Mock HttpService
HttpService httpService = mock(HttpService.class);
context.registerService(HttpService.class, httpService);
servlet = context.registerInjectActivateService(TopologyConnectorServlet.class, new TopologyConnectorServlet(), new Hashtable<>());
}
@Test
public void testNull() throws Exception {
servlet.initWhitelist(null); // should work fine
servlet.initWhitelist(new String[0]); // should also work fine
}
@Test
public void testPlaintextWhitelist_enabled() throws Exception {
servlet.initWhitelist(new String[] {"foo", "bar"});
assertTrue(servlet.isWhitelisted(getRequest("foo", "x")));
assertTrue(servlet.isWhitelisted(getRequest("bar", "x")));
assertTrue(servlet.isWhitelisted(getRequest("y", "foo")));
assertTrue(servlet.isWhitelisted(getRequest("y", "bar")));
}
@Test
public void testPlaintextWhitelist_disabled() throws Exception {
servlet.initWhitelist(new String[] {});
assertFalse(servlet.isWhitelisted(getRequest("foo", "x")));
assertFalse(servlet.isWhitelisted(getRequest("bar", "x")));
assertFalse(servlet.isWhitelisted(getRequest("y", "foo")));
assertFalse(servlet.isWhitelisted(getRequest("y", "bar")));
}
@Test
public void testWildcardWhitelist() throws Exception {
servlet.initWhitelist(new String[] {"foo*", "b?r", "test"});
assertTrue(servlet.isWhitelisted(getRequest("foo", "x")));
assertTrue(servlet.isWhitelisted(getRequest("fooo", "x")));
assertTrue(servlet.isWhitelisted(getRequest("foooo", "x")));
assertTrue(servlet.isWhitelisted(getRequest("x", "foo")));
assertTrue(servlet.isWhitelisted(getRequest("x", "fooo")));
assertTrue(servlet.isWhitelisted(getRequest("x", "foooo")));
assertTrue(servlet.isWhitelisted(getRequest("bur", "x")));
assertTrue(servlet.isWhitelisted(getRequest("x", "bur")));
assertTrue(servlet.isWhitelisted(getRequest("x", "test")));
assertFalse(servlet.isWhitelisted(getRequest("fo", "x")));
assertFalse(servlet.isWhitelisted(getRequest("x", "testy")));
}
@Test
public void testSubnetMaskWhitelist() throws Exception {
servlet.initWhitelist(new String[] {"1.2.3.4/24", "2.3.4.1/30", "3.4.5.6/31"});
assertTrue(servlet.isWhitelisted(getRequest("foo", "1.2.3.4")));
assertFalse(servlet.isWhitelisted(getRequest("1.2.3.4", "1.2.4.3")));
assertTrue(servlet.isWhitelisted(getRequest("foo", "1.2.3.1")));
assertTrue(servlet.isWhitelisted(getRequest("foo", "1.2.3.254")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "1.2.4.5")));
assertTrue(servlet.isWhitelisted(getRequest("foo", "2.3.4.1")));
assertTrue(servlet.isWhitelisted(getRequest("foo", "2.3.4.2")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "2.3.4.3")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "2.3.4.4")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.1")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.2")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.3")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.4")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.5")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.6")));
assertFalse(servlet.isWhitelisted(getRequest("foo", "3.4.5.7")));
}
}