Module: wine Branch: master Commit: 98ec9399c4ac33b84b6ff88338722e83f379d427 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=98ec9399c4ac33b84b6ff883...
Author: Dan Kegel dank@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(); }