using System.Linq;
|
using System.Threading.Tasks;
|
using NUnit.Framework;
|
using OpenTap.EngineUnitTestUtils;
|
|
|
namespace OpenTap.UnitTests;
|
|
[TestFixture]
|
public class PluginSearcherThreadSafeTest
|
{
|
[TestCase(1)]
|
[TestCase(5)]
|
[TestCase(10)]
|
[TestCase(20)]
|
[TestCase(40)]
|
public void TestSearchAsync(int searchCount)
|
{
|
using var session = Session.Create(SessionOptions.RedirectLogging);
|
var listener = new TestTraceListener();
|
Log.AddListener(listener);
|
var tasks = Enumerable.Range(0, searchCount).Select(_ => PluginManager.SearchAsync()).ToArray();
|
Task.WaitAll(tasks);
|
Assert.That(tasks.All(t => t.IsCompletedSuccessfully));
|
Assert.That(listener.ErrorMessage, Is.Empty);
|
}
|
|
[TestCase(1)]
|
[TestCase(5)]
|
[TestCase(10)]
|
[TestCase(20)]
|
[TestCase(40)]
|
public void TestSearchSync(int searchCount)
|
{
|
using var session = Session.Create(SessionOptions.RedirectLogging);
|
var listener = new TestTraceListener();
|
Log.AddListener(listener);
|
var tasks = Enumerable.Range(0, searchCount).Select(_ => TapThread.StartAwaitable(() => PluginManager.Search())).ToArray();
|
Task.WaitAll(tasks);
|
Assert.That(tasks.All(t => t.IsCompletedSuccessfully));
|
Assert.That(listener.ErrorMessage, Is.Empty);
|
}
|
|
[TestCase(2)]
|
[TestCase(6)]
|
[TestCase(10)]
|
[TestCase(20)]
|
[TestCase(40)]
|
public void TestSearchMixed(int searchCount)
|
{
|
using var session = Session.Create(SessionOptions.RedirectLogging);
|
var listener = new TestTraceListener();
|
Log.AddListener(listener);
|
var tasks = Enumerable.Range(0, searchCount / 2).Select(_ => PluginManager.SearchAsync())
|
.Concat(Enumerable.Range(0, searchCount / 2).Select(_ => TapThread.StartAwaitable(() => PluginManager.Search()))).ToArray();
|
Task.WaitAll(tasks);
|
Assert.That(tasks.All(t => t.IsCompletedSuccessfully));
|
Assert.That(listener.ErrorMessage, Is.Empty);
|
}
|
}
|