/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Pavel Savara * - Initial implementation *******************************************************************************/ package net.sf.robocode.test.host.security; import net.sf.robocode.core.Container; import net.sf.robocode.core.EngineClassLoader; import net.sf.robocode.host.security.RobotClassLoader; import net.sf.robocode.security.HiddenAccess; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import java.io.File; import java.io.IOException; import java.net.URL; /** * @author Pavel Savara (original) */ public class RobotClassLoaderTest { static URL classPath; final String badRobot = "tested.robots.IncludeNamespaceAttack"; final String goodRobot = "tested.robots.Ahead"; @BeforeClass public static void init() throws IOException { HiddenAccess.initContainer(); classPath = new File("../robocode.tests.robots/target/classes").getCanonicalFile().toURI().toURL(); } @Test public void engineAllowed() throws ClassNotFoundException { final ClassLoader engineLoader = new EngineClassLoader(ClassLoader.getSystemClassLoader()); engineLoader.loadClass("net.sf.robocode.host.proxies.BasicRobotProxy"); final Class<?> c = engineLoader.loadClass("net.sf.robocode.host.proxies.BasicRobotProxy"); Assert.assertEquals(engineLoader, c.getClassLoader()); } @Test public void robotAllowed() throws ClassNotFoundException { RobotClassLoader cl = new RobotClassLoader(classPath, goodRobot); final Class<?> c = cl.loadClass("robocode.Robot", true); Assert.assertEquals(Container.systemLoader, c.getClassLoader()); } @Test public void robotAllowedMain() throws ClassNotFoundException { RobotClassLoader cl = new RobotClassLoader(classPath, goodRobot); final Class<?> c = cl.loadRobotMainClass(true); Assert.assertEquals(cl, c.getClassLoader()); } @Test(expected = ClassNotFoundException.class) public void robotBlockedBad() throws ClassNotFoundException { RobotClassLoader cl = new RobotClassLoader(classPath, badRobot); cl.loadRobotMainClass(true); } @Test(expected = ClassNotFoundException.class) public void robotBlockedRobocode() throws ClassNotFoundException { RobotClassLoader cl = new RobotClassLoader(classPath, goodRobot); cl.loadClass("net.sf.robocode.host.proxies.BasicRobotProxy"); } @Test(expected = ClassNotFoundException.class) public void robotBlockedControl() throws ClassNotFoundException { RobotClassLoader cl = new RobotClassLoader(classPath, goodRobot); cl.loadClass("robocode.control.RobocodeEngine"); } }