Title: [285184] trunk/Tools
- Revision
- 285184
- Author
- pvol...@apple.com
- Date
- 2021-11-02 14:48:23 -0700 (Tue, 02 Nov 2021)
Log Message
REGRESSION (r268421): TestWebKitAPI.WebKit.PreferenceChanges* tests are flaky failures
https://bugs.webkit.org/show_bug.cgi?id=221848
<rdar://problem/70966379>
Reviewed by Brent Fulgham.
After r268421, the preferences are set asynchronously in the WebContent process, which introduced this flakiness.
This patch addresses this by modifying the flaky tests to loop until the preference value is equal to the expected
value.
* TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
(TEST):
Modified Paths
Diff
Modified: trunk/Tools/ChangeLog (285183 => 285184)
--- trunk/Tools/ChangeLog 2021-11-02 21:25:52 UTC (rev 285183)
+++ trunk/Tools/ChangeLog 2021-11-02 21:48:23 UTC (rev 285184)
@@ -1,3 +1,18 @@
+2021-11-02 Per Arne <pvol...@apple.com>
+
+ REGRESSION (r268421): TestWebKitAPI.WebKit.PreferenceChanges* tests are flaky failures
+ https://bugs.webkit.org/show_bug.cgi?id=221848
+ <rdar://problem/70966379>
+
+ Reviewed by Brent Fulgham.
+
+ After r268421, the preferences are set asynchronously in the WebContent process, which introduced this flakiness.
+ This patch addresses this by modifying the flaky tests to loop until the preference value is equal to the expected
+ value.
+
+ * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
+ (TEST):
+
2021-11-02 Jonathan Bedard <jbed...@apple.com>
[webkitscmpy] Reduce autoinstalls on import
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm (285183 => 285184)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm 2021-11-02 21:25:52 UTC (rev 285183)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm 2021-11-02 21:48:23 UTC (rev 285184)
@@ -63,6 +63,9 @@
CFPreferencesSetAppValue(TEST_KEY(), nil, testDomain); \
}
+static constexpr unsigned preferenceQueryMaxCount = 10;
+static constexpr float preferenceQuerySleepTime = 1;
+
static void waitForPreferenceSynchronization()
{
__block bool didSynchronize = false;
@@ -151,8 +154,6 @@
CLEAR_DEFAULTS();
}
-// FIXME: Re-enable these tests once webkit.org/b/221848 is resolved.
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 110000
TEST(WebKit, GlobalPreferenceChangesUsingDefaultsWrite)
{
CLEAR_DEFAULTS();
@@ -181,7 +182,7 @@
return [webView stringByEvaluatingJavaScript:js].intValue;
};
- EXPECT_EQ(preferenceValue(), 1);
+ preferenceValue();
receivedPreferenceNotification = false;
@@ -189,6 +190,11 @@
TestWebKitAPI::Util::run(&receivedPreferenceNotification);
+ for (unsigned i = 0; i < preferenceQueryMaxCount && preferenceValue() != 2; i++) {
+ TestWebKitAPI::Util::spinRunLoop();
+ TestWebKitAPI::Util::sleep(preferenceQuerySleepTime);
+ }
+
EXPECT_EQ(preferenceValue(), 2);
CLEAR_DEFAULTS();
@@ -221,13 +227,17 @@
NSArray *changedArray = @[@3, @2, @1];
[userDefaults setObject:changedArray forKey:(NSString *)TEST_KEY()];
- auto encodedString = preferenceValue();
- auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
- ASSERT_TRUE(encodedData);
- NSError *err = nil;
- auto object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
- ASSERT_TRUE(!err);
- ASSERT_TRUE(object);
+ RetainPtr<NSObject> object;
+ for (unsigned i = 0; i < preferenceQueryMaxCount && ![object isEqual:changedArray]; i++) {
+ auto encodedString = preferenceValue();
+ auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
+ ASSERT_TRUE(encodedData);
+ NSError *err = nil;
+ object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
+ TestWebKitAPI::Util::spinRunLoop();
+ TestWebKitAPI::Util::sleep(preferenceQuerySleepTime);
+ }
+
ASSERT_TRUE([object isEqual:changedArray]);
CLEAR_DEFAULTS();
@@ -267,13 +277,17 @@
};
[userDefaults setObject:changedDict forKey:(NSString *)TEST_KEY()];
- auto encodedString = preferenceValue();
- auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
- ASSERT_TRUE(encodedData);
- NSError *err = nil;
- auto object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
- ASSERT_TRUE(!err);
- ASSERT_TRUE(object);
+ RetainPtr<NSObject> object;
+ for (unsigned i = 0; i < preferenceQueryMaxCount && ![object isEqual:changedDict]; i++) {
+ auto encodedString = preferenceValue();
+ auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
+ ASSERT_TRUE(encodedData);
+ NSError *err = nil;
+ object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
+ TestWebKitAPI::Util::spinRunLoop();
+ TestWebKitAPI::Util::sleep(preferenceQuerySleepTime);
+ }
+
ASSERT_TRUE([object isEqual:changedDict]);
CLEAR_DEFAULTS();
@@ -306,13 +320,17 @@
NSData *changedData = [NSData dataWithBytes:"abcd" length:4];
[userDefaults setObject:changedData forKey:(NSString *)TEST_KEY()];
- auto encodedString = preferenceValue();
- auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
- ASSERT_TRUE(encodedData);
- NSError *err = nil;
- auto object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
- ASSERT_TRUE(!err);
- ASSERT_TRUE(object);
+ RetainPtr<NSObject> object;
+ for (unsigned i = 0; i < preferenceQueryMaxCount && ![object isEqual:changedData]; i++) {
+ auto encodedString = preferenceValue();
+ auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
+ ASSERT_TRUE(encodedData);
+ NSError *err = nil;
+ object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
+ TestWebKitAPI::Util::spinRunLoop();
+ TestWebKitAPI::Util::sleep(preferenceQuerySleepTime);
+ }
+
ASSERT_TRUE([object isEqual:changedData]);
CLEAR_DEFAULTS();
@@ -345,13 +363,17 @@
NSDate *changedDate = [NSDate dateWithTimeIntervalSinceNow:10];
[userDefaults setObject:changedDate forKey:(NSString *)TEST_KEY()];
- auto encodedString = preferenceValue();
- auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
- ASSERT_TRUE(encodedData);
- NSError *err = nil;
- auto object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
- ASSERT_TRUE(!err);
- ASSERT_TRUE(object);
+ RetainPtr<NSObject> object;
+ for (unsigned i = 0; i < preferenceQueryMaxCount && ![object isEqual:changedDate]; i++) {
+ auto encodedString = preferenceValue();
+ auto encodedData = adoptNS([[NSData alloc] initWithBase64EncodedString:encodedString options:0]);
+ ASSERT_TRUE(encodedData);
+ NSError *err = nil;
+ object = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:encodedData.get() error:&err]);
+ TestWebKitAPI::Util::spinRunLoop();
+ TestWebKitAPI::Util::sleep(preferenceQuerySleepTime);
+ }
+
ASSERT_TRUE([object isEqual:changedDate]);
CLEAR_DEFAULTS();
@@ -382,11 +404,15 @@
[userDefaults setObject:nil forKey:(NSString *)TEST_KEY()];
+ for (unsigned i = 0; i < preferenceQueryMaxCount && preferenceValue(); i++) {
+ TestWebKitAPI::Util::spinRunLoop();
+ TestWebKitAPI::Util::sleep(preferenceQuerySleepTime);
+ }
+
EXPECT_EQ(0, preferenceValue());
CLEAR_DEFAULTS();
}
-#endif // PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 110000
#if ENABLE(CFPREFS_DIRECT_MODE)
static IMP sharedInstanceMethodOriginal = nil;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes