/* Copyright (c) 2011 Danish Maritime Authority. * * 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 dk.dma.ais.bus; import dk.dma.ais.bus.tcp.TcpClientConf; import dk.dma.ais.bus.tcp.TcpServerConf; import dk.dma.ais.configuration.bus.AisBusConfiguration; import dk.dma.ais.configuration.bus.consumer.DistributerConsumerConfiguration; import dk.dma.ais.configuration.bus.consumer.StdoutConsumerConfiguration; import dk.dma.ais.configuration.bus.consumer.TcpServerConsumerConfiguration; import dk.dma.ais.configuration.bus.consumer.TcpWriterConsumerConfiguration; import dk.dma.ais.configuration.bus.provider.FileReaderProviderConfiguration; import dk.dma.ais.configuration.bus.provider.TcpClientProviderConfiguration; import dk.dma.ais.configuration.bus.provider.TcpServerProviderConfiguration; import dk.dma.ais.configuration.filter.DownSampleFilterConfiguration; import dk.dma.ais.configuration.filter.DuplicateFilterConfiguration; import dk.dma.ais.configuration.filter.FilterConfiguration; import dk.dma.ais.configuration.filter.GatehouseSourceFilterConfiguration; import dk.dma.ais.configuration.filter.LocationFilterConfiguration; import dk.dma.ais.configuration.filter.PacketFilterCollectionConfiguration; import dk.dma.ais.configuration.filter.SanityFilterConfiguration; import dk.dma.ais.configuration.filter.TaggingFilterConfiguration; import dk.dma.ais.configuration.filter.TargetCountryFilterConfiguration; import dk.dma.ais.configuration.filter.geometry.CircleGeometryConfiguration; import dk.dma.ais.configuration.transform.AnonymousTransfomerConfiguration; import dk.dma.ais.configuration.transform.CropVdmTransformerConfiguration; import dk.dma.ais.configuration.transform.PacketTaggingConfiguration; import dk.dma.ais.configuration.transform.ReplayTransformConfiguration; import dk.dma.ais.configuration.transform.SourceTypeSatTransformerConfiguration; import dk.dma.ais.configuration.transform.TaggingTransformerConfiguration; import dk.dma.ais.filter.PacketFilterCollection; import dk.dma.ais.transform.AisPacketTaggingTransformer.Policy; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import javax.xml.bind.JAXBException; import java.io.FileNotFoundException; import java.util.List; public class AisBusTest { @Test public void confTest() throws JAXBException, FileNotFoundException { AisBusConfiguration conf = new AisBusConfiguration(); // Bus Filters conf.getFilters().add(new DownSampleFilterConfiguration()); conf.getFilters().add(new DuplicateFilterConfiguration()); conf.getFilters().add(new SanityFilterConfiguration()); SourceTypeSatTransformerConfiguration satSourceConf = new SourceTypeSatTransformerConfiguration(); satSourceConf.getSatGhRegions().add("802"); satSourceConf.getSatGhRegions().add("804"); satSourceConf.getSatSources().add("ORBCOMM999"); conf.getTransformers().add(satSourceConf); // Provider TcpClientProviderConfiguration rrReader = new TcpClientProviderConfiguration(); rrReader.getHostPort().add("ais163.sealan.dk:65262"); rrReader.getFilters().add(new DownSampleFilterConfiguration(300)); TcpClientConf rrReaderConf = new TcpClientConf(); rrReader.setClientConf(rrReaderConf); TaggingTransformerConfiguration tagConf = new TaggingTransformerConfiguration(); tagConf.setTagPolicy(Policy.PREPEND_MISSING); tagConf.getTagging().setSourceId("AISD"); tagConf.getTagging().setSourceCountry("DNK"); tagConf.getTagging().setSourceType("SAT"); tagConf.getExtraTags().put("somekey", "someval"); rrReader.getTransformers().add(tagConf); conf.getProviders().add(rrReader); // Provider TcpServerProviderConfiguration spConf = new TcpServerProviderConfiguration(); TcpServerConf spServerConf = new TcpServerConf(); spServerConf.setPort(9998); spConf.setServerConf(spServerConf); TcpClientConf spClientConf = new TcpClientConf(); spClientConf.setGzipCompress(true); spConf.setClientConf(spClientConf); conf.getProviders().add(spConf); // Provider FileReaderProviderConfiguration fileConf = new FileReaderProviderConfiguration(); fileConf.setFilename("/tmp/aisdump.txt"); ReplayTransformConfiguration replayConf = new ReplayTransformConfiguration(); fileConf.getTransformers().add(replayConf); GatehouseSourceFilterConfiguration ghFilter = new GatehouseSourceFilterConfiguration(); ghFilter.getFilterEntries().put("region", "8"); fileConf.getFilters().add(ghFilter); TargetCountryFilterConfiguration tgtFilter = new TargetCountryFilterConfiguration(); tgtFilter.getAllowedCountries().add("DNK"); tgtFilter.getAllowedCountries().add("SWE"); CircleGeometryConfiguration circleConf = new CircleGeometryConfiguration(); circleConf.setLat(55.7); circleConf.setLon(12.6); circleConf.setRadius(20000); LocationFilterConfiguration locFilter = new LocationFilterConfiguration(); locFilter.getGeometries().add(circleConf); fileConf.getFilters().add(locFilter); fileConf.getFilters().add(tgtFilter); fileConf.getTransformers().add(new AnonymousTransfomerConfiguration()); PacketTaggingConfiguration tagging = new PacketTaggingConfiguration(); tagging.setSourceBs(2190048); TaggingFilterConfiguration tagFilter = new TaggingFilterConfiguration(); tagFilter.setFilterTagging(tagging); fileConf.getFilters().add(tagFilter); conf.getProviders().add(fileConf); // Consumer StdoutConsumerConfiguration stdoutConsumer = new StdoutConsumerConfiguration(); stdoutConsumer.getFilters().add(new DownSampleFilterConfiguration(600)); stdoutConsumer.getTransformers().add(new CropVdmTransformerConfiguration()); stdoutConsumer.setConsumerPullMaxElements(1); conf.getConsumers().add(stdoutConsumer); // Consumer TcpWriterConsumerConfiguration tcpWriter = new TcpWriterConsumerConfiguration(); TcpClientConf clc1 = new TcpClientConf(); clc1.setBufferSize(1); tcpWriter.setClientConf(clc1); tcpWriter.setPort(8089); tcpWriter.setHost("localhost"); conf.getConsumers().add(tcpWriter); PacketFilterCollectionConfiguration filterCollection = new PacketFilterCollectionConfiguration(); LocationFilterConfiguration locFilter1 = new LocationFilterConfiguration(); circleConf = new CircleGeometryConfiguration(); circleConf.setLat(36.3); circleConf.setLon(127.3); circleConf.setRadius(370400); locFilter1.getGeometries().add(circleConf); filterCollection.addFilterConfiguration(locFilter1); LocationFilterConfiguration locFilter2 = new LocationFilterConfiguration(); circleConf = new CircleGeometryConfiguration(); circleConf.setLat(55.3); circleConf.setLon(11.5); circleConf.setRadius(125000); locFilter2.getGeometries().add(circleConf); filterCollection.addFilterConfiguration(locFilter2); filterCollection.setFilterType(PacketFilterCollection.TYPE_OR); tcpWriter.getFilters().add(filterCollection); // Consumer TcpServerConsumerConfiguration tcpServer = new TcpServerConsumerConfiguration(); TcpClientConf clc2 = new TcpClientConf(); clc2.setGzipCompress(true); TcpServerConf serverConf = new TcpServerConf(); serverConf.setPort(9999); tcpServer.setClientConf(clc2); tcpServer.setServerConf(serverConf); conf.getConsumers().add(tcpServer); // Consumer DistributerConsumerConfiguration distributerConf = new DistributerConsumerConfiguration(); distributerConf.setName("DISTRIBUTER"); conf.getConsumers().add(distributerConf); // Save AisBusConfiguration.save("aisbus.xml", conf); // Load conf = AisBusConfiguration.load("aisbus.xml"); Assert.assertEquals(conf.getBusQueueSize(), 10000); } @Test public void confLoadTest() throws JAXBException, FileNotFoundException { AisBusConfiguration conf = AisBusConfiguration.load("src/main/resources/aisbus-test.xml"); Assert.assertEquals(conf.getBusQueueSize(), 10000); List<FilterConfiguration> filters = conf.getFilters(); for (FilterConfiguration filter : filters) { if (filter instanceof DownSampleFilterConfiguration) { Assert.assertEquals(((DownSampleFilterConfiguration) filter).getSamplingRate(), 60); } else if (filter instanceof DuplicateFilterConfiguration) { Assert.assertEquals(((DuplicateFilterConfiguration) filter).getWindowSize(), 10000); } else { Assert.fail(); } } // StdoutConsumerConfiguration consumerConf = (StdoutConsumerConfiguration)conf.getConsumers().get(1); // Assert.assertEquals(consumerConf.getConsumerPullMaxElements(), 1); } @Ignore // TODO This test is possibly machine-dependent. Needs closer analysis and then to be reenabled. @Test public void aisBusTest() throws JAXBException, FileNotFoundException { AisBus aisBus = AisBusFactory.get("src/main/resources/aisbus-test.xml"); int threadCount = Thread.activeCount(); aisBus.start(); aisBus.startConsumers(); aisBus.startProviders(); try { Thread.sleep(8000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Threads: " + Thread.activeCount()); System.out.println("AisBus: " + aisBus.getStatus()); for (AisBusProvider provider : aisBus.getProviders()) { System.out.println("Provider: " + provider.toString()); } for (AisBusConsumer consumer : aisBus.getConsumers()) { System.out.println("Consumer: " + consumer.toString()); } System.out.println("Stopping AisBus"); aisBus.cancel(); System.out.println("Done stopping AisBus"); Assert.assertEquals(threadCount, Thread.activeCount()); } // @Test public void aisBusTest2() throws JAXBException, FileNotFoundException { AisBus aisBus = AisBusFactory.get("src/main/resources/aisbus-example.xml"); aisBus.start(); aisBus.startConsumers(); aisBus.startProviders(); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } }