public async Task FindEntryNuGetV2MultiThreadWithDelays()
        {
            int    taskCount = 100;
            Random random    = new Random();

            EdmMetadataCache.Clear();

            var tasks = new List <Task>();

            metadataCalls = 0;

            for (var i = 0; i < taskCount; i++)
            {
                if (random.NextDouble() < 0.25)
                {
                    await Task.Delay(random.Next(1, 250));
                }

                tasks.Add(FindEntryNuGetV2());
            }

            await Task.WhenAll(tasks);

            Assert.Equal(1, metadataCalls);
        }
        public async Task FindEntryNuGetV2MultiThread()
        {
            EdmMetadataCache.Clear();

            var tasks = new List <Task>();

            metadataCalls = 0;

            for (var i = 0; i < 10; i++)
            {
                tasks.Add(FindEntryNuGetV2());
            }

            await Task.WhenAll(tasks);

            Assert.Equal(1, metadataCalls);
        }
Ejemplo n.º 3
0
        public async Task MetadataErrorIsNotCached()
        {
            var baseUri  = new Uri("ftp://localhost/");
            var settings = new ODataClientSettings {
                BaseUri = baseUri
            };

            var client = new ODataClient(settings);

            try
            {
                await client.GetMetadataAsync();
            }
            catch (ArgumentException)
            {
                //only HTTP and HTTPS supported
            }
            catch (AggregateException ex)
            {
                ex = ex.Flatten();
                if (ex.InnerExceptions.Count != 1)
                {
                    throw;
                }
                var arg = ex.InnerException as ArgumentException;
                if (arg == null)
                {
                    throw;
                }
                //only HTTP and HTTPS supported
            }

            var wasCached = true;
            var cached    = EdmMetadataCache.GetOrAdd("ftp://localhost/", x =>
            {
                wasCached = false;
                return(null);
            });

            Assert.False(wasCached);
            Assert.Null(cached);
        }
Ejemplo n.º 4
0
        public async Task MetadataIsCached()
        {
            var settings = new ODataClientSettings {
                BaseUri = _serviceUri
            };
            var client = new ODataClient(settings);

            await client.GetMetadataAsync();

            EdmMetadataCache.GetOrAdd(_serviceUri.ToString(), x => throw new Exception("metadata was not cached."));

            settings.BeforeRequest = x => throw new Exception("metadata cache was not used.");
            await client.GetMetadataAsync();

            settings = new ODataClientSettings {
                BaseUri = _serviceUri, BeforeRequest = x => throw new Exception("not reusing settings will defeat metadata cache.")
            };
            client = new ODataClient(settings);
            await client.GetMetadataAsync();
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Clears service metadata cache.
 /// </summary>
 public static void ClearMetadataCache()
 {
     EdmMetadataCache.Clear();
 }