/* * $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.modules; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.util.Arrays; import java.util.Iterator; import org.arakhne.afc.vmutil.OperatingSystem; import org.junit.After; 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.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import com.google.inject.Binder; import com.google.inject.Module; import io.janusproject.JanusConfig; import io.janusproject.modules.BootModule; import io.janusproject.modules.StandardCoreModule; import io.janusproject.modules.StandardJanusPlatformModule; import io.janusproject.modules.eventserial.NetworkEventModule; import io.janusproject.modules.hazelcast.HazelcastModule; import io.janusproject.modules.kernel.LocalDistributedDataStructureServiceModule; import io.janusproject.modules.kernel.LocalInfrastructureServiceModule; import io.janusproject.modules.kernel.LocalKernelDiscoveryServiceModule; import io.janusproject.modules.nonetwork.NoNetworkModule; import io.janusproject.modules.zeromq.ZeroMQNetworkModule; import io.janusproject.tests.testutils.AbstractJanusTest; /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @RunWith(Suite.class) @SuiteClasses({ StandardJanusPlatformModuleTest.AndroidTests.class, StandardJanusPlatformModuleTest.LinuxTests.class, StandardJanusPlatformModuleTest.WindowsTests.class, StandardJanusPlatformModuleTest.MacOSTests.class, }) @SuppressWarnings("all") public class StandardJanusPlatformModuleTest { public static void assertContainsModules(Iterable<? extends Module> iterable, Class... moduleTypes) { AbstractJanusTest.assertContainsCollection(new ModuleIterable(iterable), new ClassIterable(Arrays.<Class<?>> asList(moduleTypes))); } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ public static class AndroidTests extends AbstractJanusTest { @Mock private Binder binder; @InjectMocks private StandardJanusPlatformModule module; @Before public void setUp() { OperatingSystem.setCurrentOS(OperatingSystem.ANDROID); } @After public void tearDown() { OperatingSystem.setCurrentOS(null); } @Test public void testNetworkIsDisabledWhenOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.TRUE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(6)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules LocalInfrastructureServiceModule.class, LocalDistributedDataStructureServiceModule.class, LocalKernelDiscoveryServiceModule.class, NoNetworkModule.class); } @Test public void testNetworkIsDisabledWhenNotOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.FALSE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(5)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules HazelcastModule.class, NetworkEventModule.class, ZeroMQNetworkModule.class); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ public static class LinuxTests extends AbstractJanusTest { @Mock private Binder binder; @InjectMocks private StandardJanusPlatformModule module; @Before public void setUp() { OperatingSystem.setCurrentOS(OperatingSystem.LINUX); } @After public void tearDown() { OperatingSystem.setCurrentOS(null); } @Test public void testNetworkIsDisabledWhenOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.TRUE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(6)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules LocalInfrastructureServiceModule.class, LocalDistributedDataStructureServiceModule.class, LocalKernelDiscoveryServiceModule.class, NoNetworkModule.class); } @Test public void testNetworkIsEnabledWhenNotOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.FALSE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(5)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules HazelcastModule.class, NetworkEventModule.class, ZeroMQNetworkModule.class); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ public static class WindowsTests extends AbstractJanusTest { @Mock private Binder binder; @InjectMocks private StandardJanusPlatformModule module; @Before public void setUp() { OperatingSystem.setCurrentOS(OperatingSystem.WIN); } @After public void tearDown() { OperatingSystem.setCurrentOS(null); } @Test public void testNetworkIsDisabledWhenOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.TRUE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(6)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules LocalInfrastructureServiceModule.class, LocalDistributedDataStructureServiceModule.class, LocalKernelDiscoveryServiceModule.class, NoNetworkModule.class); } @Test public void testNetworkIsEnabledWhenNotOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.FALSE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(5)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules HazelcastModule.class, NetworkEventModule.class, ZeroMQNetworkModule.class); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ public static class MacOSTests extends AbstractJanusTest { @Mock private Binder binder; @InjectMocks private StandardJanusPlatformModule module; @Before public void setUp() { OperatingSystem.setCurrentOS(OperatingSystem.MACOSX); } @After public void tearDown() { OperatingSystem.setCurrentOS(null); } @Test public void testNetworkIsDisabledWhenOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.TRUE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(6)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules LocalInfrastructureServiceModule.class, LocalDistributedDataStructureServiceModule.class, LocalKernelDiscoveryServiceModule.class, NoNetworkModule.class); } @Test public void testNetworkIsEnabledWhenNotOffline() throws Exception { System.setProperty(JanusConfig.OFFLINE, Boolean.FALSE.toString()); // this.reflect.invoke(this.module, "configure"); // ArgumentCaptor<Module> arg = ArgumentCaptor.forClass(Module.class); verify(this.binder, times(5)).install(arg.capture()); assertContainsModules(arg.getAllValues(), // Mandatory modules BootModule.class, StandardCoreModule.class, // Offline modules HazelcastModule.class, NetworkEventModule.class, ZeroMQNetworkModule.class); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ private static class ModuleIterable implements Iterable<String> { private final Iterable<? extends Module> iterable; public ModuleIterable(Iterable<? extends Module> iterable) { this.iterable = iterable; } @Override public Iterator<String> iterator() { return new ModuleIterator(this.iterable.iterator()); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ private static class ModuleIterator implements Iterator<String> { private final Iterator<? extends Module> iterator; public ModuleIterator(Iterator<? extends Module> iterator) { this.iterator = iterator; } @Override public boolean hasNext() { return this.iterator.hasNext(); } @Override public String next() { Module module = this.iterator.next(); return module.getClass().getName(); } @Override public void remove() { throw new UnsupportedOperationException(); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ private static class ClassIterable implements Iterable<String> { private final Iterable<? extends Class<?>> iterable; public ClassIterable(Iterable<? extends Class<?>> iterable) { this.iterable = iterable; } @Override public Iterator<String> iterator() { return new ClassIterator(this.iterable.iterator()); } } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ private static class ClassIterator implements Iterator<String> { private final Iterator<? extends Class<?>> iterator; public ClassIterator(Iterator<? extends Class<?>> iterator) { this.iterator = iterator; } @Override public boolean hasNext() { return this.iterator.hasNext(); } @Override public String next() { Class<?> type = this.iterator.next(); return type.getName(); } @Override public void remove() { throw new UnsupportedOperationException(); } } }