/*
* 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 org.ngrinder.sm;
import junit.framework.Assert;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ArrayUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
import java.net.Inet4Address;
import java.net.UnknownHostException;
import static org.junit.Assert.fail;
public class SecurityManagerTest {
private static final String PATH = new File("/").getAbsolutePath();
private SecurityManager preSecurityManager;
@Before
public void init() {
System.setProperty("ngrinder.exec.path", PATH);
System.setProperty("ngrinder.etc.hosts", "10.34.64.36,CN14748-D-1:127.0.0.1,localhost:127.0.0.1");
System.setProperty("ngrinder.console.ip", "10.34.63.53");
preSecurityManager = System.getSecurityManager();
System.setSecurityManager(new MockNGrinderSecurityManager());
}
@After
public void disableSecurity() {
System.setSecurityManager(preSecurityManager);
}
@Test
public void testAllowedNetworkAccess() throws UnknownHostException {
ArrayUtils.toString(Inet4Address.getAllByName("10.34.64.36"));
}
@Test(expected = SecurityException.class)
public void testNotAllowedNetworkAccess() throws UnknownHostException {
Inet4Address.getAllByName("www.google.com");
}
@Test
public void testAllowedFileAccess() {
new File("hell").getAbsolutePath();
// This should be passed
}
@Test
public void testNotAllowedFileAccess() {
boolean readTag = false, writeTag = false;
BufferedReader fis = null;
BufferedWriter fos = null;
try {
fis = new BufferedReader(new FileReader(PATH + "/input.txt"));
fail("Read should not be allowed");
} catch (Exception ioe) {
} finally {
IOUtils.closeQuietly(fis);
}
try {
fos = new BufferedWriter(new FileWriter(PATH + "/output.txt"));
fos.write("Hello SecurityManager.");
fail("This should not be reached");
Assert.assertTrue(writeTag);
} catch (IOException ioe) {
fail("This should not be reached");
} catch (SecurityException e) {
} finally {
IOUtils.closeQuietly(fos);
}
}
}