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); }
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); }
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(); }
/// <summary> /// Clears service metadata cache. /// </summary> public static void ClearMetadataCache() { EdmMetadataCache.Clear(); }