/*
* JBoss, Home of Professional Open Source.
* Copyright 2010, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.host.controller.model.jvm;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
/**
*
* @author <a href="kabir.khan@jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
public class JvmOptionsBuilderUnitTestCase {
@Test
public void testNoOptionsSun() {
testNoOptions(JvmType.SUN);
}
@Test
public void testNoOptionsIbm() {
testNoOptions(JvmType.IBM);
}
private void testNoOptions(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
List<String> command = new ArrayList<>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(0, command.size());
}
@Test
public void testDebugOptionsNotEnabledSun() {
testDebugOptionsNotEnabled(JvmType.SUN);
}
@Test
public void testDebugOptionsNotEnabledIbm() {
testDebugOptionsNotEnabled(JvmType.IBM);
}
private void testDebugOptionsNotEnabled(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setDebugEnabled(element, false);
JvmElementTestUtils.setDebugOptions(element, "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(0, command.size());
}
@Test
public void testDebugOptionsAndEnabledSun() {
testDebugOptionsAndEnabled(JvmType.SUN);
}
@Test
public void testDebugOptionsAndEnabledIbm() {
testDebugOptionsAndEnabled(JvmType.IBM);
}
private void testDebugOptionsAndEnabled(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setDebugEnabled(element, true);
JvmElementTestUtils.setDebugOptions(element, "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(1, command.size());
Assert.assertTrue(command.contains("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n"));
}
@Test
public void testHeapSun() {
testHeap(JvmType.SUN);
}
@Test
public void testHeapIbm() {
testHeap(JvmType.IBM);
}
private void testHeap(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setHeapSize(element, "28M");
JvmElementTestUtils.setMaxHeap(element, "96M");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(2, command.size());
Assert.assertTrue(command.contains("-Xms28M"));
Assert.assertTrue(command.contains("-Xmx96M"));
}
@Test
public void testPermgenSun() {
JvmElement element = JvmElementTestUtils.create(JvmType.SUN);
JvmElementTestUtils.setPermgenSize(element, "32M");
JvmElementTestUtils.setMaxPermgen(element, "64M");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(0, command.size());
}
@Test
public void testPermgenIbm() {
JvmElement element = JvmElementTestUtils.create(JvmType.IBM);
JvmElementTestUtils.setPermgenSize(element, "32M");
JvmElementTestUtils.setMaxPermgen(element, "64M");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(0, command.size());
}
@Test
public void testStackSun() {
testStack(JvmType.SUN);
}
@Test
public void testStackIbm() {
testStack(JvmType.IBM);
}
private void testStack(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setStack(element, "1M");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(1, command.size());
Assert.assertTrue(command.contains("-Xss1M"));
}
@Test
public void testAgentLibSun() {
testAgentLib(JvmType.SUN);
}
@Test
public void testAgentLibIbm() {
testAgentLib(JvmType.IBM);
}
private void testAgentLib(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setAgentLib(element, "blah=x");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(1, command.size());
Assert.assertTrue(command.contains("-agentlib:blah=x"));
}
@Test
public void testAgentPathSun() {
testAgentPath(JvmType.SUN);
}
@Test
public void testAgentPathIbm() {
testAgentPath(JvmType.IBM);
}
private void testAgentPath(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setAgentPath(element, "blah.jar=x");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(1, command.size());
Assert.assertTrue(command.contains("-agentpath:blah.jar=x"));
}
@Test
public void testJavaagentSun() {
testJavaagent(JvmType.SUN);
}
@Test
public void testJavaagentIbm() {
testJavaagent(JvmType.IBM);
}
private void testJavaagent(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.setJavaagent(element, "blah.jar=x");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(1, command.size());
Assert.assertTrue(command.contains("-javaagent:blah.jar=x"));
}
@Test
public void testJvmOptionsSun() {
testJvmOptions(JvmType.SUN);
}
@Test
public void testJvmOptionsIbm() {
testJvmOptions(JvmType.IBM);
}
private void testJvmOptions(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
JvmElementTestUtils.addJvmOption(element, "-Xblah1=yes");
JvmElementTestUtils.addJvmOption(element, "-Xblah2=no");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals(2, command.size());
Assert.assertTrue(command.contains("-Xblah1=yes"));
Assert.assertTrue(command.contains("-Xblah2=no"));
}
@Test
public void testJvmOptionsIgnoredWhenInMainSchemaSun() {
testJvmOptionsIgnoredWhenInMainSchema(JvmType.SUN);
}
@Test
public void testJvmOptionsIgnoredWhenInMainSchemaIbm() {
testJvmOptionsIgnoredWhenInMainSchema(JvmType.IBM);
}
private void testJvmOptionsIgnoredWhenInMainSchema(JvmType type) {
JvmElement element = JvmElementTestUtils.create(type);
//Main schema
JvmElementTestUtils.setDebugEnabled(element, true);
JvmElementTestUtils.setDebugOptions(element, "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n");
JvmElementTestUtils.setHeapSize(element, "28M");
JvmElementTestUtils.setMaxHeap(element, "96M");
JvmElementTestUtils.setPermgenSize(element, "32M");
JvmElementTestUtils.setMaxPermgen(element, "64M");
JvmElementTestUtils.setStack(element, "1M");
JvmElementTestUtils.setAgentLib(element, "blah=x");
JvmElementTestUtils.setJavaagent(element, "blah.jar=x");
//Options
JvmElementTestUtils.addJvmOption(element, "-Xblah1=yes");
JvmElementTestUtils.addJvmOption(element, "-Xblah2=no");
//Ignored options
JvmElementTestUtils.addJvmOption(element, "-agentlib:jdwp=ignoreme");
JvmElementTestUtils.addJvmOption(element, "-Xms1024M");
JvmElementTestUtils.addJvmOption(element, "-Xmx1024M");
JvmElementTestUtils.addJvmOption(element, "-XX:PermSize=1024M");
JvmElementTestUtils.addJvmOption(element, "-XX:MaxPermSize=1024M");
JvmElementTestUtils.addJvmOption(element, "-Xss100M");
JvmElementTestUtils.addJvmOption(element, "-agentlib:other=x");
JvmElementTestUtils.addJvmOption(element, "-javaagent:other.jar=x");
List<String> command = new ArrayList<String>();
JvmOptionsBuilderFactory.getInstance().addOptions(element, command);
Assert.assertEquals( 8, command.size());
Assert.assertTrue(command.contains("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n"));
Assert.assertTrue(command.contains("-Xms28M"));
Assert.assertTrue(command.contains("-Xmx96M"));
Assert.assertTrue(command.contains("-Xss1M"));
Assert.assertTrue(command.contains("-agentlib:blah=x"));
Assert.assertTrue(command.contains("-javaagent:blah.jar=x"));
Assert.assertTrue(command.contains("-Xblah1=yes"));
Assert.assertTrue(command.contains("-Xblah2=no"));
}
}