/* * JBoss, Home of Professional Open Source. * * Copyright 2013 Red Hat, Inc. and/or its affiliates, and individual * contributors as indicated by the @author tags. * * Licensed 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.xnio.ssl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import org.junit.Test; import org.xnio.FileAccess; import org.xnio.LocalSocketAddress; import org.xnio.OptionMap; import org.xnio.Options; /** * Asserts that the SSL channel delegates some operations such as getLocalAddress to the underlying connection. * * @author <a href="mailto:frainone@redhat.com">Flavia Rainone</a> */ public class ChannelDelegationTestCase extends AbstractConnectedSslStreamChannelTest { @Test public void getLocalAddress() { SocketAddress address = new LocalSocketAddress("here"); connectionMock.setLocalAddress(address); assertSame(address, sslChannel.getLocalAddress()); address = new InetSocketAddress(100); connectionMock.setLocalAddress(address); assertSame(address, connectionMock.getLocalAddress()); } @Test public void getTypedLocalAddress() { SocketAddress address = new LocalSocketAddress("here"); connectionMock.setLocalAddress(address); assertSame(address, sslChannel.getLocalAddress(LocalSocketAddress.class)); assertSame(address, sslChannel.getLocalAddress(SocketAddress.class)); assertNull(sslChannel.getLocalAddress(InetSocketAddress.class)); address = new InetSocketAddress(1009); connectionMock.setLocalAddress(address); assertSame(address, sslChannel.getLocalAddress(InetSocketAddress.class)); assertSame(address, sslChannel.getLocalAddress(SocketAddress.class)); assertNull(sslChannel.getLocalAddress(LocalSocketAddress.class)); } @Test public void getPeerAddress() { SocketAddress address = new LocalSocketAddress("there"); connectionMock.setPeerAddress(address); assertSame(address, sslChannel.getPeerAddress()); address = new InetSocketAddress(10); connectionMock.setPeerAddress(address); assertSame(address, connectionMock.getPeerAddress()); } @Test public void getTypedPeerAddress() { SocketAddress address = new LocalSocketAddress("there"); connectionMock.setPeerAddress(address); assertSame(address, sslChannel.getPeerAddress(LocalSocketAddress.class)); assertSame(address, sslChannel.getPeerAddress(SocketAddress.class)); assertNull(sslChannel.getPeerAddress(InetSocketAddress.class)); address = new InetSocketAddress(1009); connectionMock.setPeerAddress(address); assertSame(address, sslChannel.getPeerAddress(InetSocketAddress.class)); assertSame(address, sslChannel.getPeerAddress(SocketAddress.class)); assertNull(sslChannel.getPeerAddress(LocalSocketAddress.class)); } @Test public void getWorker() { assertSame(sslChannel.getWorker(), connectionMock.getWorker()); } @Test public void getSslSession() { assertNotNull(sslChannel.getSslSession()); } @Test public void getOption() throws IOException { connectionMock.setOptionMap(OptionMap.create(Options.SSL_ENABLED, Boolean.TRUE, Options.MAX_INBOUND_MESSAGE_SIZE, Integer.valueOf(1000))); assertSame(Boolean.TRUE, sslChannel.getOption(Options.SSL_ENABLED)); assertEquals(1000, sslChannel.getOption(Options.MAX_INBOUND_MESSAGE_SIZE).intValue()); assertNull(sslChannel.getOption(Options.READ_TIMEOUT)); connectionMock.setOptionMap(OptionMap.create(Options.ALLOW_BLOCKING, Boolean.TRUE)); assertSame(Boolean.TRUE, sslChannel.getOption(Options.ALLOW_BLOCKING)); assertNull(sslChannel.getOption(Options.SSL_ENABLED)); } @Test public void supportsOption() throws IOException { connectionMock.setOptionMap(OptionMap.create(Options.FILE_ACCESS, FileAccess.READ_ONLY, Options.CLOSE_ABORT, Boolean.FALSE)); assertTrue(sslChannel.supportsOption(Options.FILE_ACCESS)); assertTrue(sslChannel.supportsOption(Options.CLOSE_ABORT)); assertFalse(sslChannel.supportsOption(Options.SSL_ENABLED)); connectionMock.setOptionMap(OptionMap.create(Options.BROADCAST, Boolean.TRUE)); assertTrue(sslChannel.supportsOption(Options.BROADCAST)); assertFalse(sslChannel.supportsOption(Options.IP_TRAFFIC_CLASS)); assertTrue(sslChannel.supportsOption(Options.SECURE)); } }