private static async Task <string> ValidateRandomService(string apiBaseUrl, PaginationResults paginationResults, dynamic serviceList, WebServiceReader webServiceReader) { var service = GetRandomService(serviceList); if (service == null) { return(null); // maybe a message is required } await ValidateService(apiBaseUrl, paginationResults, service, webServiceReader); return(Convert.ToString(service.id ?? null)); }
public ResourceReader() { webServiceReader = new WebServiceReader(new APIValidatorSettings()); }
public async Task <PaginationResults> GetServices(string apiBaseUrl, string id, WebServiceReader webServiceReader, APIValidatorSettings settings = null) { settings = settings ?? new APIValidatorSettings(); var paginationResults = new PaginationResults(); async Task <bool> processor(dynamic serviceList, int totalPages, int hash) { if (serviceList == null) { return(true); } paginationResults.MissingPaginationMetaData = GetMissingPaginationMetadata(serviceList); paginationResults.Hashes.Add(hash); try { paginationResults.TotalPages = Convert.ToInt32(serviceList.totalPages); } catch { paginationResults.HasInvalidTotalPages = true; } if (HasProperty(serviceList, "content")) { if (settings.RandomServiceOnly) { await ValidateRandomService(apiBaseUrl, paginationResults, serviceList, webServiceReader); } else { List <dynamic> services = new List <dynamic>(); foreach (dynamic s in serviceList.content) { services.Add(s); } Parallel.ForEach(services, (s) => { ValidateService(apiBaseUrl, paginationResults, s, webServiceReader).GetAwaiter().GetResult(); }); } } return(true); } int?maximumPages = null; if (settings != null && settings.SamplePages) { maximumPages = SampleSize; } await PaginateServices(apiBaseUrl, id, processor, webServiceReader, totalPagesOverride : settings.FirstPageOnly? 1 : maximumPages); return(paginationResults); }
public async Task PaginateServices(string apiBaseUrl, string id, ServiceProcessorAsync processor, WebServiceReader webServiceReader, string parameters = "", int?totalPagesOverride = null) { int pageNo = 0; int totalPages = totalPagesOverride ?? 1; while (pageNo < totalPages) { pageNo++; string serviceUrl = apiBaseUrl + "/services/"; serviceUrl += parameters; if (!serviceUrl.Contains("?")) { serviceUrl += "?"; } else { serviceUrl += "&"; } WebServiceResponse serviceList = await webServiceReader.ConvertToDynamic(serviceUrl + "page=" + pageNo); try { if (serviceList == null) { continue; } int tmp = Convert.ToInt32(serviceList.Data.totalPages); if (!totalPagesOverride.HasValue || tmp < totalPages) { totalPages = tmp; } } catch { //if this isn't here we will ignore it and just paginate the first page. This issue will be reported upon in pagination } if (!await processor(serviceList.Data, totalPages, serviceList.HashCode)) { break; } ProgressCache.Update(id, pageNo, totalPages); } }
private static async Task ValidateService(string apiBaseUrl, PaginationResults paginationResults, dynamic service, WebServiceReader webServiceReader) { dynamic obj = service; try { WebServiceResponse result = await webServiceReader.ConvertToDynamic(apiBaseUrl + "/services/" + service.id); if (result != null) { obj = result.Data; paginationResults.HasAllowOrigin = result.HasAllowOrigin; } if (obj == null) { obj = service; paginationResults.MissingDetailIDs.Add(Convert.ToString(service.id)); } } catch { try { paginationResults.MissingDetailIDs.Add(Convert.ToString(service.id)); } catch { //bad data don't stop the test for this } } paginationResults.Items.Add(obj); }
public async Task <PaginationResults> GetAllServices(string apiBaseUrl, string id, WebServiceReader webServiceReader) { return(await GetServices(apiBaseUrl, id, webServiceReader)); }
internal async static System.Threading.Tasks.Task <bool> HasPassed(string apiBaseUrl, IFeatureTest test, WebServiceReader webServiceReader) { bool result = false; Paginator paginator = new Paginator(); try { await paginator.PaginateServices(apiBaseUrl, string.Empty, async delegate(dynamic serviceList, int totalPages, int hash) { if (serviceList == null) { result = false; } foreach (dynamic s in serviceList.content) { if (s != null && Convert.ToString(s.id.Value) == test.ServiceID) { result = true; return(false); } } return(true); }, webServiceReader, test.Parameters); } catch { //error logging not required here return(false); } return(result); }