diff options
Diffstat (limited to 'src/test/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java')
-rw-r--r-- | src/test/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/test/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java b/src/test/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java new file mode 100644 index 0000000000..ab0c704a2e --- /dev/null +++ b/src/test/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java @@ -0,0 +1,160 @@ +// Copyright 2002 The Bazel Authors. All Rights Reserved. +// +// 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.google.testing.junit.runner.util; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.security.Permission; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Test the GoogleTestSecurityManager. Most of the tests only works if the + * security manager is actually installed; otherwise they just + * pass without testing anything. + */ +@RunWith(JUnit4.class) +public class GoogleTestSecurityManagerTest { + private SecurityManager previousSecurityManager; + private GoogleTestSecurityManager installedSecurityManager; + + @Before + public void setUp() throws Exception { + previousSecurityManager = System.getSecurityManager(); + + // These tests assume that there isn't already a GoogleTestSecurityManager + // running. + GoogleTestSecurityManager.uninstallIfInstalled(); + } + + @After + public void tearDown() { + if (installedSecurityManager != null) { + installedSecurityManager.setEnabled(false); + } + if (System.getSecurityManager() != previousSecurityManager) { + System.setSecurityManager(previousSecurityManager); + } + } + + private void installTestSecurityManager() { + SecurityManager previousSecurityManager = System.getSecurityManager(); + assertNull(previousSecurityManager); + + installedSecurityManager = new GoogleTestSecurityManager(); + System.setSecurityManager(installedSecurityManager); + } + + @Test + public void testExit() { + installTestSecurityManager(); + + try { + System.exit(1); + fail("exit() have thrown exception; how come it didn't exit?!"); + } catch (SecurityException se) { + // passed + } + } + + @Test + public void testSetSecurityManager() { + installTestSecurityManager(); + + try { + System.setSecurityManager(new SecurityManager()); + fail("setSecurityManager() should have thrown exception."); + } catch (SecurityException se) { + // passed + } + } + + /** + * test enabling/disabling the security manager. This test does not require + * that a GoogleTestSecurityManager be installed. + */ + @Test + public void testSecurityManagerEnabled() { + // create a security manager to use, but don't install it. + GoogleTestSecurityManager sm = new GoogleTestSecurityManager(); + + assertTrue(sm.isEnabled()); + try { + sm.checkExit(0); + fail("GoogleTestSecurityManager allowed exit while enabled."); + } catch (SecurityException ex) { + // passed + } + + sm.setEnabled(false); + assertTrue(!sm.isEnabled()); + + sm.checkExit(0); // should allow + + sm.setEnabled(true); + assertTrue(sm.isEnabled()); + try { + sm.checkExit(0); + fail("GoogleTestSecurityManager allowed exit while enabled."); + } catch (SecurityException ex) { + // passed + } + } + + @Test + public void testUninstallIfInstalled_whenInstalled() { + installTestSecurityManager(); + GoogleTestSecurityManager.uninstallIfInstalled(); + + assertTrue("Security manager should be enabled", installedSecurityManager.isEnabled()); + assertNull("Security manager should be uninstalled", System.getSecurityManager()); + } + + @Test + public void testUninstallIfInstalled_whenNoSecurityManagerInstalled() { + GoogleTestSecurityManager.uninstallIfInstalled(); + + assertNull("No security manager should be uninstalled", System.getSecurityManager()); + } + + @Test + public void testUninstallIfInstalled_whenOtherSecurityManagerInstalled() { + PermissiveSecurityManager otherSecurityManager = new PermissiveSecurityManager(); + System.setSecurityManager(otherSecurityManager); + GoogleTestSecurityManager.uninstallIfInstalled(); + + assertSame(otherSecurityManager, System.getSecurityManager()); + System.setSecurityManager(null); + } + + /** + * Security manager that allows anything. + */ + private static class PermissiveSecurityManager extends SecurityManager { + @Override public void checkPermission(Permission p) { + return; + } + + @Override public void checkPermission(Permission p, java.lang.Object o) { + return; + } + } +} |