1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-14 17:17:24 +08:00

Improve notification overlay test robustness

Stress testing one of the notification overlay tests by running it 10000
times on repeat has shown that it is susceptible to intermittent
failures due to races between delays and asserts checking the number of
currently progressing notifications and the actual progress update,
which contains a random generation factor.

Replace step sequences checking for notification completion by waiting
and asserting with explicit until steps that don't terminate unless
there are zero progressing notifications.
This commit is contained in:
Bartłomiej Dach 2019-12-26 22:23:25 +01:00
parent 033bb15500
commit fd8c5d7706

View File

@ -67,9 +67,7 @@ namespace osu.Game.Tests.Visual.UserInterface
AddRepeatStep(@"add many simple", sendManyNotifications, 3); AddRepeatStep(@"add many simple", sendManyNotifications, 3);
AddWaitStep("wait some", 5); waitForCompletion();
checkProgressingCount(0);
AddStep(@"progress #3", sendUploadProgress); AddStep(@"progress #3", sendUploadProgress);
@ -77,9 +75,7 @@ namespace osu.Game.Tests.Visual.UserInterface
checkDisplayedCount(33); checkDisplayedCount(33);
AddWaitStep("wait some", 10); waitForCompletion();
checkProgressingCount(0);
} }
[Test] [Test]
@ -109,9 +105,9 @@ namespace osu.Game.Tests.Visual.UserInterface
AddStep(@"background progress #1", sendBackgroundUploadProgress); AddStep(@"background progress #1", sendBackgroundUploadProgress);
AddWaitStep("wait some", 5); checkProgressingCount(1);
checkProgressingCount(0); waitForCompletion();
checkDisplayedCount(2); checkDisplayedCount(2);
@ -190,6 +186,8 @@ namespace osu.Game.Tests.Visual.UserInterface
private void checkProgressingCount(int expected) => AddAssert($"progressing count is {expected}", () => progressingNotifications.Count == expected); private void checkProgressingCount(int expected) => AddAssert($"progressing count is {expected}", () => progressingNotifications.Count == expected);
private void waitForCompletion() => AddUntilStep("wait for notification progress completion", () => progressingNotifications.Count == 0);
private void sendBarrage() private void sendBarrage()
{ {
switch (RNG.Next(0, 4)) switch (RNG.Next(0, 4))