From bbe23165a86e71661b725bc2155a79685f7a7ea7 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 12 Feb 2025 11:01:19 -0800 Subject: Ensure user and group integration tests always clean up after themselves. Fixes 8940 --- .../UtilExtensionUserTests.cs | 310 ++++++++++++--------- 1 file changed, 179 insertions(+), 131 deletions(-) (limited to 'src/test/msi/WixToolsetTest.MsiE2E/UtilExtensionUserTests.cs') diff --git a/src/test/msi/WixToolsetTest.MsiE2E/UtilExtensionUserTests.cs b/src/test/msi/WixToolsetTest.MsiE2E/UtilExtensionUserTests.cs index 08b7cee1..40538eef 100644 --- a/src/test/msi/WixToolsetTest.MsiE2E/UtilExtensionUserTests.cs +++ b/src/test/msi/WixToolsetTest.MsiE2E/UtilExtensionUserTests.cs @@ -15,130 +15,148 @@ namespace WixToolsetTest.MsiE2E [RuntimeFact] public void CanInstallAndUninstallUsers() { - UserVerifier.CreateLocalUser("testName3", "test123!@#"); - var productA = this.CreatePackageInstaller("ProductA"); - - productA.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + try + { + UserVerifier.CreateLocalUser("testName3", "test123!@#"); + var productA = this.CreatePackageInstaller("ProductA"); - // Validate New User Information. - UserVerifier.VerifyUserInformation(String.Empty, "testName1", true, false, false); - UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName1", "Administrators", "Power Users"); + productA.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - UserVerifier.VerifyUserInformation(String.Empty, "testName2", true, true, true); - UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName2", "Power Users"); + // Validate New User Information. + UserVerifier.VerifyUserInformation(String.Empty, "testName1", true, false, false); + UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName1", "Administrators", "Power Users"); - UserVerifier.VerifyUserIsMemberOf("", "testName3", "Power Users"); + UserVerifier.VerifyUserInformation(String.Empty, "testName2", true, true, true); + UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName2", "Power Users"); - productA.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + UserVerifier.VerifyUserIsMemberOf("", "testName3", "Power Users"); - // Verify Users marked as RemoveOnUninstall were removed. - Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Uninstall", "testName1")); - Assert.True(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was removed on Uninstall", "testName2")); + productA.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - // Verify that user added to power users group is removed on uninstall. - UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users"); + // Verify Users marked as RemoveOnUninstall were removed. + Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Uninstall", "testName1")); + Assert.True(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was removed on Uninstall", "testName2")); - // clean up - UserVerifier.DeleteLocalUser("testName1"); - UserVerifier.DeleteLocalUser("testName2"); - UserVerifier.DeleteLocalUser("testName3"); + // Verify that user added to power users group is removed on uninstall. + UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + UserVerifier.DeleteLocalUser("testName2"); + UserVerifier.DeleteLocalUser("testName3"); + } } // Verify the rollback action reverts all Users changes. [RuntimeFact] public void CanRollbackUsers() { - UserVerifier.CreateLocalUser("testName3", "test123!@#", "User3 comment"); - UserVerifier.AddUserToGroup("testName3", "Backup Operators"); - var productFail = this.CreatePackageInstaller("ProductFail"); - - // make sure the user accounts are deleted before we start - UserVerifier.DeleteLocalUser("testName1"); - UserVerifier.DeleteLocalUser("testName2"); - - productFail.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE); - - // Verify added Users were removed on rollback. - Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Rollback", "testName1")); - Assert.False(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was not removed on Rollback", "testName2")); - - // Verify that user added to power users group is removed from power users group on rollback. - UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users"); - // but is not removed from Backup Operators - UserVerifier.VerifyUserIsMemberOf(string.Empty, "testName3", "Backup Operators"); - // and has their original comment set back - UserVerifier.VerifyUserComment(string.Empty, "testName3", "User3 comment"); - - // clean up - UserVerifier.DeleteLocalUser("testName1"); - UserVerifier.DeleteLocalUser("testName2"); - UserVerifier.DeleteLocalUser("testName3"); + try + { + UserVerifier.CreateLocalUser("testName3", "test123!@#", "User3 comment"); + UserVerifier.AddUserToGroup("testName3", "Backup Operators"); + var productFail = this.CreatePackageInstaller("ProductFail"); + + // make sure the user accounts are deleted before we start + UserVerifier.DeleteLocalUser("testName1"); + UserVerifier.DeleteLocalUser("testName2"); + + productFail.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE); + + // Verify added Users were removed on rollback. + Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Rollback", "testName1")); + Assert.False(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was not removed on Rollback", "testName2")); + + // Verify that user added to power users group is removed from power users group on rollback. + UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users"); + // but is not removed from Backup Operators + UserVerifier.VerifyUserIsMemberOf(string.Empty, "testName3", "Backup Operators"); + // and has their original comment set back + UserVerifier.VerifyUserComment(string.Empty, "testName3", "User3 comment"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + UserVerifier.DeleteLocalUser("testName2"); + UserVerifier.DeleteLocalUser("testName3"); + } } - // Verify that command-line parameters are not blocked by repair switches. // Original code signalled repair mode by using "-f ", which silently // terminated the command-line parsing, ignoring any parameters that followed. [RuntimeFact()] public void CanRepairUsersWithCommandLineParameters() { - var arguments = new string[] + try { - "TESTPARAMETER1=testName1", - }; - var productWithCommandLineParameters = this.CreatePackageInstaller("ProductWithCommandLineParameters"); - - // Make sure that the user doesn't exist when we start the test. - UserVerifier.DeleteLocalUser("testName1"); + var arguments = new string[] + { + "TESTPARAMETER1=testName1", + }; + var productWithCommandLineParameters = this.CreatePackageInstaller("ProductWithCommandLineParameters"); - // Install - productWithCommandLineParameters.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, arguments); + // Make sure that the user doesn't exist when we start the test. + UserVerifier.DeleteLocalUser("testName1"); - // Repair - productWithCommandLineParameters.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, arguments); + // Install + productWithCommandLineParameters.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, arguments); - // Clean up - UserVerifier.DeleteLocalUser("testName1"); + // Repair + productWithCommandLineParameters.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, arguments); + } + finally + { + // Clean up + UserVerifier.DeleteLocalUser("testName1"); + } } - // Verify that the users specified in the authoring are created as expected on repair. [RuntimeFact()] public void CanRepairUsers() { - UserVerifier.CreateLocalUser("testName3", "test123!@#"); - var productA = this.CreatePackageInstaller("ProductA"); - - productA.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + try + { + UserVerifier.CreateLocalUser("testName3", "test123!@#"); + var productA = this.CreatePackageInstaller("ProductA"); - // Validate New User Information. - UserVerifier.DeleteLocalUser("testName1"); - UserVerifier.SetUserInformation(String.Empty, "testName2", true, false, false); + productA.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - productA.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS); + // Validate New User Information. + UserVerifier.DeleteLocalUser("testName1"); + UserVerifier.SetUserInformation(String.Empty, "testName2", true, false, false); - // Validate New User Information. - UserVerifier.VerifyUserInformation(String.Empty, "testName1", true, false, false); - UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName1", "Administrators", "Power Users"); + productA.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS); - UserVerifier.VerifyUserInformation(String.Empty, "testName2", true, true, true); - UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName2", "Power Users"); + // Validate New User Information. + UserVerifier.VerifyUserInformation(String.Empty, "testName1", true, false, false); + UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName1", "Administrators", "Power Users"); - UserVerifier.VerifyUserIsMemberOf("", "testName3", "Power Users"); + UserVerifier.VerifyUserInformation(String.Empty, "testName2", true, true, true); + UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName2", "Power Users"); - productA.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + UserVerifier.VerifyUserIsMemberOf("", "testName3", "Power Users"); - // Verify Users marked as RemoveOnUninstall were removed. - Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Uninstall", "testName1")); - Assert.True(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was removed on Uninstall", "testName2")); + productA.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - // Verify that user added to power users group is removed on uninstall. - UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users"); + // Verify Users marked as RemoveOnUninstall were removed. + Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Uninstall", "testName1")); + Assert.True(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was removed on Uninstall", "testName2")); - // clean up - UserVerifier.DeleteLocalUser("testName1"); - UserVerifier.DeleteLocalUser("testName2"); - UserVerifier.DeleteLocalUser("testName3"); + // Verify that user added to power users group is removed on uninstall. + UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + UserVerifier.DeleteLocalUser("testName2"); + UserVerifier.DeleteLocalUser("testName3"); + } } // Verify that Installation fails if FailIfExists is set. @@ -191,93 +209,123 @@ namespace WixToolsetTest.MsiE2E [RuntimeFact] public void CanCreateNewUserWithComment() { - var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment"); - - productNewUserWithComment.InstallProduct(); - UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + try + { + var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment"); - // clean up - UserVerifier.DeleteLocalUser("testName1"); + productNewUserWithComment.InstallProduct(); + UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + } } // Verify that a comment can be added to an existing user [RuntimeFact] public void CanAddCommentToExistingUser() { - UserVerifier.CreateLocalUser("testName1", "test123!@#"); - var productAddCommentToExistingUser = this.CreatePackageInstaller("ProductAddCommentToExistingUser"); - - productAddCommentToExistingUser.InstallProduct(); + try + { + UserVerifier.CreateLocalUser("testName1", "test123!@#"); + var productAddCommentToExistingUser = this.CreatePackageInstaller("ProductAddCommentToExistingUser"); - UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + productAddCommentToExistingUser.InstallProduct(); - // clean up - UserVerifier.DeleteLocalUser("testName1"); + UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + } } // Verify that a comment can be repaired for a new user [RuntimeFact] public void CanRepairCommentOfNewUser() { - var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment"); - - productNewUserWithComment.InstallProduct(); - UserVerifier.SetUserComment(String.Empty, "testName1", ""); + try + { + var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment"); - productNewUserWithComment.RepairProduct(); - UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + productNewUserWithComment.InstallProduct(); + UserVerifier.SetUserComment(String.Empty, "testName1", ""); - // clean up - UserVerifier.DeleteLocalUser("testName1"); + productNewUserWithComment.RepairProduct(); + UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + } } // Verify that a comment can be changed for an existing user [RuntimeFact] public void CanChangeCommentOfExistingUser() { - UserVerifier.CreateLocalUser("testName1", "test123!@#"); - UserVerifier.SetUserComment(String.Empty, "testName1", "initialTestComment1"); - var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment"); - - productNewUserWithComment.InstallProduct(); - UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + try + { + UserVerifier.CreateLocalUser("testName1", "test123!@#"); + UserVerifier.SetUserComment(String.Empty, "testName1", "initialTestComment1"); + var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment"); - // clean up - UserVerifier.DeleteLocalUser("testName1"); + productNewUserWithComment.InstallProduct(); + UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + } } // Verify that a comment can be rolled back for an existing user [RuntimeFact] public void CanRollbackCommentOfExistingUser() { - UserVerifier.CreateLocalUser("testName1", "test123!@#"); - UserVerifier.SetUserComment(String.Empty, "testName1", "initialTestComment1"); - var productCommentFail = this.CreatePackageInstaller("ProductCommentFail"); - - productCommentFail.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE); + try + { + UserVerifier.CreateLocalUser("testName1", "test123!@#"); + UserVerifier.SetUserComment(String.Empty, "testName1", "initialTestComment1"); + var productCommentFail = this.CreatePackageInstaller("ProductCommentFail"); - // Verify that comment change was rolled back. - UserVerifier.VerifyUserComment(String.Empty, "testName1", "initialTestComment1"); + productCommentFail.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE); - // clean up - UserVerifier.DeleteLocalUser("testName1"); + // Verify that comment change was rolled back. + UserVerifier.VerifyUserComment(String.Empty, "testName1", "initialTestComment1"); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + } } // Verify that a comment can be deleted for an existing user [RuntimeFact] public void CanDeleteCommentOfExistingUser() { - UserVerifier.CreateLocalUser("testName1", "test123!@#"); - UserVerifier.SetUserComment(String.Empty, "testName1", "testComment1"); - var productCommentDelete = this.CreatePackageInstaller("ProductCommentDelete"); - - productCommentDelete.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + try + { + UserVerifier.CreateLocalUser("testName1", "test123!@#"); + UserVerifier.SetUserComment(String.Empty, "testName1", "testComment1"); + var productCommentDelete = this.CreatePackageInstaller("ProductCommentDelete"); - // Verify that comment was removed. - UserVerifier.VerifyUserComment(String.Empty, "testName1", ""); + productCommentDelete.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - // clean up - UserVerifier.DeleteLocalUser("testName1"); + // Verify that comment was removed. + UserVerifier.VerifyUserComment(String.Empty, "testName1", ""); + } + finally + { + // clean up + UserVerifier.DeleteLocalUser("testName1"); + } } } } -- cgit v1.2.3-55-g6feb