Hans Leidekker : msi: Test the contents of some of the system tables before and after patching.
Alexandre Julliard
julliard at winehq.org
Thu Apr 29 14:45:05 CDT 2010
Module: wine
Branch: master
Commit: 73f1294431393c3029590fd590be4994ea6f326b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=73f1294431393c3029590fd590be4994ea6f326b
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Apr 29 09:38:36 2010 +0200
msi: Test the contents of some of the system tables before and after patching.
---
dlls/msi/tests/patch.c | 170 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 170 insertions(+), 0 deletions(-)
diff --git a/dlls/msi/tests/patch.c b/dlls/msi/tests/patch.c
index ff6d399..369254c 100644
--- a/dlls/msi/tests/patch.c
+++ b/dlls/msi/tests/patch.c
@@ -789,6 +789,175 @@ static void test_MsiOpenDatabase( void )
DeleteFileA( mspfile );
}
+static UINT find_entry( MSIHANDLE hdb, const char *table, const char *entry )
+{
+ static char fmt[] = "SELECT * FROM `%s` WHERE `Name` = '%s'";
+ char query[0x100];
+ UINT r;
+ MSIHANDLE hview, hrec;
+
+ sprintf( query, fmt, table, entry );
+ r = MsiDatabaseOpenView( hdb, query, &hview );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiViewExecute( hview, 0 );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiViewFetch( hview, &hrec );
+ MsiViewClose( hview );
+ MsiCloseHandle( hview );
+ MsiCloseHandle( hrec );
+ return r;
+}
+
+static void test_system_tables( void )
+{
+ UINT r;
+ const char *query;
+ MSIHANDLE hproduct, hdb, hview, hrec;
+
+ if (!pMsiApplyPatchA)
+ {
+ win_skip("MsiApplyPatchA is not available\n");
+ return;
+ }
+
+ CreateDirectoryA( "msitest", NULL );
+ create_file( "msitest\\patch.txt", 1000 );
+
+ create_database( msifile, tables, sizeof(tables) / sizeof(struct msi_table) );
+ create_patch( mspfile );
+
+ MsiSetInternalUI( INSTALLUILEVEL_NONE, NULL );
+
+ r = MsiInstallProductA( msifile, NULL );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiOpenProductA( "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}", &hproduct );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ hdb = MsiGetActiveDatabase( hproduct );
+ ok( hdb, "failed to get database handle\n" );
+
+ r = find_entry( hdb, "_Streams", "\5SummaryInformation" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ query = "SELECT * FROM `_Storages`";
+ r = MsiDatabaseOpenView( hdb, query, &hview );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiViewExecute( hview, 0 );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiViewFetch( hview, &hrec );
+ ok( r == ERROR_NO_MORE_ITEMS, "expected ERROR_NO_MORE_ITEMS, got %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Directory" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "File" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Component" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Feature" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "FeatureComponents" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Property" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "InstallExecuteSequence" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Media" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "_Property" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ MsiCloseHandle( hdb );
+ MsiCloseHandle( hproduct );
+
+ r = MsiApplyPatchA( mspfile, NULL, INSTALLTYPE_DEFAULT, NULL );
+ ok( r == ERROR_SUCCESS || broken( r == ERROR_PATCH_PACKAGE_INVALID ), /* version 2.0 */
+ "expected ERROR_SUCCESS, got %u\n", r );
+
+ if (r == ERROR_PATCH_PACKAGE_INVALID)
+ {
+ win_skip("Windows Installer < 3.0 detected\n");
+ return;
+ }
+
+ r = MsiOpenProductA( "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}", &hproduct );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ hdb = MsiGetActiveDatabase( hproduct );
+ ok( hdb, "failed to get database handle\n" );
+
+ r = find_entry( hdb, "_Streams", "\5SummaryInformation" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ query = "SELECT * FROM `_Storages`";
+ r = MsiDatabaseOpenView( hdb, query, &hview );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiViewExecute( hview, 0 );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ r = MsiViewFetch( hview, &hrec );
+ ok( r == ERROR_NO_MORE_ITEMS, "expected ERROR_NO_MORE_ITEMS, got %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Directory" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "File" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Component" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Feature" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "FeatureComponents" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Property" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "InstallExecuteSequence" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Media" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "_Property" );
+ ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "MsiPatchHeaders" );
+ todo_wine ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "Patch" );
+ todo_wine ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ r = find_entry( hdb, "_Tables", "PatchPackage" );
+ todo_wine ok( r == ERROR_SUCCESS, "failed to find entry %u\n", r );
+
+ MsiCloseHandle( hdb );
+ MsiCloseHandle( hproduct );
+
+ r = MsiInstallProductA( msifile, "REMOVE=ALL" );
+ ok( r == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", r );
+
+ DeleteFileA( msifile );
+ DeleteFileA( mspfile );
+ RemoveDirectoryA( "msitest" );
+}
+
START_TEST(patch)
{
DWORD len;
@@ -810,6 +979,7 @@ START_TEST(patch)
test_simple_patch();
test_MsiOpenDatabase();
+ test_system_tables();
SetCurrentDirectoryA( prev_path );
}
More information about the wine-cvs
mailing list