/* 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.harmony.nio.tests.java.nio.channels.spi; //import dalvik.annotation.TestTargets; //import dalvik.annotation.TestLevel; //import dalvik.annotation.TestTargetNew; //import dalvik.annotation.TestTargetClass; import java.io.IOException; import java.nio.channels.DatagramChannel; import java.nio.channels.Pipe; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.channels.spi.AbstractSelectableChannel; import java.nio.channels.spi.AbstractSelectionKey; import java.nio.channels.spi.SelectorProvider; import java.nio.channels.spi.AbstractSelector; import java.util.Set; import junit.framework.TestCase; //@TestTargetClass(AbstractSelector.class) /** * Tests for AbstractSelector and register of its default implementation */ public class AbstractSelectorTest extends TestCase { /** * @tests AbstractSelector#provider() @TestTargets({ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "provider", args = {} ), @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "AbstractSelector", args = {SelectorProvider.class} ) }) */ public void test_provider() throws IOException { Selector mockSelector = new MockAbstractSelector(SelectorProvider .provider()); assertTrue(mockSelector.isOpen()); assertSame(SelectorProvider.provider(), mockSelector.provider()); mockSelector = new MockAbstractSelector(null); assertNull(mockSelector.provider()); } /** * @tests AbstractSelector#close() @TestTargets({ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "close", args = {} ), @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "implCloseSelector", args = {} ) }) */ public void test_close() throws IOException { MockAbstractSelector mockSelector = new MockAbstractSelector( SelectorProvider.provider()); mockSelector.close(); assertTrue(mockSelector.isImplCloseSelectorCalled); } /** * * @tests AbstractSelector#begin/end() @TestTargets({ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "begin", args = {} ), @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "end", args = {} ) }) */ public void test_begin_end() throws IOException { MockAbstractSelector mockSelector = new MockAbstractSelector( SelectorProvider.provider()); try { mockSelector.superBegin(); } finally { mockSelector.superEnd(); } mockSelector = new MockAbstractSelector(SelectorProvider.provider()); try { mockSelector.superBegin(); mockSelector.close(); } finally { mockSelector.superEnd(); } try { // begin twice mockSelector.superBegin(); mockSelector.superBegin(); } finally { mockSelector.superEnd(); } try { mockSelector.superBegin(); } finally { // end twice mockSelector.superEnd(); mockSelector.superEnd(); } mockSelector.close(); try { mockSelector.superBegin(); } finally { mockSelector.superEnd(); } } /** * @tests AbstractSelector#isOpen() @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "isOpen", args = {} ) */ public void test_isOpen() throws Exception { Selector acceptSelector = SelectorProvider.provider().openSelector(); assertTrue(acceptSelector.isOpen()); acceptSelector.close(); assertFalse(acceptSelector.isOpen()); } /** * @tests AbstractSelector() @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "AbstractSelector", args = {SelectorProvider.class} ) */ public void test_Constructor_LSelectorProvider() throws Exception { Selector acceptSelector = new MockAbstractSelector( SelectorProvider.provider()); assertSame(SelectorProvider.provider(), acceptSelector.provider()); } /** * @tests AbstractSelector#register(AbstractSelectableChannel,int,Object) @TestTargetNew( level = TestLevel.COMPLETE, notes = "Verifies register method from SelectableChannel class.", method = "register", args = {AbstractSelectableChannel.class, int.class, java.lang.Object.class} ) */ public void test_register_LAbstractSelectableChannelIObject() throws Exception { Selector acceptSelector = new MockSelectorProvider().openSelector(); ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); assertFalse(ssc.isRegistered()); ssc.register(acceptSelector, SelectionKey.OP_ACCEPT); assertTrue(ssc.isRegistered()); assertTrue(((MockAbstractSelector)acceptSelector).isRegisterCalled); } /* @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "cancelledKeys", args = {} ) */ public void test_cancelledKeys() throws Exception { MockSelectorProvider prov = new MockSelectorProvider(); Selector acceptSelector = prov.openSelector(); SocketChannel sc = prov.openSocketChannel(); sc.configureBlocking(false); SelectionKey acceptKey = sc.register(acceptSelector, SelectionKey.OP_READ, null); acceptKey.cancel(); Set<SelectionKey> cKeys = ((MockAbstractSelector)acceptSelector).getCancelledKeys(); assertTrue(cKeys.contains(acceptKey)); } /* @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "deregister", args = {AbstractSelectionKey.class} ) */ public void test_deregister() throws Exception { MockSelectorProvider prov = new MockSelectorProvider(); AbstractSelector acceptSelector = prov.openSelector(); SocketChannel sc = prov.openSocketChannel(); sc.configureBlocking(false); SelectionKey acceptKey = sc.register(acceptSelector, SelectionKey.OP_READ, null); assertTrue(sc.isRegistered()); assertNotNull(acceptKey); ((MockAbstractSelector)acceptSelector).mockDeregister( (MockAbstractSelector.MockSelectionKey)acceptKey); assertFalse(sc.isRegistered()); } static class MockSelectorProvider extends SelectorProvider { private MockSelectorProvider() { // do nothing } @Override public DatagramChannel openDatagramChannel() { return null; } @Override public Pipe openPipe() { return null; } @Override public AbstractSelector openSelector() { return new MockAbstractSelector(provider()); } @Override public ServerSocketChannel openServerSocketChannel() { return null; } @Override public SocketChannel openSocketChannel() throws IOException { return SocketChannel.open(); } public static SelectorProvider provider() { return new MockSelectorProvider(); } } }