public static async Task Recompute_Success()
        {
            const string UserId = "SomeUserId";
            var          model  = new RecomputeRequest
            {
                UploadIds = new[] { 0, 1, 2 },
                Priority  = UploadProcessingMessagePriority.High,
            };

            var mockDatabaseCommandFactory = new Mock <IDatabaseCommandFactory>(MockBehavior.Strict);

            List <UploadProcessingMessage> messages = null;
            var mockUploadScheduler = new Mock <IUploadScheduler>(MockBehavior.Strict);

            mockUploadScheduler
            .Setup(_ => _.ScheduleAsync(It.IsAny <IEnumerable <UploadProcessingMessage> >()))
            .Callback <IEnumerable <UploadProcessingMessage> >(_ => messages = _.ToList())
            .Returns(Task.CompletedTask);

            var mockUser        = new Mock <ClaimsPrincipal>(MockBehavior.Strict);
            var mockUserManager = MockUserManager.CreateMock();

            mockUserManager
            .Setup(_ => _.GetUserId(mockUser.Object))
            .Returns(UserId);

            var mockHttpContext = new Mock <HttpContext>(MockBehavior.Strict);

            mockHttpContext.SetupGet(_ => _.User).Returns(mockUser.Object);

            var controller = new AdminController(
                mockDatabaseCommandFactory.Object,
                mockUploadScheduler.Object,
                mockUserManager.Object);

            controller.ControllerContext = new ControllerContext {
                HttpContext = mockHttpContext.Object
            };

            await controller.Recompute(model);

            Assert.Equal(model.UploadIds.Count, messages.Count);
            for (var i = 0; i < messages.Count; i++)
            {
                Assert.Equal(model.UploadIds[i], messages[i].UploadId);
                Assert.Equal(model.Priority, messages[i].Priority);
                Assert.Equal(UserId, messages[i].Requester);
            }

            mockDatabaseCommandFactory.VerifyAll();
            mockUploadScheduler.VerifyAll();
            mockUser.VerifyAll();
            mockHttpContext.VerifyAll();

            // Workaround for a Moq bug. See: https://github.com/moq/moq4/issues/456#issuecomment-331692858
            mockUserManager.Object.Logger = mockUserManager.Object.Logger;
            mockUserManager.VerifyAll();
        }
Exemplo n.º 2
0
        public Task Recompute(RecomputeRequest model)
        {
            var userId   = this.userManager.GetUserId(this.User);
            var messages = model.UploadIds.Select(uploadId => new UploadProcessingMessage {
                UploadId = uploadId, Requester = userId, Priority = model.Priority
            });

            return(this.uploadScheduler.ScheduleAsync(messages));
        }
        public virtual ActionResult Recompute([FromBody] RecomputeRequest request)
        {
            // gets the action with the same name as the argument
            var action = _codecAction.SubActions.FirstOrDefault(c => c.Name.Equals(request.Action));

            // if action not found
            if (action == null)
            {
                return(Json(ReturnResult <string> .Fail("Action not found")));
            }

            // retrieve the quant
            var quantArray = JsonHelper.RetrieveQuantsArray(request.Params.QuantizationFactorsArray);

            foreach (var _action in _codecAction.SubActions)
            {
                _action.Parameters[Constants.PARAM_NAME_QUANT_FACTORS_ARRAY] = quantArray;
                _action.Parameters[Constants.PARAM_NAME_ENTROPY_ALGORITHM]   = JsonHelper.CastTo <EntropyAlgorithm>(request.Params.EntropyAlgorithm);
            }

            // retrive tiles from Inputs
            var tileList = new List <Tile>();

            foreach (var tileJson in request.Inputs)
            {
                Triplet <string> triplet    = JsonHelper.RetrieveTriplet(tileJson);
                string           dataFormat = request.Params.UseDataFormat;
                Tile             tile       = null;
                if (dataFormat.Equals(Constants.DataFormat.HEX))
                {
                    tile = Tile.FromStrings(triplet, new HexTileSerializer());
                }
                else
                {
                    tile = Tile.FromStrings(triplet, new IntegerTileSerializer());
                }
                if (dataFormat.Equals(Constants.DataFormat.FixedPoint_11_5))
                {
                    tile.RightShift(5);
                }
                if (dataFormat.Equals(Constants.DataFormat.FixedPoint_12_4))
                {
                    tile.RightShift(4);
                }

                tileList.Add(tile);
            }

            var result = action.DoAction(tileList.FirstOrDefault());

            // recompute the following steps and update
            bool following = false;
            Tile input     = result;

            foreach (var act in _codecAction.SubActions)
            {
                if (following)
                {
                    result = act.DoAction(input);
                    input  = result;
                }
                else
                {
                    if (act.Name.Equals(request.Action))
                    {
                        following = true;
                    }
                }
            }

            return(Json(ReturnResult <string> .Success("Success")));
        }
Exemplo n.º 4
0
        public override ActionResult Recompute([FromBody] RecomputeRequest request)
        {
            // TODO: Add parameters obtain into a function
            string name = JsonHelper.CastTo <string>(request.Action);

            // gets the action with the same name as the argument
            var action = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(name));

            // if action not found
            if (action == null)
            {
                return(Json(ReturnResult <string> .Fail("Action not found")));
            }

            // retrieve the quant
            var quantArray = JsonHelper.RetrieveQuantsArray(request.Params.QuantizationFactorsArray);

            _codecAction.Parameters[Constants.PARAM_NAME_QUANT_FACTORS_ARRAY] = quantArray;

            // retrive the progressive quants
            var progQuantList = new List <QuantizationFactorsArray>();

            foreach (var layer in request.Params.ProgQuantizationArray)
            {
                var layerQuants = JsonHelper.RetrieveQuantsArray(layer);
                progQuantList.Add(layerQuants);
            }
            var progQuantarray = new ProgressiveQuantizationFactors
            {
                ProgQuants = progQuantList
            };

            _codecAction.Parameters[Constants.PARAM_NAME_PROGRESSIVE_QUANT_LIST] = progQuantarray;

            _codecAction.Parameters[Constants.PARAM_NAME_ENTROPY_ALGORITHM]      = JsonHelper.CastTo <EntropyAlgorithm>(request.Params.EntropyAlgorithm);
            _codecAction.Parameters[Constants.PARAM_NAME_USE_REDUCE_EXTRAPOLATE] = JsonHelper.CastTo <UseReduceExtrapolate>(request.Params.UseReduceExtrapolate);

            // TODO: error handle
            var   preFramePath = this.HttpContext.Session.Get <string>(PreviousFrameImage);
            Frame preFrame     = Utility.GetPreviousFrame(preFramePath, _codecAction.Parameters);

            ICodecAction diffing = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(Constants.PENCODE_NAME_SUBBANDDIFFING));

            diffing.Parameters[Constants.PARAM_NAME_PREVIOUS_FRAME] = preFrame;

            // retrive tiles from Inputs
            var tileList = new List <Tile>();

            foreach (var tileJson in request.Inputs)
            {
                Triplet <string> triplet = JsonHelper.RetrieveTriplet(tileJson);

                string dataFormat = request.Params.UseDataFormat;
                Tile   tile       = null;
                if (dataFormat.Equals(Constants.DataFormat.HEX))
                {
                    tile = Tile.FromStrings(triplet, new HexTileSerializer());
                }
                else
                {
                    tile = Tile.FromStrings(triplet, new IntegerTileSerializer());
                }
                if (dataFormat.Equals(Constants.DataFormat.FixedPoint_11_5))
                {
                    tile.RightShift(5);
                }
                if (dataFormat.Equals(Constants.DataFormat.FixedPoint_12_4))
                {
                    tile.RightShift(4);
                }

                tileList.Add(tile);
            }

            var result = action.DoAction(tileList.ToArray());

            // recompute the following steps and update
            bool following = false;

            Tile[] input = result;
            foreach (var act in _codecAction.SubActions)
            {
                if (following)
                {
                    result = act.DoAction(input);
                    input  = result;
                }
                else
                {
                    if (act.Name.Equals(name))
                    {
                        following = true;
                    }
                }
            }

            // TODO: recompute the following steps and update
            return(Json(ReturnResult <string> .Success("Success")));
        }
        public override ActionResult Recompute([FromBody] RecomputeRequest request)
        {
            //dynamic obj = CodecBaseController.GetJsonObject(Request.InputStream);

            //int layer = JsonHelper.CastTo<int>(request.Layer);

            ICodecAction _rfxDecode = GetDecoderWithParameters(request);

            string name = JsonHelper.CastTo <string>(request.Action);

            // gets the action with the same name as the argument
            var action = _rfxDecode.SubActions.SingleOrDefault(c => c.Name.Equals(name));

            // if action not found
            if (action == null)
            {
                return(Json(ReturnResult <string> .Fail("Action not found")));
            }

            // retrive tiles from Inputs
            var tileList = new List <Tile>();

            foreach (var tileJson in request.Inputs)
            {
                Triplet <string> triplet = JsonHelper.RetrieveTriplet(tileJson);

                string dataFormat = request.Params.UseDataFormat;
                Tile   tile       = null;
                if (dataFormat.Equals(Constants.DataFormat.HEX))
                {
                    tile = Tile.FromStrings(triplet, new HexTileSerializer());
                }
                else
                {
                    tile = Tile.FromStrings(triplet, new IntegerTileSerializer());
                }
                if (dataFormat.Equals(Constants.DataFormat.FixedPoint_11_5))
                {
                    tile.RightShift(5);
                }
                if (dataFormat.Equals(Constants.DataFormat.FixedPoint_12_4))
                {
                    tile.RightShift(4);
                }

                tileList.Add(tile);
            }

            // hand over parameters
            foreach (var key in _rfxDecode.Parameters.Keys)
            {
                action.Parameters[key] = _rfxDecode.Parameters[key];
            }

            var result = action.DoAction(tileList.ToArray());

            // recompute the following steps and update
            bool following = false;

            Tile[] input = result;
            foreach (var act in _rfxDecode.SubActions)
            {
                if (following)
                {
                    // hand over parameters
                    foreach (var key in _rfxDecode.Parameters.Keys)
                    {
                        act.Parameters[key] = _rfxDecode.Parameters[key];
                    }
                    result = act.DoAction(input);
                    input  = result;
                }
                else
                {
                    if (act.Name.Equals(name))
                    {
                        following = true;
                    }
                }
            }

            return(Json(ReturnResult <string> .Success("Success")));
        }