/*
* $Id$
*
* Janus platform is an open-source multiagent platform.
* More details on http://www.janusproject.io
*
* Copyright (C) 2014-2015 Sebastian RODRIGUEZ, Nicolas GAUD, Stéphane GALLAND.
*
* 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 io.janusproject.tests;
import static org.junit.Assert.*;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
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 static org.junit.Assume.assumeNotNull;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Provides;
import io.janusproject.Boot;
import io.janusproject.Boot.Exiter;
import io.janusproject.JanusConfig;
import io.janusproject.JanusVersion;
import io.janusproject.kernel.Kernel;
import io.janusproject.tests.testutils.AbstractJanusRunTest;
import io.janusproject.tests.testutils.AbstractJanusTest;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.arakhne.afc.vmutil.FileSystem;
import org.arakhne.afc.vmutil.Resources;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import io.sarl.core.DefaultContextInteractions;
import io.sarl.lang.SARLVersion;
import io.sarl.lang.annotation.SarlSpecification;
import io.sarl.lang.core.Agent;
import io.sarl.lang.core.BuiltinCapacitiesProvider;
import io.sarl.tests.api.Nullable;
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@RunWith(Suite.class)
@SuiteClasses({ BootTest.SetterTests.class, BootTest.CommandLineParserTests.class, BootTest.CommandLineExecutionTests.class,
BootTest.StartTests.class, BootTest.BootAgentIdentifierTests.class, BootTest.RunConfigurationTests.class, })
@SuppressWarnings("all")
public class BootTest {
static final UUID ID = UUID.fromString("63ee52ee-4739-47b1-9e73-0a7986d17bc5");
protected static String[] args(String... strings) {
return strings;
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SarlSpecification(SARLVersion.SPECIFICATION_RELEASE_VERSION_STRING)
protected static class AgentMock extends Agent {
/**
*/
public AgentMock() {
super(Mockito.mock(BuiltinCapacitiesProvider.class), UUID.randomUUID(), null);
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
protected static class TestModule implements Module {
public TestModule() {
//
}
@Override
public void configure(Binder binder) {
//
}
@Provides
public Kernel createKernel() {
Kernel k = mock(Kernel.class);
when(k.spawn(any(Class.class), anyVararg())).thenReturn(ID);
when(k.getLogger()).thenReturn(mock(Logger.class));
return k;
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class SetterTests extends AbstractJanusTest {
@Test
public void setOffline_true() {
Boot.setOffline(true);
assertTrueProperty(JanusConfig.OFFLINE);
}
@Test
public void setOffline_false() {
Boot.setOffline(false);
assertFalseProperty(JanusConfig.OFFLINE);
}
@Test
public void setRandomContextUUID() {
Boot.setRandomContextUUID();
assertFalseProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertTrueProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
}
@Test
public void setBootAgentTypeContextUUID() {
Boot.setBootAgentTypeContextUUID();
assertTrueProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertFalseProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
}
public void setDefaultContextUUID() {
Boot.setDefaultContextUUID();
assertFalseProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertFalseProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
}
@Test
public void setVerboseLevel() {
for (int i = -10; i < 10; ++i) {
Boot.setVerboseLevel(i);
assertEquals(Integer.toString(i), System.getProperty(JanusConfig.VERBOSE_LEVEL_NAME));
}
}
@Test
public void setProperty_withValue() {
String name = UUID.randomUUID().toString();
String value = UUID.randomUUID().toString();
Boot.setProperty(name, value);
assertEquals(value, System.getProperty(name));
}
@Test
public void setPropertiesFromURL() throws IOException {
URL resource = Resources.getResource(getClass(), "Test1.properties");
Assume.assumeNotNull(resource);
Boot.setPropertiesFrom(resource);
assertEquals("my value 0", System.getProperty("io.janusproject.tests.MY_PROPERTY_0"));
assertEquals("my value 1", System.getProperty("io.janusproject.tests.MY_PROPERTY_1"));
assertEquals("my value 2", System.getProperty("io.janusproject.tests.MY_PROPERTY_2"));
}
@Test
public void setPropertiesFromFile() throws IOException {
URL resource = Resources.getResource(getClass(), "Test2.properties");
Assume.assumeNotNull(resource);
File file = FileSystem.convertURLToFile(resource);
Assume.assumeNotNull(file);
Boot.setPropertiesFrom(file);
assertEquals("my value 3", System.getProperty("io.janusproject.tests.MY_PROPERTY_3"));
assertEquals("my value 4", System.getProperty("io.janusproject.tests.MY_PROPERTY_4"));
}
@Test
public void setConsoleLogger_default() {
assertSame(System.out, Boot.getConsoleLogger());
}
@Test
public void setConsoleLogger_null() {
Boot.setConsoleLogger(null);
assertSame(System.out, Boot.getConsoleLogger());
}
@Test
public void setConsoleLogger_notNull() {
PrintStream os = mock(PrintStream.class);
Boot.setConsoleLogger(os);
assertSame(os, Boot.getConsoleLogger());
}
@Test
public void setConsoleLogger_notNull_null() {
PrintStream os = mock(PrintStream.class);
Boot.setConsoleLogger(os);
Boot.setConsoleLogger(null);
assertSame(System.out, Boot.getConsoleLogger());
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class CommandLineParserTests extends AbstractJanusTest {
@Nullable
private Options janusOptions;
@Nullable
private CommandLineParser parser;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
this.janusOptions = Boot.getOptions();
this.parser = new DefaultParser();
}
@Test
public void testHelp() throws Exception {
CommandLine cmd = this.parser.parse(this.janusOptions, args(""));
assertFalse(cmd.hasOption('h'));
cmd = this.parser.parse(this.janusOptions, args("-h"));
assertTrue(cmd.hasOption('h'));
cmd = this.parser.parse(this.janusOptions, args("-help"));
assertTrue(cmd.hasOption('h'));
cmd = this.parser.parse(this.janusOptions, args("--help"));
assertTrue(cmd.hasOption('h'));
cmd = this.parser.parse(this.janusOptions, args("-f", "thefile"));
assertTrue(cmd.hasOption('f'));
assertEquals("thefile", cmd.getOptionValue('f'));
cmd = this.parser.parse(this.janusOptions, args("-file", "thefile"));
assertTrue(cmd.hasOption('f'));
assertEquals("thefile", cmd.getOptionValue('f'));
cmd = this.parser.parse(this.janusOptions, args("--file", "thefile"));
assertTrue(cmd.hasOption('f'));
assertEquals("thefile", cmd.getOptionValue('f'));
cmd = this.parser.parse(this.janusOptions, args("-B", "uid"));
assertTrue(cmd.hasOption('B'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-bootid", "uid"));
assertTrue(cmd.hasOption('B'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("--bootid", "uid"));
assertTrue(cmd.hasOption('B'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-R", "uid"));
assertTrue(cmd.hasOption('R'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-randomid", "uid"));
assertTrue(cmd.hasOption('R'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("--randomid", "uid"));
assertTrue(cmd.hasOption('R'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-W", "uid"));
assertTrue(cmd.hasOption('W'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-worldid", "uid"));
assertTrue(cmd.hasOption('W'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("--worldid", "uid"));
assertTrue(cmd.hasOption('W'));
assertEquals("uid", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-D", "name=value"));
assertTrue(cmd.hasOption('D'));
assertArrayEquals(new String[] { "name", "value" }, cmd.getOptionValues('D'));
cmd = this.parser.parse(this.janusOptions, args("-Dname=value"));
assertTrue(cmd.hasOption('D'));
assertArrayEquals(new String[] { "name", "value" }, cmd.getOptionValues('D'));
cmd = this.parser.parse(this.janusOptions, args("-D", "name", "value"));
assertTrue(cmd.hasOption('D'));
assertArrayEquals(new String[] { "name", "value" }, cmd.getOptionValues('D'));
try {
this.parser.parse(this.janusOptions, args("-D", "name"));
fail("Expecting failure");
} catch (Throwable exception) {
//
}
try {
this.parser.parse(this.janusOptions, args("-D"));
fail("Expecting failure");
} catch (Throwable exception) {
//
}
}
@Test
public void testAgentArg() throws Exception {
CommandLine cmd = this.parser.parse(this.janusOptions, null);
cmd = this.parser.parse(this.janusOptions, args("-h", "main.Agent"));
assertEquals(1, cmd.getArgs().length);
assertEquals("main.Agent", cmd.getArgs()[0]);
cmd = this.parser.parse(this.janusOptions, args("-h", "main.Agent", "12"));
assertEquals(2, cmd.getArgs().length);
assertEquals("main.Agent", cmd.getArgs()[0]);
assertEquals("12", cmd.getArgs()[1]);
cmd = this.parser.parse(this.janusOptions, args("-h", "main.Agent", "12", "hola"));
assertEquals(3, cmd.getArgs().length);
assertEquals("main.Agent", cmd.getArgs()[0]);
assertEquals("12", cmd.getArgs()[1]);
assertEquals("hola", cmd.getArgs()[2]);
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class CommandLineExecutionTests extends AbstractJanusTest {
@Mock
private PrintStream logger;
@Mock
private Exiter exiter;
@Before
public void setUp() {
Boot.setConsoleLogger(this.logger);
Boot.setExiter(this.exiter);
Boot.setProperty("io.janusproject.tests.MY_PROPERTY_0", null);
Boot.setProperty("io.janusproject.tests.MY_PROPERTY_1", null);
Boot.setProperty("io.janusproject.tests.MY_PROPERTY_2", null);
}
@After
public void tearDown() {
Boot.setConsoleLogger(null);
Boot.setExiter(null);
Boot.setProperty("io.janusproject.tests.MY_PROPERTY_0", null);
Boot.setProperty("io.janusproject.tests.MY_PROPERTY_1", null);
Boot.setProperty("io.janusproject.tests.MY_PROPERTY_2", null);
}
@Test
public void option_invalidOption() {
Object[] freeArgs = Boot.parseCommandLine(args("-B", "-x"));
assertNull(freeArgs);
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.VERBOSE_LEVEL_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
verify(this.logger, times(2)).write(ArgumentMatchers.any(byte[].class), ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt());
verify(this.logger, times(2)).flush();
verify(this.logger, times(1)).close();
verifyNoMoreInteractions(this.logger);
verify(this.exiter, only()).exit();
}
@Test
public void option_noOptionGiven() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_B_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-B", "--", "-x", "-y"));
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertTrueProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertFalseProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_B_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-B", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-B", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_R_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-R", "--", "-x", "-y"));
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertFalseProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertTrueProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_R_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-R", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-R", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_W_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-W", "--", "-x", "-y"));
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertFalseProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertFalseProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_W_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-W", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-W", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_nologo_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-nologo", "--", "-x", "-y"));
assertFalseProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_nologo_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-nologo", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-nologo", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_o_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-o", "--", "-x", "-y"));
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertTrueProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_o_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-o", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-o", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_e_valid() {
Exiter old = Boot.getExiter();
Object[] freeArgs = Boot.parseCommandLine(args("-e", "--", "-x", "-y"));
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
assertNotSame(old, Boot.getExiter());
}
@Test
public void option_e_asArg() {
Exiter old = Boot.getExiter();
Object[] freeArgs = Boot.parseCommandLine(args("--", "-e", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-e", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
assertSame(old, Boot.getExiter());
}
@Test
public void option_s_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-s", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertNullProperty(JanusConfig.VERBOSE_LEVEL_NAME);
assertNull(freeArgs);
verify(this.logger, times(1)).write(ArgumentMatchers.any(byte[].class), ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt());
verify(this.logger, times(3)).flush();
verify(this.logger, times(1)).close();
verifyNoMoreInteractions(this.logger);
verify(this.exiter, only()).exit();
}
@Test
public void option_s_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-s", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-s", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_cli_valid() throws IOException {
Object[] freeArgs = Boot.parseCommandLine(args("arg1", "--cli", "--", "-x", "arg2", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertNullProperty(JanusConfig.VERBOSE_LEVEL_NAME);
assertNull(freeArgs);
verifyCli("arg1", "--cli", "--", "-x", "arg2", "-y");
verify(this.logger, times(1)).close();
verify(this.logger, times(1)).flush();
verifyNoMoreInteractions(this.logger);
verify(this.exiter, only()).exit();
}
private void verifyCli(String... text) throws IOException {
ArgumentCaptor<String> arg = ArgumentCaptor.forClass(String.class);
verify(this.logger, Mockito.times(text.length)).println(arg.capture());
List<String> list = arg.getAllValues();
assertEquals("invalid list size", text.length, list.size());
for (int i = 0; i < text.length; ++i) {
assertEquals("invalid element #" + i, i + ": " + text[i], list.get(i));
}
}
@Test
public void option_cli_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("arg1", "--", "--cli", "-x", "arg2", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "arg1", "--cli", "-x", "arg2", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_f_valid() throws Exception {
URL propertyURL = Resources.getResource("io/janusproject/Test1.properties");
assumeNotNull(propertyURL);
File propertyFile = FileSystem.convertURLToFile(propertyURL);
assumeNotNull(propertyFile);
//
Object[] freeArgs = Boot.parseCommandLine(args("-f", propertyFile.getAbsolutePath(), "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertProperty("io.janusproject.tests.MY_PROPERTY_0", "my value 0");
assertProperty("io.janusproject.tests.MY_PROPERTY_1", "my value 1");
assertProperty("io.janusproject.tests.MY_PROPERTY_2", "my value 2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_f_asArg() throws Exception {
URL propertyURL = Resources.getResource("io/janusproject/Test1.properties");
assumeNotNull(propertyURL);
File propertyFile = FileSystem.convertURLToFile(propertyURL);
assumeNotNull(propertyFile);
//
Object[] freeArgs = Boot.parseCommandLine(args("--", "-f", propertyFile.getAbsolutePath(), "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-f", propertyFile.getAbsolutePath(), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_D_valid_withSeparation() {
Object[] freeArgs = Boot
.parseCommandLine(args("-D", "io.janusproject.tests.MY_PROPERTY_1=the value", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertProperty("io.janusproject.tests.MY_PROPERTY_1", "the value");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_D_valid_withoutSeparation() {
Object[] freeArgs = Boot.parseCommandLine(args("-Dio.janusproject.tests.MY_PROPERTY_1=the value", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertProperty("io.janusproject.tests.MY_PROPERTY_1", "the value");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_D_asArg_withSeparation() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-D", "io.janusproject.var0=value1", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-D", "io.janusproject.var0=value1", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_D_asArg_withoutSeparation() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-Dio.janusproject.var0=value1", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-Dio.janusproject.var0=value1", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_q_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-q", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "2");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_q_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-q", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-q", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_qq_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-q", "-q", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "1");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_v_valid() {
Object[] freeArgs = Boot.parseCommandLine(args("-v", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "4");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_v_asArg() {
Object[] freeArgs = Boot.parseCommandLine(args("--", "-v", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "3");
assertContains(Arrays.asList(freeArgs), "-v", "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_vv() {
Object[] freeArgs = Boot.parseCommandLine(args("-v", "-v", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "5");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_vqv() {
Object[] freeArgs = Boot.parseCommandLine(args("-v", "-q", "-v", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "4");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_qvq() {
Object[] freeArgs = Boot.parseCommandLine(args("-q", "-v", "-q", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertNullProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "2");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_qqq_forNoLogo() {
Object[] freeArgs = Boot.parseCommandLine(args("-q", "-q", "-q", "--", "-x", "-y"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
assertFalseProperty(JanusConfig.JANUS_LOGO_SHOW_NAME);
assertNullProperty(JanusConfig.BOOT_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.RANDOM_DEFAULT_CONTEXT_ID_NAME);
assertNullProperty(JanusConfig.OFFLINE);
assertNullProperty("io.janusproject.tests.MY_PROPERTY_0");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_1");
assertNullProperty("io.janusproject.tests.MY_PROPERTY_2");
assertProperty(JanusConfig.VERBOSE_LEVEL_NAME, "0");
assertContains(Arrays.asList(freeArgs), "-x", "-y");
verifyZeroInteractions(this.logger);
verifyZeroInteractions(this.exiter);
}
@Test
public void option_version() {
Boot.parseCommandLine(args("-version"));
// The properties are null since resetProperties() is invoked for resetting the properties in
// the start-up function inherited from AbstractJanusTest
ArgumentCaptor<byte[]> array = ArgumentCaptor.forClass(byte[].class);
ArgumentCaptor<Integer> offset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> length = ArgumentCaptor.forClass(Integer.class);
verify(this.logger, times(1)).write(array.capture(), offset.capture(), length.capture());
final String message = new String(array.getValue(), offset.getValue(), length.getValue());
assertEquals("Janus: " + JanusVersion.JANUS_RELEASE_VERSION + getLineSeparator() + "SARL specification: "
+ SARLVersion.SPECIFICATION_RELEASE_VERSION_STRING + getLineSeparator(), message);
verify(this.logger, times(1)).flush();
verify(this.logger, times(1)).close();
verifyNoMoreInteractions(this.logger);
verify(this.exiter, only()).exit();
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class StartTests extends AbstractJanusTest {
@Test
public void startJanus() throws Exception {
Kernel kernel = Boot.startJanusWithModuleType(TestModule.class, AgentMock.class, "param1", "param2", "param3");
assertNotNull(kernel);
ArgumentCaptor<Class> agentType = ArgumentCaptor.forClass(Class.class);
ArgumentCaptor<String> parameters = ArgumentCaptor.forClass(String.class);
verify(kernel).spawn(agentType.capture(), parameters.capture());
assertEquals(AgentMock.class, agentType.getValue());
assertArrayEquals(new String[] { "param1", "param2", "param3" }, parameters.getAllValues().toArray());
assertEquals(AgentMock.class.getName(), System.getProperty(JanusConfig.BOOT_AGENT));
String sid = System.getProperty(JanusConfig.BOOT_AGENT_ID);
assertNotNull(sid);
assertEquals(ID.toString(), sid);
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class BootAgentIdentifierTests extends AbstractJanusTest {
@Test
public void getBootAgentIdentifier_notStarted() throws Exception {
assertNull(Boot.getBootAgentIdentifier());
}
@Test
public void getBootAgentIdentifier_started() throws Exception {
Boot.startJanusWithModuleType(TestModule.class, AgentMock.class);
assertEquals(ID, Boot.getBootAgentIdentifier());
}
@Test
public void getBootAgentIdentifier_startedAgain() throws Exception {
Boot.startJanusWithModuleType(TestModule.class, AgentMock.class);
assertEquals(ID, Boot.getBootAgentIdentifier());
assertEquals(ID, Boot.getBootAgentIdentifier());
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class RunConfigurationTests extends AbstractJanusRunTest {
@Nullable
private UUID defaultID;
@Nullable
private UUID bootID;
@Before
public void setUp() {
this.defaultID = UUID.fromString(JanusConfig.DEFAULT_CONTEXT_ID_VALUE);
this.bootID = UUID.nameUUIDFromBytes(RCAgent.class.getName().getBytes());
Boot.setOffline(true);
}
@Test
public void defaultContextUUID() throws Exception {
Boot.setDefaultContextUUID();
runJanus(RCAgent.class, false);
UUID id = getResult(UUID.class, 0);
assertNotNull(id);
assertEquals(defaultID, id);
}
@Test
public void bootContextUUID() throws Exception {
Boot.setBootAgentTypeContextUUID();
runJanus(RCAgent.class, false);
UUID id = getResult(UUID.class, 0);
assertNotNull(id);
assertEquals(bootID, id);
}
@Test
public void randomContextUUID() throws Exception {
Boot.setRandomContextUUID();
runJanus(RCAgent.class, false);
UUID id = getResult(UUID.class, 0);
assertNotNull(id);
assertNotEquals(defaultID, id);
assertNotEquals(bootID, id);
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SarlSpecification(SARLVersion.SPECIFICATION_RELEASE_VERSION_STRING)
public static class RCAgent extends TestingAgent {
public RCAgent(UUID parentID, UUID agentID) {
super(parentID, agentID);
}
@Override
protected boolean runAgentTest() {
addResult(getSkill(DefaultContextInteractions.class).getDefaultContext().getID());
return true;
}
}
}
}