private static string ParseURLParams(AzureFunctionTestRequestDto function, string url) { var parametersString = string.Empty; foreach (var paramName in function.parameters.Keys) { var paramValue = function.parameters[paramName]; var stringValue = string.Empty; if (paramValue is List <object> ) { foreach (var element in paramValue as IEnumerable <object> ) { stringValue += "," + HttpUtility.UrlEncode(element.ToString()); } if (stringValue.Length > 0) { stringValue = stringValue.Substring(1); } } else { stringValue = HttpUtility.UrlEncode(paramValue.ToString()); } parametersString += "&" + paramName + "=" + stringValue; } if (parametersString.Length > 0) { parametersString = parametersString.Substring(0); url += url.Contains("?") ? "&" : "?"; url += parametersString; } return(url); }
/// <summary> /// Evalua una funcion. /// </summary> /// <param name="function">FunciĆ³n a evaluar.</param> /// <returns>Resultado de la prueba.</returns> public async Task <bool> TestFunctionAsync(AzureFunctionTestRequestDto function) { var success = false; var url = string.Empty; var jsonBody = string.Empty; try { using (WebClient webClient = new WebClient()) { ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; url = HOST.Replace(FUNCTION_NAME_TOKEN, function.name); string response = null; if (function.isPost) { webClient.Headers[HttpRequestHeader.ContentType] = "application/json"; jsonBody = JsonConvert.SerializeObject(function.parameters); var start = DateTime.Now; response = await webClient.UploadStringTaskAsync(url, jsonBody); var ends = DateTime.Now; var duration = ends.Millisecond - start.Millisecond; LogUtil.Info(" [POST] [" + function.name + "] [" + duration + " ms] [" + function.testAlias + "] : " + response); } if (function.isGet) { url = ParseURLParams(function, url); var start = DateTime.Now; response = await webClient.DownloadStringTaskAsync(url); var ends = DateTime.Now; var duration = ends.Millisecond - start.Millisecond; LogUtil.Info(" [GET] [" + function.name + "] [" + duration + " ms] [" + function.testAlias + "] : " + response); } success = true; } } catch (Exception ex) { LogUtil.Error(new Dictionary <string, object> { { "Error", "Error on test function \"" + function.name + "\": " + ex.Message }, { "URL", url }, { "JsonBody", jsonBody }, { "Function", function }, { "Exception", ex } }); } return(success); }