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); }
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); }); }