Fixing race condition in cache helpers unit tests
This commit is contained in:
parent
12d7093278
commit
3924557b87
|
|
@ -716,13 +716,14 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
var childContent = "some-content";
|
||||
var resetEvent1 = new ManualResetEvent(false);
|
||||
var resetEvent2 = new ManualResetEvent(false);
|
||||
var resetEvent3 = new ManualResetEvent(false);
|
||||
var calls = 0;
|
||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||
|
||||
var tagHelperContext1 = GetTagHelperContext(id + 1);
|
||||
var tagHelperContext2 = GetTagHelperContext(id + 2);
|
||||
|
||||
TagHelperOutput tagHelperOutput = new TagHelperOutput(
|
||||
var tagHelperOutput1 = new TagHelperOutput(
|
||||
"cache",
|
||||
new TagHelperAttributeList(),
|
||||
getChildContentAsync: (useCachedResult, encoder) =>
|
||||
|
|
@ -735,6 +736,19 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||
});
|
||||
|
||||
var tagHelperOutput2 = new TagHelperOutput(
|
||||
"cache",
|
||||
new TagHelperAttributeList(),
|
||||
getChildContentAsync: (useCachedResult, encoder) =>
|
||||
{
|
||||
calls++;
|
||||
resetEvent3.WaitOne(5000);
|
||||
|
||||
var tagHelperContent = new DefaultTagHelperContent();
|
||||
tagHelperContent.SetHtmlContent(childContent);
|
||||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||
});
|
||||
|
||||
var cacheTagHelper1 = new CacheTagHelper(cache, new HtmlTestEncoder())
|
||||
{
|
||||
ViewContext = GetViewContext(),
|
||||
|
|
@ -752,23 +766,29 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
var task1 = Task.Run(async () =>
|
||||
{
|
||||
resetEvent1.WaitOne(5000);
|
||||
await cacheTagHelper1.ProcessAsync(tagHelperContext1, tagHelperOutput);
|
||||
await cacheTagHelper1.ProcessAsync(tagHelperContext1, tagHelperOutput1);
|
||||
resetEvent3.Set();
|
||||
});
|
||||
|
||||
var task2 = Task.Run(async () =>
|
||||
{
|
||||
resetEvent2.WaitOne(5000);
|
||||
await cacheTagHelper2.ProcessAsync(tagHelperContext1, tagHelperOutput);
|
||||
await cacheTagHelper2.ProcessAsync(tagHelperContext1, tagHelperOutput2);
|
||||
});
|
||||
|
||||
resetEvent1.Set();
|
||||
await Task.WhenAll(task1, task2);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(tagHelperOutput.PreContent.GetContent());
|
||||
Assert.Empty(tagHelperOutput.PostContent.GetContent());
|
||||
Assert.True(tagHelperOutput.IsContentModified);
|
||||
Assert.Equal(childContent, tagHelperOutput.Content.GetContent());
|
||||
Assert.Empty(tagHelperOutput1.PreContent.GetContent());
|
||||
Assert.Empty(tagHelperOutput1.PostContent.GetContent());
|
||||
Assert.True(tagHelperOutput1.IsContentModified);
|
||||
Assert.Equal(childContent, tagHelperOutput1.Content.GetContent());
|
||||
|
||||
Assert.Empty(tagHelperOutput2.PreContent.GetContent());
|
||||
Assert.Empty(tagHelperOutput2.PostContent.GetContent());
|
||||
Assert.True(tagHelperOutput2.IsContentModified);
|
||||
Assert.Equal(childContent, tagHelperOutput2.Content.GetContent());
|
||||
|
||||
Assert.Equal(1, calls);
|
||||
}
|
||||
|
|
@ -781,6 +801,7 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
var childContent = "some-content";
|
||||
var resetEvent1 = new ManualResetEvent(false);
|
||||
var resetEvent2 = new ManualResetEvent(false);
|
||||
var resetEvent3 = new ManualResetEvent(false);
|
||||
var calls = 0;
|
||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||
|
||||
|
|
@ -804,6 +825,7 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
getChildContentAsync: (useCachedResult, encoder) =>
|
||||
{
|
||||
calls++;
|
||||
resetEvent3.WaitOne(5000);
|
||||
|
||||
var tagHelperContent = new DefaultTagHelperContent();
|
||||
tagHelperContent.SetHtmlContent(childContent);
|
||||
|
|
@ -828,6 +850,7 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
{
|
||||
resetEvent1.WaitOne(5000);
|
||||
await Assert.ThrowsAsync<Exception>(() => cacheTagHelper1.ProcessAsync(tagHelperContext1, tagHelperOutput1));
|
||||
resetEvent3.Set();
|
||||
});
|
||||
|
||||
var task2 = Task.Run(async () =>
|
||||
|
|
|
|||
|
|
@ -753,6 +753,7 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
var childContent = "some-content";
|
||||
var resetEvent1 = new ManualResetEvent(false);
|
||||
var resetEvent2 = new ManualResetEvent(false);
|
||||
var resetEvent3 = new ManualResetEvent(false);
|
||||
var calls = 0;
|
||||
var formatter = GetFormatter();
|
||||
var storage = GetStorage();
|
||||
|
|
@ -764,7 +765,7 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
var tagHelperContext1 = GetTagHelperContext();
|
||||
var tagHelperContext2 = GetTagHelperContext();
|
||||
|
||||
TagHelperOutput tagHelperOutput = new TagHelperOutput(
|
||||
var tagHelperOutput1 = new TagHelperOutput(
|
||||
"distributed-cache",
|
||||
new TagHelperAttributeList(),
|
||||
getChildContentAsync: (useCachedResult, encoder) =>
|
||||
|
|
@ -777,6 +778,19 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||
});
|
||||
|
||||
var tagHelperOutput2 = new TagHelperOutput(
|
||||
"distributed-cache",
|
||||
new TagHelperAttributeList(),
|
||||
getChildContentAsync: (useCachedResult, encoder) =>
|
||||
{
|
||||
calls++;
|
||||
resetEvent3.WaitOne(5000);
|
||||
|
||||
var tagHelperContent = new DefaultTagHelperContent();
|
||||
tagHelperContent.SetHtmlContent(childContent);
|
||||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||
});
|
||||
|
||||
var cacheTagHelper1 = new DistributedCacheTagHelper(
|
||||
service,
|
||||
new HtmlTestEncoder())
|
||||
|
|
@ -798,23 +812,29 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
|
|||
var task1 = Task.Run(async () =>
|
||||
{
|
||||
resetEvent1.WaitOne(5000);
|
||||
await cacheTagHelper1.ProcessAsync(tagHelperContext1, tagHelperOutput);
|
||||
await cacheTagHelper1.ProcessAsync(tagHelperContext1, tagHelperOutput1);
|
||||
resetEvent3.Set();
|
||||
});
|
||||
|
||||
var task2 = Task.Run(async () =>
|
||||
{
|
||||
resetEvent2.WaitOne(5000);
|
||||
await cacheTagHelper2.ProcessAsync(tagHelperContext1, tagHelperOutput);
|
||||
await cacheTagHelper2.ProcessAsync(tagHelperContext1, tagHelperOutput2);
|
||||
});
|
||||
|
||||
resetEvent1.Set();
|
||||
await Task.WhenAll(task1, task2);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(tagHelperOutput.PreContent.GetContent());
|
||||
Assert.Empty(tagHelperOutput.PostContent.GetContent());
|
||||
Assert.True(tagHelperOutput.IsContentModified);
|
||||
Assert.Equal(childContent, tagHelperOutput.Content.GetContent());
|
||||
Assert.Empty(tagHelperOutput1.PreContent.GetContent());
|
||||
Assert.Empty(tagHelperOutput1.PostContent.GetContent());
|
||||
Assert.True(tagHelperOutput1.IsContentModified);
|
||||
Assert.Equal(childContent, tagHelperOutput1.Content.GetContent());
|
||||
|
||||
Assert.Empty(tagHelperOutput2.PreContent.GetContent());
|
||||
Assert.Empty(tagHelperOutput2.PostContent.GetContent());
|
||||
Assert.True(tagHelperOutput2.IsContentModified);
|
||||
Assert.Equal(childContent, tagHelperOutput2.Content.GetContent());
|
||||
|
||||
Assert.Equal(1, calls);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue