Beispiel #1
0
        public void GriddedReportDataResult()
        {
            var projectUid = Guid.NewGuid();
            //Set these for testing Automapper - they're not actually used in the gridded data
            var cutFillDesignUid    = Guid.NewGuid();
            var cutFillDesignOffset = 1.5;
            var request             = new CompactionReportGridTRexRequest(
                projectUid, null,
                true, true, true, true, true, true,
                cutFillDesignUid, cutFillDesignOffset,
                null, GridReportOption.Automatic,
                800000, 400000, 800001, 400001, 2, null, null);

            var computeResult = new GriddedReportResult()
            {
                ReturnCode  = ReportReturnCode.NoError,
                ReportType  = ReportType.Gridded,
                GriddedData = AutoMapperUtility.Automapper.Map <GriddedReportData>(request)
            };

            computeResult.GriddedData.NumberOfRows = 1;
            computeResult.GriddedData.Rows.Add(new GriddedReportDataRow()
            {
                Northing    = 1.0,
                Easting     = 2.0,
                Elevation   = 3.0,
                CutFill     = 4.0,
                Cmv         = 5,
                Mdp         = 6,
                PassCount   = 7,
                Temperature = 8
            });
            var executorResult = new GriddedReportDataResult(computeResult.Write());

            var retrieved = new GriddedReportResult();

            using (var ms = new MemoryStream(executorResult.GriddedData))
            {
                using (var reader = new BinaryReader(ms, Encoding.UTF8, true))
                {
                    retrieved.ReturnCode = (ReportReturnCode)reader.ReadInt32();
                    retrieved.ReportType = (ReportType)reader.ReadInt32();

                    retrieved.GriddedData.Read(reader);
                }
            }

            retrieved.ReturnCode.Should().Be(computeResult.ReturnCode);
            retrieved.ReportType.Should().Be(computeResult.ReportType);
            retrieved.GriddedData.Should().NotBeNull();
            retrieved.GriddedData.NumberOfRows.Should().Be(computeResult.GriddedData.NumberOfRows);
            retrieved.GriddedData.Rows[0].Northing.Should().Be(computeResult.GriddedData.Rows[0].Northing);
            retrieved.GriddedData.Rows[0].Easting.Should().Be(computeResult.GriddedData.Rows[0].Easting);
            retrieved.GriddedData.Rows[0].Elevation.Should().Be(computeResult.GriddedData.Rows[0].Elevation);
            retrieved.GriddedData.Rows[0].CutFill.Should().Be(computeResult.GriddedData.Rows[0].CutFill);
            retrieved.GriddedData.Rows[0].Cmv.Should().Be(computeResult.GriddedData.Rows[0].Cmv);
            retrieved.GriddedData.Rows[0].Mdp.Should().Be(computeResult.GriddedData.Rows[0].Mdp);
            retrieved.GriddedData.Rows[0].PassCount.Should().Be(computeResult.GriddedData.Rows[0].PassCount);
            retrieved.GriddedData.Rows[0].Temperature.Should().Be(computeResult.GriddedData.Rows[0].Temperature);
        }
Beispiel #2
0
        public async Task <FileResult> PostGriddedReport(
            [FromBody] CompactionReportGridTRexRequest reportGridRequest,
            [FromServices] IReportDataValidationUtility reportDataValidationUtility)
        {
            Log.LogInformation($"{nameof(PostGriddedReport)}: {Request.QueryString}");

            reportGridRequest.Validate();
            reportDataValidationUtility.ValidateData(nameof(PostGriddedReport), reportGridRequest.ProjectUid, (object)reportGridRequest);
            ValidateFilterMachines(nameof(PostGriddedReport), reportGridRequest.ProjectUid, reportGridRequest.Filter);

            var griddedReportDataResult = await WithServiceExceptionTryExecuteAsync(() =>
                                                                                    RequestExecutorContainer
                                                                                    .Build <GriddedReportExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler)
                                                                                    .ProcessAsync(reportGridRequest)) as GriddedReportDataResult;

            if (griddedReportDataResult?.GriddedData == null)
            {
                var code   = griddedReportDataResult == null ? HttpStatusCode.BadRequest : HttpStatusCode.NoContent;
                var exCode = griddedReportDataResult == null ? ContractExecutionStatesEnum.FailedToGetResults : ContractExecutionStatesEnum.ValidationError;

                throw new ServiceException(code, new ContractExecutionResult(exCode, $"Failed to get gridded report data for projectUid: {reportGridRequest.ProjectUid}"));
            }

            return(new FileStreamResult(new MemoryStream(griddedReportDataResult.GriddedData), ContentTypeConstants.ApplicationOctetStream));
        }
Beispiel #3
0
        public void MapGriddedRequestToArgument(
            Guid projectUid, FilterResult filter,
            bool reportElevation, bool reportCmv, bool reportMdp, bool reportPassCount, bool reportTemperature, bool reportCutFill,
            Guid?cutFillDesignUid, double?cutfillDesignOffset,
            double?gridInterval, GridReportOption gridReportOption,
            double startNorthing, double startEasting, double endNorthing, double endEasting, double azimuth, bool useOverrides)
        {
            var overrides = useOverrides
        ? new OverridingTargets(75, true, 70, 90, 0, false, 80, 125, new TargetPassCountRange(4, 10),
                                new TemperatureSettings(120, 70, true), null)
        : null;

            var liftSettings = useOverrides
        ? new LiftSettings(true, false, SummaryType.Compaction,
                           SummaryType.WorkInProgress, 0.2f, LiftDetectionType.AutoMapReset, LiftThicknessType.Compacted,
                           new LiftThicknessTarget {
                TargetLiftThickness = 0.75f, AboveToleranceLiftThickness = 0.3f, BelowToleranceLiftThickness = 0.2f
            },
                           true, 0.5f, true, 0.3, 0.7)
        : null;

            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutfillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, overrides, liftSettings);

            var result = AutoMapperUtility.Automapper.Map <GriddedReportRequestArgument>(request);

            Assert.Equal(request.ProjectUid, result.ProjectID);
            Assert.Null(result.Filters);
            Assert.Equal(request.CutFillDesignUid ?? Guid.Empty, result.ReferenceDesign.DesignID);
            Assert.Equal(request.CutFillDesignOffset ?? 0, result.ReferenceDesign.Offset);
            Assert.Equal(request.ReportElevation, result.ReportElevation);
            Assert.Equal(request.ReportCutFill, result.ReportCutFill);
            Assert.Equal(request.ReportCmv, result.ReportCmv);
            Assert.Equal(request.ReportMdp, result.ReportMdp);
            Assert.Equal(request.ReportPassCount, result.ReportPassCount);
            Assert.Equal(request.ReportTemperature, result.ReportTemperature);
            //Overrides mapping tested separately in AutoMapperTests
            if (useOverrides)
            {
                Assert.NotNull(result.Overrides);
                Assert.NotNull(result.LiftParams);
            }
            else
            {
                Assert.Null(result.Overrides);
                Assert.Null(result.LiftParams);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Processes the summary pass counts request by passing the request to TRex and returning the result.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="item"></param>
        /// <returns></returns>
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            try
            {
                var request = CastRequestObjectTo <ExportGridCSV>(item);

                if (request.reportType == GriddedCSVReportType.Alignment)
                {
                    throw new ServiceException(HttpStatusCode.BadRequest,
                                               new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "TRex unsupported request"));
                }

                var overrides    = AutoMapperUtility.Automapper.Map <OverridingTargets>(request.liftBuildSettings);
                var liftSettings = AutoMapperUtility.Automapper.Map <LiftSettings>(request.liftBuildSettings);

                var compactionReportGridRequest = new CompactionReportGridTRexRequest
                                                  (
                    request.ProjectUid.Value,
                    request.filter,
                    request.reportElevation,
                    request.reportCMV,
                    request.reportMDP,
                    request.reportPassCount,
                    request.reportTemperature,
                    request.reportCutFill,
                    request.designFile?.FileUid,
                    request.designFile?.Offset,
                    request.interval,
                    request.reportOption,
                    request.startNorthing,
                    request.startEasting,
                    request.endNorthing,
                    request.endEasting,
                    request.direction,
                    overrides,
                    liftSettings
                                                  );

                log.LogInformation($"Calling TRex SendCompactionReportGridRequest for projectUid: {request.ProjectUid}");

                var responseData = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(compactionReportGridRequest, "/report/grid", customHeaders);

                return(responseData.Length > 0
          ? ConvertTRexGridResult(responseData)
          : CreateNullGridReturnedResult());
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }
Beispiel #5
0
        public async Task CSVExportExecutor_GotSiteAndFilter()
        {
            bool   reportElevation     = true;
            bool   reportCmv           = true;
            bool   reportMdp           = true;
            bool   reportPassCount     = true;
            bool   reportTemperature   = true;
            bool   reportCutFill       = false;
            Guid?  cutFillDesignUid    = null;
            double?cutFillDesignOffset = null;
            double?gridInterval        = null;
            var    gridReportOption    = GridReportOption.Automatic;
            double startNorthing       = 800000;
            double startEasting        = 400000;
            double endNorthing         = 800010;
            double endEasting          = 400010;
            double azimuth             = 4;

            var filter = new Productivity3D.Filter.Abstractions.Models.Filter(
                DateTime.SpecifyKind(new DateTime(2018, 1, 10), DateTimeKind.Utc),
                DateTime.SpecifyKind(new DateTime(2019, 2, 11), DateTimeKind.Utc), "", "",
                new List <MachineDetails>(), null, null, null, null, null, null
                );
            var filterResult = new FilterResult(null, filter, null, null, null, null, null, null, null);
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();

            var request = new CompactionReportGridTRexRequest(
                siteModel.ID, filterResult,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutFillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            request.Validate();

            // Mock the export request functionality to return an empty gridded report reponse to stimulate the desired success
            var mockCompute = IgniteMock.Immutable.mockCompute;

            mockCompute.Setup(x => x.ApplyAsync(It.IsAny <GriddedReportRequestComputeFunc>(), It.IsAny <GriddedReportRequestArgument>(), It.IsAny <CancellationToken>())).Returns((GriddedReportRequestComputeFunc func, GriddedReportRequestArgument argument, CancellationToken token) => Task.FromResult(new GriddedReportRequestResponse()));

            var executor = RequestExecutorContainer
                           .Build <GriddedReportExecutor>(DIContext.Obtain <IConfigurationStore>(),
                                                          DIContext.Obtain <ILoggerFactory>(),
                                                          DIContext.Obtain <IServiceExceptionHandler>());
            var result = await executor.ProcessAsync(request) as GriddedReportDataResult;

            result?.Code.Should().Be(ContractExecutionStatesEnum.ExecutedSuccessfully);
            result?.GriddedData.Should().NotBeNull();
            result?.GriddedData.Should().NotBeEmpty();
        }
Beispiel #6
0
        public void GriddedTRexRequest_Successful(
            Guid projectUid, FilterResult filter,
            bool reportElevation, bool reportCmv, bool reportMdp, bool reportPassCount, bool reportTemperature, bool reportCutFill,
            Guid?cutFillDesignUid, double?cutfillDesignOffset,
            double?gridInterval, GridReportOption gridReportOption,
            double startNorthing, double startEasting, double endNorthing, double endEasting, double azimuth)
        {
            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutfillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            request.Validate();
        }
Beispiel #7
0
        public void GriddedTRexRequest_Unsuccessful(
            Guid projectUid, FilterResult filter,
            bool reportElevation, bool reportCmv, bool reportMdp, bool reportPassCount, bool reportTemperature, bool reportCutFill,
            Guid?cutFillDesignUid, double?cutfillDesignOffset,
            double?gridInterval, GridReportOption gridReportOption,
            double startNorthing, double startEasting, double endNorthing, double endEasting, double azimuth,
            string errorMessage)
        {
            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutfillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            var ex = Assert.Throws <ServiceException>(() => request.Validate());

            Assert.Equal(HttpStatusCode.BadRequest, ex.Code);
            Assert.Equal(ContractExecutionStatesEnum.ValidationError, ex.GetResult.Code);
            Assert.Equal(errorMessage, ex.GetResult.Message);
        }
Beispiel #8
0
        public void ValidateReportData_GriddedSuccess(Guid projectUid, Guid cutFillDesignUid, double?cutFillDesignOffset, Guid?alignmentDesignUid)
        {
            var mockSiteModel  = new Mock <ISiteModel>();
            var mockSiteModels = new Mock <ISiteModels>();

            mockSiteModels.Setup(x => x.GetSiteModel(It.IsAny <Guid>(), It.IsAny <bool>())).Returns(mockSiteModel.Object);

            var mockDesign        = new Mock <IDesign>();
            var mockDesigns       = new Mock <IDesigns>();
            var mockDesignManager = new Mock <IDesignManager>();

            mockDesignManager.Setup(x => x.List(It.IsAny <Guid>())).Returns(mockDesigns.Object);
            mockDesigns.Setup(x => x.Locate(It.IsAny <Guid>())).Returns(mockDesign.Object);

            var mockAlignments       = new Mock <IAlignments>();
            var mockAlignmentManager = new Mock <IAlignmentManager>();

            mockAlignmentManager.Setup(x => x.List(It.IsAny <Guid>())).Returns(mockAlignments.Object);
            mockAlignments.Setup(x => x.Locate(It.IsAny <Guid>())).Returns((IAlignment)null);

            DIBuilder
            .New()
            .AddLogging()
            .Add(x => x.AddSingleton <ISiteModels>(mockSiteModels.Object))
            .Add(x => x.AddSingleton <IDesignManager>(mockDesignManager.Object))
            .Add(x => x.AddSingleton <IAlignmentManager>(mockAlignmentManager.Object))
            .Add(x => x.AddTransient <IReportDataValidationUtility, ReportDataValidationUtility>())
            .Complete();

            var request = new CompactionReportGridTRexRequest(
                projectUid, null,
                true, true, true, true, true, true,
                cutFillDesignUid, cutFillDesignOffset,
                null, GridReportOption.Automatic,
                800000, 400000, 800001, 400001, 2, null, null);

            var siteModel = GatewayHelper.ValidateAndGetSiteModel(nameof(ValidateReportData_GriddedSuccess), projectUid);
            var isOk      = DIContext.Obtain <IReportDataValidationUtility>().ValidateData(nameof(ValidateReportData_GriddedSuccess), projectUid, request);

            Assert.True(isOk);
        }
Beispiel #9
0
        public void ValidateReportData_GriddedNoDesign_Fail(Guid projectUid, Guid cutFillDesignUid, double?cutFillDesignOffset, Guid?alignmentDesignUid)
        {
            var mockSiteModel  = new Mock <ISiteModel>();
            var mockSiteModels = new Mock <ISiteModels>();

            mockSiteModels.Setup(x => x.GetSiteModel(It.IsAny <Guid>(), It.IsAny <bool>())).Returns(mockSiteModel.Object);

            var mockDesigns       = new Mock <IDesigns>();
            var mockDesignManager = new Mock <IDesignManager>();

            mockDesignManager.Setup(x => x.List(It.IsAny <Guid>())).Returns(mockDesigns.Object);
            mockDesigns.Setup(x => x.Locate(It.IsAny <Guid>())).Returns((IDesign)null);

            var mockAlignments       = new Mock <IAlignments>();
            var mockAlignmentManager = new Mock <IAlignmentManager>();

            mockAlignmentManager.Setup(x => x.List(It.IsAny <Guid>())).Returns(mockAlignments.Object);
            mockAlignments.Setup(x => x.Locate(It.IsAny <Guid>())).Returns((IAlignment)null);

            DIBuilder
            .New()
            .AddLogging()
            .Add(x => x.AddSingleton <ISiteModels>(mockSiteModels.Object))
            .Add(x => x.AddSingleton <IDesignManager>(mockDesignManager.Object))
            .Add(x => x.AddSingleton <IAlignmentManager>(mockAlignmentManager.Object))
            .Add(x => x.AddTransient <IReportDataValidationUtility, ReportDataValidationUtility>())
            .Complete();

            var request = new CompactionReportGridTRexRequest(
                projectUid, null,
                true, true, true, true, true, true,
                cutFillDesignUid, cutFillDesignOffset,
                null, GridReportOption.Automatic,
                800000, 400000, 800001, 400001, 2, null, null);

            var ex = Assert.Throws <ServiceException>(() => DIContext.Obtain <IReportDataValidationUtility>().ValidateData(nameof(ValidateReportData_GriddedNoDesign_Fail), request.ProjectUid, request));

            Assert.Equal(System.Net.HttpStatusCode.BadRequest, ex.Code);
            Assert.Equal(ContractExecutionStatesEnum.ValidationError, ex.GetResult.Code);
            Assert.Equal($"CutFill design {cutFillDesignUid} is not found.", ex.GetResult.Message);
        }
Beispiel #10
0
        public async Task GriddedReportExecutor_SiteModelNotFound()
        {
            var          projectUid          = Guid.NewGuid();
            FilterResult filter              = null;
            bool         reportElevation     = true;
            bool         reportCmv           = true;
            bool         reportMdp           = true;
            bool         reportPassCount     = true;
            bool         reportTemperature   = true;
            bool         reportCutFill       = false;
            Guid?        cutFillDesignUid    = null;
            double?      cutFillDesignOffset = null;
            double?      gridInterval        = null;
            var          gridReportOption    = GridReportOption.Automatic;
            double       startNorthing       = 800000;
            double       startEasting        = 400000;
            double       endNorthing         = 800010;
            double       endEasting          = 400010;
            double       azimuth             = 4;

            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutFillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            request.Validate();

            var executor = RequestExecutorContainer
                           .Build <GriddedReportExecutor>(DIContext.Obtain <IConfigurationStore>(),
                                                          DIContext.Obtain <ILoggerFactory>(),
                                                          DIContext.Obtain <IServiceExceptionHandler>());
            var result = await Assert.ThrowsAsync <ServiceException>(() => executor.ProcessAsync(request));

            Assert.Equal(HttpStatusCode.BadRequest, result.Code);
            Assert.Equal(ContractExecutionStatesEnum.InternalProcessingError, result.GetResult.Code);
            Assert.Equal($"Site model {projectUid} is unavailable", result.GetResult.Message);
        }
Beispiel #11
0
        public void MapGriddedRequestToResult(
            Guid projectUid, FilterResult filter,
            bool reportElevation, bool reportCmv, bool reportMdp, bool reportPassCount, bool reportTemperature, bool reportCutFill,
            Guid?cutFillDesignUid, double?cutfillDesignOffset,
            double?gridInterval, GridReportOption gridReportOption,
            double startNorthing, double startEasting, double endNorthing, double endEasting, double azimuth)
        {
            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutfillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            var result = AutoMapperUtility.Automapper.Map <GriddedReportData>(request);

            Assert.Equal(request.ReportElevation, result.ReportElevation);
            Assert.Equal(request.ReportCutFill, result.ReportCutFill);
            Assert.Equal(request.ReportCmv, result.ReportCmv);
            Assert.Equal(request.ReportMdp, result.ReportMdp);
            Assert.Equal(request.ReportPassCount, result.ReportPassCount);
            Assert.Equal(request.ReportTemperature, result.ReportTemperature);
            Assert.Equal(0, result.NumberOfRows);
            Assert.NotNull(result.Rows);
        }