public Task GetSelectorsGivesSelectorsInReverseLruOrderAfterGet() { var context = new Context(Logger); var weakFingerprint = Fingerprint.Random(); var selector1 = Selector.Random(); var selector2 = Selector.Random(); var strongFingerprint1 = new StrongFingerprint(weakFingerprint, selector1); var strongFingerprint2 = new StrongFingerprint(weakFingerprint, selector2); var contentHashListWithDeterminism1 = new ContentHashListWithDeterminism(ContentHashList.Random(), CacheDeterminism.None); var contentHashListWithDeterminism2 = new ContentHashListWithDeterminism(ContentHashList.Random(), CacheDeterminism.None); return(RunTestAsync(context, async(store, session) => { await session.AddOrGetContentHashListAsync(context, strongFingerprint1, contentHashListWithDeterminism1, Token).ShouldBeSuccess(); _clock.Increment(); await session.AddOrGetContentHashListAsync(context, strongFingerprint2, contentHashListWithDeterminism2, Token).ShouldBeSuccess(); _clock.Increment(); await session.GetContentHashListAsync(context, strongFingerprint1, Token).ShouldBeSuccess(); _clock.Increment(); List <GetSelectorResult> getSelectorResults = await session.GetSelectors(context, weakFingerprint, Token).ToListAsync(); Assert.Equal(2, getSelectorResults.Count); GetSelectorResult r1 = getSelectorResults[0]; Assert.True(r1.Succeeded); Assert.True(r1.Selector == selector1); GetSelectorResult r2 = getSelectorResults[1]; Assert.True(r2.Succeeded); Assert.True(r2.Selector == selector2); })); }
public Task GetSelectorsGivesSelectors() { var weakFingerprint = Fingerprint.Random(); var selector1 = Selector.Random(); var selector2 = Selector.Random(); var strongFingerprint1 = new StrongFingerprint(weakFingerprint, selector1); var strongFingerprint2 = new StrongFingerprint(weakFingerprint, selector2); var contentHashListWithDeterminism1 = new ContentHashListWithDeterminism(ContentHashList.Random(), CacheDeterminism.None); var contentHashListWithDeterminism2 = new ContentHashListWithDeterminism(ContentHashList.Random(), CacheDeterminism.None); return(RunTest((context, contentLocationDatabase) => { contentLocationDatabase.AddOrGetContentHashList( context, strongFingerprint1, contentHashListWithDeterminism1).ShouldBeSuccess(); contentLocationDatabase.AddOrGetContentHashList( context, strongFingerprint2, contentHashListWithDeterminism2).ShouldBeSuccess(); List <GetSelectorResult> getSelectorResults = contentLocationDatabase.GetSelectors(context, weakFingerprint).ToList(); Assert.Equal(2, getSelectorResults.Count); GetSelectorResult r1 = getSelectorResults[0].ShouldBeSuccess(); Assert.True(r1.Selector == selector1 || r1.Selector == selector2); GetSelectorResult r2 = getSelectorResults[1].ShouldBeSuccess(); Assert.True(r2.Selector == selector1 || r2.Selector == selector2); })); }
public Task PreferSharedUrgencyHintIsRespected() { var context = new Context(Logger); var weakFingerprint = Fingerprint.Random(); var selector1 = Selector.Random(); var selector2 = Selector.Random(); var strongFingerprint1 = new StrongFingerprint(weakFingerprint, selector1); var strongFingerprint2 = new StrongFingerprint(weakFingerprint, selector2); var contentHashListWithDeterminism1 = new ContentHashListWithDeterminism(ContentHashList.Random(), CacheDeterminism.None); var contentHashListWithDeterminism2 = new ContentHashListWithDeterminism(ContentHashList.Random(), CacheDeterminism.None); return(RunTestAsync(context, async session => { await session.AddOrGetContentHashListAsync(context, strongFingerprint1, contentHashListWithDeterminism1, Token).ShouldBeSuccess(); _clock.Increment(); await session.AddOrGetContentHashListAsync(context, strongFingerprint2, contentHashListWithDeterminism2, Token).ShouldBeSuccess(); _clock.Increment(); var contentHashList = session.GetContentHashListAsync(context, strongFingerprint1, Token, UrgencyHint.PreferShared); List <GetSelectorResult> getSelectorResults = await session.GetSelectors(context, weakFingerprint, Token).ToListAsync(CancellationToken.None); Assert.Equal(2, getSelectorResults.Count); GetSelectorResult r1 = getSelectorResults[0]; Assert.True(r1.Succeeded); Assert.True(r1.Selector == selector2); GetSelectorResult r2 = getSelectorResults[1]; Assert.True(r2.Succeeded); Assert.True(r2.Selector == selector1); })); }
public void SelectorResultErrorFromMemoization() { GetSelectorResult selectorResult = new GetSelectorResult(ErrorMessage); Possible <BuildXLStrongFingerprint, Failure> maybeStrongFingerprint = selectorResult.FromMemoization(RandomHelpers.CreateRandomWeakFingerprintHash(), CacheId); Assert.False(maybeStrongFingerprint.Succeeded); Assert.Contains(ErrorMessage, maybeStrongFingerprint.Failure.Describe()); }
public void SelectorResultSuccessFromMemoization() { WeakFingerprintHash weak = RandomHelpers.CreateRandomWeakFingerprintHash(); GetSelectorResult selectorResult = new GetSelectorResult(Selector.Random(HashType.Vso0, FingerprintUtilities.FingerprintLength)); Possible <BuildXLStrongFingerprint, Failure> maybeStrongFingerprint = selectorResult.FromMemoization(weak, CacheId); Assert.True(maybeStrongFingerprint.Succeeded); Assert.Equal(weak, maybeStrongFingerprint.Result.WeakFingerprint); Assert.Equal(selectorResult.Selector.ContentHash.FromMemoization(), maybeStrongFingerprint.Result.CasElement); Assert.Equal(selectorResult.Selector.Output, maybeStrongFingerprint.Result.HashElement.ToArray()); Assert.Equal(CacheId, maybeStrongFingerprint.Result.CacheId); }
private static async Task GetSelectors(Context context, IMemoizationSession session, IList <Fingerprint> weakFingerprints) { foreach (var weakFingerprint in weakFingerprints) { var getSelectorsEnumerator = session.GetSelectors(context, weakFingerprint, Token); Async::System.Collections.Generic.IAsyncEnumerator <GetSelectorResult> enumerator = getSelectorsEnumerator.GetEnumerator(); while (await enumerator.MoveNext(CancellationToken.None)) { GetSelectorResult result = enumerator.Current; result.Succeeded.Should().BeTrue(); } } }
public Task TestGetOrAddSelectorsError() { return(RunTest(async(context, metadataCache, redisDb) => { var weakFp = Fingerprint.Random(); var errorResult = new GetSelectorResult("Error"); Task <Result <Selector[]> > failure = Task.FromResult(Result.FromError <Selector[]>(errorResult)); var selectorResults = await metadataCache.GetOrAddSelectorsAsync(context, weakFp, fp => failure).ShouldBeError(); Assert.Equal(errorResult.ErrorMessage, selectorResults.ErrorMessage); // Check Redis data Assert.Equal(0, redisDb.DbSet.Keys.Count); })); }