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

Reply via email to