예제 #1
0
        internal static FunctionLoadResponse FunctionLoadRequestHandler(FunctionLoadRequest request, IFunctionsApplication application, IMethodInfoLocator methodInfoLocator)
        {
            var response = new FunctionLoadResponse
            {
                FunctionId = request.FunctionId,
                Result     = StatusResult.Success
            };

            if (!request.Metadata.IsProxy)
            {
                try
                {
                    FunctionDefinition definition = request.ToFunctionDefinition(methodInfoLocator);
                    application.LoadFunction(definition);
                }
                catch (Exception ex)
                {
                    response.Result = new StatusResult
                    {
                        Status    = StatusResult.Types.Status.Failure,
                        Exception = ex.ToRpcException()
                    };
                }
            }

            return(response);
        }
예제 #2
0
        public void Creates()
        {
            var bindingInfoProvider = new DefaultOutputBindingsInfoProvider();
            var methodInfoLocator   = new DefaultMethodInfoLocator();

            string fullPathToThisAssembly = GetType().Assembly.Location;
            var    functionLoadRequest    = new FunctionLoadRequest
            {
                FunctionId = "abc",
                Metadata   = new RpcFunctionMetadata
                {
                    EntryPoint = $"Microsoft.Azure.Functions.Worker.Tests.{nameof(GrpcFunctionDefinitionTests)}+{nameof(MyFunctionClass)}.{nameof(MyFunctionClass.Run)}",
                    ScriptFile = Path.GetFileName(fullPathToThisAssembly),
                    Name       = "myfunction"
                }
            };

            // We base this on the request exclusively, not the binding attributes.
            functionLoadRequest.Metadata.Bindings.Add("req", new BindingInfo {
                Type = "HttpTrigger", Direction = Direction.In
            });
            functionLoadRequest.Metadata.Bindings.Add("$return", new BindingInfo {
                Type = "Http", Direction = Direction.Out
            });

            FunctionDefinition definition = functionLoadRequest.ToFunctionDefinition(methodInfoLocator);

            Assert.Equal(functionLoadRequest.FunctionId, definition.Id);
            Assert.Equal(functionLoadRequest.Metadata.EntryPoint, definition.EntryPoint);
            Assert.Equal(functionLoadRequest.Metadata.Name, definition.Name);
            Assert.Equal(fullPathToThisAssembly, definition.PathToAssembly);

            // Parameters
            Assert.Collection(definition.Parameters,
                              p =>
            {
                Assert.Equal("req", p.Name);
                Assert.Equal(typeof(HttpRequestData), p.Type);
            });

            // InputBindings
            Assert.Collection(definition.InputBindings,
                              p =>
            {
                Assert.Equal("req", p.Key);
                Assert.Equal(BindingDirection.In, p.Value.Direction);
                Assert.Equal("HttpTrigger", p.Value.Type);
            });

            // OutputBindings
            Assert.Collection(definition.OutputBindings,
                              p =>
            {
                Assert.Equal("$return", p.Key);
                Assert.Equal(BindingDirection.Out, p.Value.Direction);
                Assert.Equal("Http", p.Value.Type);
            });
        }