Beispiel #1
0
        public ScenarioBase(ILoggerFactory loggerFactory, string postgresConnectionString, string kafkaServer, string routeNetworkTopicName)
        {
            _routeNetworkDatastore = new RouteNetworkDatastore(postgresConnectionString);

            _eventFetcher = new WaitForAndFetchEvents <RouteNetworkEvent>(loggerFactory, kafkaServer, routeNetworkTopicName);

            var startMarker = Guid.NewGuid();
            var endMarker   = Guid.NewGuid();
        }
Beispiel #2
0
        public RouteNetworkBuilder Run(string routeNodeFilename, string routeSegmentFilename, RouteNetworkDatastore routeNetworkDatestore, Guid startMarker, Guid endMarker)
        {
            _routeNodeFilename     = routeNodeFilename;
            _routeSegmentFilename  = routeSegmentFilename;
            _routeNetworkDatestore = routeNetworkDatestore;
            _startMarker           = startMarker;
            _endMarker             = endMarker;

            // Create route nodes and segments
            var graphBuilder = new Wgs84GraphBuilder(_routeGraph);

            ImportRouteNodes(graphBuilder);
            ImportRouteSegments(graphBuilder);

            return(this);
        }
Beispiel #3
0
        public void Run()
        {
            var loggerFactory = LoggerFactory.Create(builder =>
                                                     builder.AddConsole().SetMinimumLevel(LogLevel.Debug)
                                                     );

            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.ControlledBy(new Serilog.Core.LoggingLevelSwitch(Serilog.Events.LogEventLevel.Verbose))
                         .WriteTo.Console()
                         .CreateLogger();

            try {
                var routeNetworkDatastore = new RouteNetworkDatastore(PostgresConnectionString);

                var startMarker = Guid.NewGuid();
                var endMarker   = Guid.NewGuid();

                var routeNetworkBuilder = new RouteNetworkBuilder();
                routeNetworkBuilder.Run(Nodefilename, SegmentFilename, routeNetworkDatastore, startMarker, endMarker);

                var graph = routeNetworkBuilder.RouteGraph;

                using var eventFetcher = new WaitForAndFetchEvents <RouteNetworkEvent>(loggerFactory, KafkaServer, RouteNetworkTopicName);

                long timeoutMs = 1000 * 60 * 1; // Wait 1 minute, before giving up recieving route network events from topic

                bool timedOut = eventFetcher.WaitForEvents(
                    start => start.WorkTaskMrid.Equals(startMarker),
                    stop => stop.WorkTaskMrid.Equals(endMarker),
                    timeoutMs
                    ).Result;


                var events = eventFetcher.Events.ToList();

                // Check if event fetcher timed out
                if (timedOut)
                {
                    LogErrorAndThrowException($"Seeding of test network failed. Timeout ({timeoutMs} ms) exceded waiting for events to arrive on route network topic.");
                }

                // Check if GDB integrator has put the right amount of events in the route network event topic
                if (events.Count != (graph.Nodes.Count + graph.Edges.Count))
                {
                    LogErrorAndThrowException($"Seeding of test network failed. {(graph.Nodes.Count + graph.Edges.Count)} number of nodes and routes were inserted into Postgres. Expected the same amount of events inserted into the route network topic by GDB integrator, but got {events.Count} events from topic!");
                }


                bool someTestFailed = false;

                // Check that all properties we add to postgres is added to events etc.
                if (!new CheckEventProperties().Run(graph, events))
                {
                    someTestFailed = true;
                }


                // Check if event fetcher timed out
                if (someTestFailed)
                {
                    LogErrorAndThrowException($"Seeding of test network failed. Please search the log for errors resulting from integration tests.");
                }
            }
            catch (Exception ex)
            {
                Log.Error("Seeding of test network failed. Unhandled exception: " + ex.Message, ex);
                throw ex;
            }
        }