/* * Copyright (C) 2014-2015 ULYSSIS VZW * * This file is part of i++. * * i++ is free software: you can redistribute it and/or modify * it under the terms of version 3 of the GNU Affero General Public License * as published by the Free Software Foundation. No other versions apply. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package org.ulyssis.ipp.config; import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; import com.google.common.collect.ImmutableList; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.ulyssis.ipp.utils.Serialization; import org.ulyssis.ipp.TagId; import java.net.URI; import java.nio.file.Paths; import java.util.Optional; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static uk.co.datumedge.hamcrest.json.SameJSONAs.sameJSONAs; public class TestConfig { @Test public void testEmptyConfig() { Optional<Config> conf = Config.fromConfigurationString("{}"); assertThat(conf.isPresent(), is(true)); Config config = conf.get(); assertThat(config.getReaders(), emptyCollectionOf(ReaderConfig.class)); assertThat(config.getSpeedwayURIs(), emptyCollectionOf(URI.class)); } @Test public void testBasicConfig() { Optional<Config> conf = Config.fromConfigurationString("{\"readers\":[{\"uri\":\"redis://10.0.0.1:6379\"}]}"); assertTrue(conf.isPresent()); Config config = conf.get(); assertEquals(1, config.getReaders().size()); assertEquals(6379, config.getReader(0).getURI().getPort()); assertEquals("10.0.0.1", config.getReader(0).getURI().getHost()); } @Test public void testRealisticConfigFromFile() { Optional<Config> conf = Config.fromConfigurationFile(Paths.get("src/test/resources/test1.json")); assertTrue(conf.isPresent()); Config config = conf.get(); assertEquals(520D, config.getTrackLength(), 0D); assertEquals(3, config.getNbSpeedways()); assertEquals(3, config.getSpeedwayURIs().size()); assertEquals("10.0.0.1", config.getSpeedwayURI(0).getHost()); assertEquals("10.0.0.2", config.getSpeedwayURI(1).getHost()); assertEquals("10.0.0.3", config.getSpeedwayURI(2).getHost()); assertEquals(3, config.getNbReaders()); assertEquals(3, config.getReaders().size()); assertEquals("10.0.0.4", config.getReader(0).getURI().getHost()); assertEquals(ReaderConfig.Type.LLRP, config.getReader(0).getType()); assertEquals(0D, config.getReader(0).getPosition(), 0D); assertEquals("10.0.0.5", config.getReader(1).getURI().getHost()); assertEquals(ReaderConfig.Type.LLRP, config.getReader(1).getType()); assertEquals(220D, config.getReader(1).getPosition(), 0D); assertEquals("10.0.0.6", config.getReader(2).getURI().getHost()); assertEquals(ReaderConfig.Type.LLRP, config.getReader(2).getType()); assertEquals(440D, config.getReader(2).getPosition(), 0D); } @Test public void testSimulationConfigFromFile() throws Exception { Optional<Config> conf = Config.fromConfigurationFile(Paths.get("src/test/resources/test2.json")); assertTrue(conf.isPresent()); Config config = conf.get(); assertEquals(520D, config.getTrackLength(), 0D); assertEquals(0, config.getNbSpeedways()); assertEquals(1, config.getNbReaders()); assertEquals("10.0.0.4", config.getReader(0).getURI().getHost()); assertEquals(ReaderConfig.Type.SIMULATOR, config.getReader(0).getType()); assertEquals(4, config.getReader(0).getSimulatedTeams().size()); assertEquals(1000L, config.getReader(0).getSimulatedTeam(0).getLapTime()); assertEquals(new TagId("0A"), config.getReader(0).getSimulatedTeam(0).getTag()); assertEquals(2000L, config.getReader(0).getSimulatedTeam(1).getLapTime()); assertEquals(new TagId("0B"), config.getReader(0).getSimulatedTeam(1).getTag()); assertEquals(3000L, config.getReader(0).getSimulatedTeam(2).getLapTime()); assertEquals(new TagId("0C"), config.getReader(0).getSimulatedTeam(2).getTag()); assertEquals(4000L, config.getReader(0).getSimulatedTeam(3).getLapTime()); assertEquals(new TagId("0D"), config.getReader(0).getSimulatedTeam(3).getTag()); } @Test public void testDeserializeTeam() throws Exception { Team team = Serialization.getJsonMapper().readValue("{\"teamNb\":1,\"name\":\"Team one\"}", Team.class); assertThat(team.getTeamNb(), equalTo(1)); assertThat(team.getName(), equalTo("Team one")); } @Test public void testDeserializeTeamWithTags() throws Exception { Team team = Serialization.getJsonMapper().readValue("{\"teamNb\":2,\"name\":\"Team two\",\"tags\":[\"abcd0123\",\"0123ABCD\"]}", Team.class); assertThat(team.getTeamNb(), equalTo(2)); assertThat(team.getName(), equalTo("Team two")); assertThat(team.getTags(), containsInAnyOrder(new TagId("abcd0123"), new TagId("0123ABCD"))); } @Test public void testSerializeTeam() throws Exception { Team team = new Team(3, "Team three"); String json = Serialization.getJsonMapper().writeValueAsString(team); assertThat(json, sameJSONAs("{\"teamNb\":3,\"name\":\"Team three\",\"tags\":[]}")); } @Test public void testSerializeTeamWithTags() throws Exception { Team team = new Team(4, "Team four", ImmutableList.of(new TagId("abcd0123"), new TagId("0123ABCD"))); String json = Serialization.getJsonMapper().writeValueAsString(team); // TODO: This check is too specific assertThat(json, sameJSONAs("{\"teamNb\":4,\"name\":\"Team four\",\"tags\":[\"abcd0123\",\"0123ABCD\"]}") .allowingAnyArrayOrdering()); } @Rule public final ExpectedException exception = ExpectedException.none(); @Test public void testNameNaamMixup() throws Exception { exception.expect(UnrecognizedPropertyException.class); Serialization.getJsonMapper().readValue("{\"teamNb\":3,\"naam\":\"My team\"}", Team.class); } }