blob: 5b9adc5e3dabe69c396f34f65b6785cd28ee199b [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.harmony.tests.java.nio.channels.spi;
import java.io.IOException;
import java.nio.channels.ClosedSelectorException;
import java.nio.channels.IllegalBlockingModeException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.spi.SelectorProvider;
import junit.framework.TestCase;
/**
* Tests for AbstractSelector and register of its default implementation
*/
public class AbstractSelectorTest extends TestCase {
/**
* @tests AbstractSelector#provider()
*/
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()
*/
public void test_close() throws IOException {
MockAbstractSelector mockSelector = new MockAbstractSelector(
SelectorProvider.provider());
mockSelector.close();
assertTrue(mockSelector.isImplCloseSelectorCalled);
}
/**
*
* @tests AbstractSelector#begin/end()
*/
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()
*/
public void test_isOpen() throws Exception {
Selector acceptSelector = SelectorProvider.provider().openSelector();
assertTrue(acceptSelector.isOpen());
acceptSelector.close();
assertFalse(acceptSelector.isOpen());
}
/**
* @tests AbstractSelector#register(Selector,int)
*/
public void test_register_LSelectorI() throws Exception {
Selector acceptSelector = SelectorProvider.provider().openSelector();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
assertFalse(ssc.isRegistered());
SelectionKey acceptKey = ssc.register(acceptSelector,
SelectionKey.OP_ACCEPT);
assertTrue(ssc.isRegistered());
assertNotNull(acceptKey);
assertTrue(acceptSelector.keys().contains(acceptKey));
}
/**
* @tests AbstractSelector#register(Selector,int)
*/
public void test_register_LSelectorI_error() throws IOException {
Selector acceptSelector = SelectorProvider.provider().openSelector();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
acceptSelector.close();
assertFalse(acceptSelector.isOpen());
try {
ssc.register(acceptSelector, SelectionKey.OP_ACCEPT);
fail("should throw ClosedSelectorException");
} catch (ClosedSelectorException e) {
// expected
}
assertFalse(ssc.isRegistered());
acceptSelector = Selector.open();
ssc.configureBlocking(true);
try {
ssc.register(acceptSelector, SelectionKey.OP_ACCEPT);
fail("should throw IllegalBlockingModeException");
} catch (IllegalBlockingModeException e) {
// expected
}
assertFalse(ssc.isRegistered());
ssc.configureBlocking(false);
SelectionKey acceptKey = ssc.register(acceptSelector,
SelectionKey.OP_ACCEPT);
assertNotNull(acceptKey);
assertTrue(acceptSelector.keys().contains(acceptKey));
assertTrue(ssc.isRegistered());
}
}