Zebediah Figura : kernel32/tests: Handle notifications on the parent dir more gracefully.

Alexandre Julliard julliard at winehq.org
Tue Feb 20 16:44:52 CST 2018


Module: wine
Branch: master
Commit: 50ca65d17270f3d9b308c7603e30351aa9ce2fcf
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=50ca65d17270f3d9b308c7603e30351aa9ce2fcf

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Mon Feb 19 16:10:18 2018 -0600

kernel32/tests: Handle notifications on the parent dir more gracefully.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/change.c | 49 +++++++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 17 deletions(-)

diff --git a/dlls/kernel32/tests/change.c b/dlls/kernel32/tests/change.c
index 4accad0..f4abad4 100644
--- a/dlls/kernel32/tests/change.c
+++ b/dlls/kernel32/tests/change.c
@@ -383,6 +383,7 @@ static void test_readdirectorychanges(void)
     static const WCHAR szHoo[] = { '\\','h','o','o',0 };
     static const WCHAR szGa[] = { '\\','h','o','o','\\','g','a',0 };
     PFILE_NOTIFY_INFORMATION pfni;
+    BOOL got_subdir_change = FALSE;
 
     if (!pReadDirectoryChangesW)
     {
@@ -550,26 +551,40 @@ static void test_readdirectorychanges(void)
     r = CreateDirectoryW( subsubdir, NULL );
     ok( r == TRUE, "failed to create directory\n");
 
-    r = WaitForSingleObject( ov.hEvent, 1000 );
-    ok( r == WAIT_OBJECT_0, "should be ready\n" );
+    while (1)
+    {
+        r = WaitForSingleObject( ov.hEvent, 1000 );
+        ok(r == WAIT_OBJECT_0, "should be ready\n" );
+        if (r == WAIT_TIMEOUT) break;
 
-    ok( (NTSTATUS)ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n");
-    ok( ov.InternalHigh == 0x18 || ov.InternalHigh == 0x12 + 0x18,
-        "ov.InternalHigh wrong %lx\n", ov.InternalHigh);
+        ok((NTSTATUS) ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n");
 
-    pfni = (PFILE_NOTIFY_INFORMATION) buffer;
-    if (pfni->NextEntryOffset)  /* we may get a modified event on the parent dir */
-    {
-        ok( pfni->NextEntryOffset == 0x12, "offset wrong %x\n", pfni->NextEntryOffset );
-        ok( pfni->Action == FILE_ACTION_MODIFIED, "action wrong %d\n", pfni->Action );
-        ok( pfni->FileNameLength == 3*sizeof(WCHAR), "len wrong\n" );
-        ok( !memcmp(pfni->FileName,&szGa[1],3*sizeof(WCHAR)), "name wrong\n");
-        pfni = (PFILE_NOTIFY_INFORMATION)((char *)pfni + pfni->NextEntryOffset);
+        pfni = (PFILE_NOTIFY_INFORMATION) buffer;
+        while (1)
+        {
+            /* We might get one or more modified events on the parent dir */
+            if (pfni->Action == FILE_ACTION_MODIFIED)
+            {
+                ok(pfni->FileNameLength == 3 * sizeof(WCHAR), "len wrong\n" );
+                ok(!memcmp(pfni->FileName, &szGa[1], 3 * sizeof(WCHAR)), "name wrong\n");
+            }
+            else
+            {
+                ok(pfni->Action == FILE_ACTION_ADDED, "action wrong\n");
+                ok(pfni->FileNameLength == 6 * sizeof(WCHAR), "len wrong\n" );
+                ok(!memcmp(pfni->FileName, &szGa[1], 6 * sizeof(WCHAR)), "name wrong\n");
+                got_subdir_change = TRUE;
+            }
+            if (!pfni->NextEntryOffset) break;
+            pfni = (PFILE_NOTIFY_INFORMATION)((char *)pfni + pfni->NextEntryOffset);
+        }
+
+        if (got_subdir_change) break;
+
+        r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,filter,NULL,&ov,NULL);
+        ok(r==TRUE, "should return true\n");
     }
-    ok( pfni->NextEntryOffset == 0, "offset wrong\n" );
-    ok( pfni->Action == FILE_ACTION_ADDED, "action wrong\n" );
-    ok( pfni->FileNameLength == 6*sizeof(WCHAR), "len wrong\n" );
-    ok( !memcmp(pfni->FileName,&szGa[1],6*sizeof(WCHAR)), "name wrong\n" );
+    ok(got_subdir_change, "didn't get subdir change\n");
 
     r = RemoveDirectoryW( subsubdir );
     ok( r == TRUE, "failed to remove directory\n");




More information about the wine-cvs mailing list