/** * Copyright 2013-2014 Recruit Technologies Co., Ltd. and contributors * (see CONTRIBUTORS.md) * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. A copy of the * License is distributed with this work in the LICENSE.md file. You may * also obtain a copy of the License from * * 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.gennai.gungnir.metastore; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.Date; import org.gennai.gungnir.GungnirConfig; import org.gennai.gungnir.GungnirManager; import org.gennai.gungnir.GungnirTopology; import org.gennai.gungnir.UserEntity; import org.gennai.gungnir.GungnirTopology.TopologyStatus; import org.gennai.gungnir.tuple.schema.Schema; import org.gennai.gungnir.tuple.schema.TupleSchema; import org.junit.Before; import org.junit.Test; public class TestInMemoryMetaStore { private InMemoryMetaStore metaStore; private GungnirConfig config; @Before public void setup() throws Exception { metaStore = new InMemoryMetaStore(); config = GungnirManager.getManager().getConfig(); } @Test public void testInsertUserAccount() throws Exception { UserEntity userEntity = new UserEntity("uname"); metaStore.insertUserAccount(userEntity); UserEntity result = metaStore.findUserAccountByName("uname"); assertThat(result.getId(), is(userEntity.getId())); assertThat(result.getName(), is(userEntity.getName())); metaStore.deleteUserAccount(result); } @Test(expected = NotStoredException.class) public void testDeleteUserAccount() throws Exception { UserEntity userEntity = new UserEntity("uname"); metaStore.insertUserAccount(userEntity); metaStore.deleteUserAccount(userEntity); assertThat(metaStore.findUserAccounts().size(), is(0)); metaStore.findUserAccountByName("uname"); } @Test public void testInsertSchema() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); Schema schema = new TupleSchema("gennai-tuple"); schema.setOwner(owner); metaStore.insertSchema(schema); Schema result = metaStore.findSchema(schema.getSchemaName(), owner); assertThat(result.getId(), is(schema.getId())); assertThat(result.getSchemaName(), is(schema.getSchemaName())); metaStore.deleteSchema(result); } @Test public void testAddTopologyToSchema() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); Schema schema = new TupleSchema("gennai-tuple"); schema.setOwner(owner); schema.setId("schema-id"); metaStore.insertSchema(schema); assertThat(metaStore.changeSchemaToBusy(schema, "gennai-topology"), is(true)); assertThat(metaStore.changeSchemaToFree(schema, "gennai-topology"), is(true)); schema.setCreateTime(new Date(System.currentTimeMillis() - 10000)); assertThat(metaStore.changeSchemaToBusy(schema, "gennai-topology"), is(false)); assertThat(metaStore.changeSchemaToFree(schema, "gennai-topology"), is(false)); metaStore.deleteSchema(schema); } public void testChangeSchemaNotInMetaStore() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); Schema schema = new TupleSchema("gennai-tuple"); schema.setOwner(owner); schema.setId("schema-id"); assertThat(metaStore.changeSchemaToBusy(schema, "gennai-topology"), is(false)); } @Test public void testInsertAndRetrieveTopology() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology topology = new GungnirTopology(config, owner); metaStore.insertTopology(topology); GungnirTopology result = metaStore.findTopologyById(topology.getId()); assertThat(result.getId(), is(topology.getId())); metaStore.deleteTopology(result); } @Test public void testGetTopologiesByCurrentStatus() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology topology1 = new GungnirTopology(config, owner); topology1.setName("topology1"); topology1.setStatus(TopologyStatus.RUNNING); GungnirTopology topology2 = new GungnirTopology(config, owner); topology2.setName("topology2"); topology2.setStatus(TopologyStatus.STOPPED); GungnirTopology topology3 = new GungnirTopology(config, owner); topology3.setName("topology3"); topology3.setStatus(TopologyStatus.RUNNING); metaStore.insertTopology(topology1); metaStore.insertTopology(topology2); metaStore.insertTopology(topology3); assertThat(metaStore.findTopologies(owner, TopologyStatus.RUNNING).size(), is(2)); assertThat(metaStore.getTopologyStatus(topology2.getId()), is(TopologyStatus.STOPPED)); metaStore.deleteTopology(topology1); metaStore.deleteTopology(topology2); metaStore.deleteTopology(topology3); } @Test(expected = NotStoredException.class) public void testTopologyDeletion() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology topology = new GungnirTopology(config, owner); metaStore.insertTopology(topology); assertThat(metaStore.findTopologies(owner).size(), is(1)); metaStore.deleteTopology(topology); assertThat(metaStore.findTopologies(owner).size(), is(0)); metaStore.findTopologyById(topology.getId()); } @Test public void testTopologyStatus() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology originalTopology = new GungnirTopology(config, owner); GungnirTopology updatedTopology = new GungnirTopology(config, owner); originalTopology.setStatus(TopologyStatus.STOPPED); metaStore.insertTopology(originalTopology); String id = originalTopology.getId(); assertThat(metaStore.findTopologyById(id).getStatus(), is(TopologyStatus.STOPPED)); updatedTopology.setId(id); updatedTopology.setStatus(TopologyStatus.STARTING); metaStore.changeTopologyStatus(updatedTopology); assertThat(metaStore.findTopologyById(id).getStatus(), is(TopologyStatus.STARTING)); updatedTopology.setStatus(TopologyStatus.STOPPING); metaStore.changeTopologyStatus(updatedTopology); assertThat(metaStore.findTopologyById(id).getStatus(), is(TopologyStatus.STARTING)); metaStore.deleteTopology(originalTopology); } @Test public void testIllegalTopologyStatusChange() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology originalTopology = new GungnirTopology(config, owner); GungnirTopology updatedTopology = new GungnirTopology(config, owner); originalTopology.setStatus(TopologyStatus.STOPPED); metaStore.insertTopology(originalTopology); String id = originalTopology.getId(); updatedTopology.setId(id); updatedTopology.setStatus(TopologyStatus.STOPPING); assertThat(metaStore.changeTopologyStatus(updatedTopology), is(false)); assertThat(metaStore.findTopologyById(id).getStatus(), is(TopologyStatus.STOPPED)); metaStore.deleteTopology(originalTopology); } @Test public void testForceTopologyStatusChange() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology originalTopology = new GungnirTopology(config, owner); GungnirTopology updatedTopology = new GungnirTopology(config, owner); originalTopology.setStatus(TopologyStatus.STOPPED); metaStore.insertTopology(originalTopology); String id = originalTopology.getId(); updatedTopology.setId(id); updatedTopology.setStatus(TopologyStatus.STOPPING); metaStore.changeForcedTopologyStatus(updatedTopology); assertThat(metaStore.findTopologyById(id).getStatus(), is(TopologyStatus.STOPPING)); metaStore.deleteTopology(originalTopology); } @Test(expected = NotStoredException.class) public void testDeleteTopology() throws Exception { UserEntity owner = new UserEntity(); owner.setId("uid"); owner.setName("uname"); GungnirTopology topology = new GungnirTopology(config, owner); metaStore.insertTopology(topology); GungnirTopology result = metaStore.findTopologyById(topology.getId()); assertThat(result.getId(), is(topology.getId())); metaStore.deleteTopology(topology); metaStore.findTopologyById(topology.getId()); } @Test(expected = NotStoredException.class) public void testTrackingIds() throws Exception { String id = metaStore.generateTrackingId(); assertThat(metaStore.getTrackingNo(id), is(1)); metaStore.getTrackingNo("false id"); } }