Dan Kegel : msi/tests: Add test to verify we can create 4000 msi handles.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Aug 28 12:35:31 CDT 2006


Module: wine
Branch: master
Commit: 98ec9399c4ac33b84b6ff88338722e83f379d427
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=98ec9399c4ac33b84b6ff88338722e83f379d427

Author: Dan Kegel <dank at kegel.com>
Date:   Mon Aug 28 07:41:55 2006 -0700

msi/tests: Add test to verify we can create 4000 msi handles.

---

 dlls/msi/tests/db.c |   44 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 781c6a5..0a5b230 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -1356,6 +1356,49 @@ static void test_markers(void)
     DeleteFileA(msifile);
 }
 
+#define MY_NVIEWS 4000    /* Largest installer I've seen uses < 2k */
+static void test_handle_limit(void)
+{
+    int i;
+    MSIHANDLE hdb;
+    MSIHANDLE hviews[MY_NVIEWS];
+    UINT r;
+
+    /* create an empty db */
+    hdb = create_db();
+    ok( hdb, "failed to create db\n");
+
+    memset(hviews, 0, sizeof(hviews));
+
+    for (i=0; i<MY_NVIEWS; i++) {
+        static char szQueryBuf[256] = "SELECT * from `_Tables`";
+        hviews[i] = 0xdeadbeeb;
+        r = MsiDatabaseOpenView(hdb, szQueryBuf, &hviews[i]);
+        ok( r == ERROR_SUCCESS, "failed to open query %d\n", i);
+        ok( hviews[i] != 0xdeadbeeb, "no handle set\n");
+        if (i < 0xef)
+            ok( hviews[i] != 0, "%d'th handle is NULL\n", i);
+        else
+            todo_wine {
+                ok( hviews[i] != 0, "%d'th handle is NULL\n", i);
+            }
+        if (!hviews[i])
+            break;
+        ok( (i == 0 || (hviews[i] != hviews[i-1])),
+            "got handle %p twice\n", (void *) hviews[i] );
+    }
+
+    for (i=0; i<MY_NVIEWS; i++) {
+        if (hviews[i] != 0 && hviews[i] != 0xdeadbeeb) {
+            r = MsiCloseHandle(hviews[i]);
+            ok( r == ERROR_SUCCESS, "failed to close view handle %d\n", i);
+        }
+    }
+
+    r = MsiCloseHandle(hdb);
+    ok( r == ERROR_SUCCESS, "failed to close database\n");
+}
+
 START_TEST(db)
 {
     test_msidatabase();
@@ -1371,4 +1414,5 @@ START_TEST(db)
     test_where();
     test_msiimport();
     test_markers();
+    test_handle_limit();
 }




More information about the wine-cvs mailing list