/** * Copyright 2010 Wealthfront Inc. 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 com.kaching.platform.testing; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import org.junit.Before; import org.junit.Test; import com.kaching.platform.common.Option; import com.kaching.platform.testing.LessIOSecurityManager.CantDoItException; public class LessIOSecurityManagerTest extends LessIOSecurityManagerTestHelper { LessIOSecurityManager sm; @Before public void setupSecurityManager() { sm = new LessIOSecurityManager(); } @Test public void testNoSecurityManager() { withTemporarySM(null, new Runnable() { @Override public void run() { try { openSocket(); } catch (Exception e) { assertTrue(String.format("Received %s (%s) instead of IOException", System.getSecurityManager(), e.getClass().getCanonicalName(), e.getLocalizedMessage()), e instanceof IOException); } } }); } @Test public void testSecurityManager() { withTemporarySM(sm, new Runnable() { @Override public void run() { try { openSocket(); } catch (Exception e) { assertTrue(String.format( "Received %s (%s) instead of CantDoItException", e.getClass() .getCanonicalName(), e.getLocalizedMessage()), e instanceof CantDoItException); } } }); } @Test public void testAssertAllowed() { assertAllowed( sm, new RunnableWithException() { @Override public void run() throws Exception { throw new UnsupportedOperationException(); } }, Option .<Class<? extends Exception>> of(UnsupportedOperationException.class)); try { assertAllowed(sm, new RunnableWithException() { @Override public void run() throws Exception { throw new CantDoItException(); } }, Option.<Class<? extends Exception>> none()); } catch (AssertionError e) { // Success } } @Test public void testAssertDisallowed() { assertDisallowed(sm, new RunnableWithException() { @Override public void run() throws Exception { throw new CantDoItException(); } }); try { assertDisallowed(sm, new RunnableWithException() { @Override public void run() throws Exception { // Intentionally left empty. } }); } catch (AssertionError e) { // Success } } private void openSocket() throws IOException { (new Socket()).connect(new InetSocketAddress("localhost", 1)); } }