/* * Copyright 2013-2014 the original author or authors. * * 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 net.kuujo.vertigo.unit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import net.kuujo.vertigo.component.ModuleConfig; import net.kuujo.vertigo.component.ModuleContext; import net.kuujo.vertigo.component.VerticleConfig; import net.kuujo.vertigo.component.VerticleContext; import net.kuujo.vertigo.impl.ContextBuilder; import net.kuujo.vertigo.network.NetworkConfig; import net.kuujo.vertigo.network.NetworkContext; import net.kuujo.vertigo.network.impl.DefaultNetworkConfig; import org.junit.Test; import org.vertx.java.core.json.JsonObject; /** * Network/component/instance/input context tests. * * @author Jordan Halterman */ public class ContextTest { @Test public void testDefaultNetworkContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); assertEquals(0, context.components().size()); } @Test public void testConfiguredNetworkContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); assertEquals(0, context.components().size()); } @Test public void testDefaultFeederVerticleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); network.addVerticle("feeder", "feeder.py"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); VerticleContext verticleContext = context.component("feeder"); assertEquals("feeder", verticleContext.name()); assertEquals("vertigo.test.feeder", verticleContext.address()); assertEquals("feeder.py", verticleContext.main()); assertTrue(verticleContext.isVerticle()); assertFalse(verticleContext.isModule()); assertEquals(new JsonObject(), verticleContext.config()); assertEquals(1, verticleContext.numInstances()); assertFalse(verticleContext.isWorker()); assertFalse(verticleContext.isMultiThreaded()); assertNotNull(verticleContext.network()); } @Test public void testConfiguredFeederVerticleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); VerticleConfig verticle = network.addVerticle("feeder", "feeder.py"); verticle.setMain("feeder.py"); verticle.setConfig(new JsonObject().putString("foo", "bar")); verticle.setInstances(2); verticle.setGroup("test"); verticle.setWorker(true); verticle.setMultiThreaded(true); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); VerticleContext verticleContext = context.component("feeder"); assertEquals("feeder", verticleContext.name()); assertEquals("vertigo.test.feeder", verticleContext.address()); assertEquals("feeder.py", verticleContext.main()); assertTrue(verticleContext.isVerticle()); assertFalse(verticleContext.isModule()); assertEquals("bar", verticleContext.config().getString("foo")); assertEquals(2, verticleContext.numInstances()); assertEquals(2, verticleContext.instances().size()); assertTrue(verticleContext.isWorker()); assertTrue(verticleContext.isMultiThreaded()); assertEquals("test", verticleContext.group()); assertNotNull(verticleContext.network()); } @Test public void testDefaultFeederModuleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); network.addModule("feeder", "com.test~test-module~1.0"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); ModuleContext moduleContext = context.component("feeder"); assertEquals("feeder", moduleContext.name()); assertEquals("vertigo.test.feeder", moduleContext.address()); assertEquals("com.test~test-module~1.0", moduleContext.module()); assertFalse(moduleContext.isVerticle()); assertTrue(moduleContext.isModule()); assertEquals(new JsonObject(), moduleContext.config()); assertEquals(1, moduleContext.numInstances()); assertNotNull(moduleContext.network()); } @Test public void testConfiguredFeederModuleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); ModuleConfig verticle = network.addModule("feeder", "com.test~test-module~1.0"); verticle.setModule("com.test~test-module~1.0"); verticle.setConfig(new JsonObject().putString("foo", "bar")); verticle.setInstances(2); verticle.setGroup("test"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); ModuleContext moduleContext = context.component("feeder"); assertEquals("feeder", moduleContext.name()); assertEquals("vertigo.test.feeder", moduleContext.address()); assertEquals("com.test~test-module~1.0", moduleContext.module()); assertFalse(moduleContext.isVerticle()); assertTrue(moduleContext.isModule()); assertEquals("bar", moduleContext.config().getString("foo")); assertEquals(2, moduleContext.numInstances()); assertEquals(2, moduleContext.instances().size()); assertEquals("test", moduleContext.group()); assertNotNull(moduleContext.network()); } @Test public void testDefaultWorkerVerticleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); network.addVerticle("worker", "worker.py"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); VerticleContext verticleContext = context.component("worker"); assertEquals("worker", verticleContext.name()); assertEquals("vertigo.test.worker", verticleContext.address()); assertEquals("worker.py", verticleContext.main()); assertTrue(verticleContext.isVerticle()); assertFalse(verticleContext.isModule()); assertEquals(new JsonObject(), verticleContext.config()); assertEquals(1, verticleContext.numInstances()); assertFalse(verticleContext.isWorker()); assertFalse(verticleContext.isMultiThreaded()); assertNotNull(verticleContext.network()); } @Test public void testConfiguredWorkerVerticleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); VerticleConfig verticle = network.addVerticle("worker", "worker.py"); verticle.setMain("worker.py"); verticle.setConfig(new JsonObject().putString("foo", "bar")); verticle.setInstances(2); verticle.setGroup("test"); verticle.setWorker(true); verticle.setMultiThreaded(true); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); VerticleContext verticleContext = context.component("worker"); assertEquals("worker", verticleContext.name()); assertEquals("vertigo.test.worker", verticleContext.address()); assertEquals("worker.py", verticleContext.main()); assertTrue(verticleContext.isVerticle()); assertFalse(verticleContext.isModule()); assertEquals("bar", verticleContext.config().getString("foo")); assertEquals(2, verticleContext.numInstances()); assertEquals(2, verticleContext.instances().size()); assertTrue(verticleContext.isWorker()); assertTrue(verticleContext.isMultiThreaded()); assertEquals("test", verticleContext.group()); assertNotNull(verticleContext.network()); } @Test public void testDefaultWorkerModuleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); network.addModule("worker", "com.test~test-module~1.0"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); ModuleContext moduleContext = context.component("worker"); assertEquals("worker", moduleContext.name()); assertEquals("vertigo.test.worker", moduleContext.address()); assertEquals("com.test~test-module~1.0", moduleContext.module()); assertFalse(moduleContext.isVerticle()); assertTrue(moduleContext.isModule()); assertEquals(new JsonObject(), moduleContext.config()); assertEquals(1, moduleContext.numInstances()); assertNotNull(moduleContext.network()); } @Test public void testConfiguredWorkerModuleContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); ModuleConfig module = network.addModule("worker", "com.test~test-module~1.0"); module.setModule("com.test~test-module~1.0"); module.setConfig(new JsonObject().putString("foo", "bar")); module.setInstances(2); module.setGroup("test"); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); ModuleContext moduleContext = context.component("worker"); assertEquals("worker", moduleContext.name()); assertEquals("vertigo.test.worker", moduleContext.address()); assertEquals("com.test~test-module~1.0", moduleContext.module()); assertFalse(moduleContext.isVerticle()); assertTrue(moduleContext.isModule()); assertEquals("bar", moduleContext.config().getString("foo")); assertEquals(2, moduleContext.numInstances()); assertEquals(2, moduleContext.instances().size()); assertEquals("test", moduleContext.group()); assertNotNull(moduleContext.network()); } @Test public void testInstanceContext() { DefaultNetworkConfig network = new DefaultNetworkConfig("test"); VerticleConfig verticle = network.addVerticle("feeder", "feeder.py"); verticle.setInstances(2); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); assertEquals("vertigo.test", context.address()); VerticleContext verticleContext = context.component("feeder"); assertEquals("feeder", verticleContext.name()); assertEquals("vertigo.test.feeder", verticleContext.address()); assertEquals(2, verticleContext.instances().size()); assertEquals("vertigo.test.feeder-1", verticleContext.instances().get(0).address()); assertEquals("vertigo.test.feeder-2", verticleContext.instances().get(1).address()); assertNotNull(verticleContext.instances().get(0).component()); } @Test public void testUpdateContext() { NetworkConfig network = new DefaultNetworkConfig("test"); network.addVerticle("sender", "sender.py", 2); NetworkContext context = ContextBuilder.buildContext(network, "vertigo"); NetworkConfig network2 = new DefaultNetworkConfig("test"); network2.addVerticle("receiver", "receiver.py", 2); NetworkContext context2 = ContextBuilder.buildContext(network2, "vertigo"); assertNotNull(context2.component("receiver")); context.notify(context2); assertNotNull(context.component("receiver")); } }