Example #1
0
        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());
 }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #6
0
 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);
        }