main
cs 283 lines 12.3 KB
Raw
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 namespace WixToolsetTest.MsiE2E
4 {
5 using System;
6 using WixTestTools;
7 using Xunit;
8 using Xunit.Abstractions;
9
10 public class UtilExtensionUserTests : MsiE2ETests
11 {
12 public UtilExtensionUserTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
13
14 // Verify that the users specified in the authoring are created as expected.
15 [RuntimeFact]
16 public void CanInstallAndUninstallUsers()
17 {
18 UserVerifier.CreateLocalUser("testName3", "test123!@#");
19 var productA = this.CreatePackageInstaller("ProductA");
20
21 productA.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
22
23 // Validate New User Information.
24 UserVerifier.VerifyUserInformation(String.Empty, "testName1", true, false, false);
25 UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName1", "Administrators", "Power Users");
26
27 UserVerifier.VerifyUserInformation(String.Empty, "testName2", true, true, true);
28 UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName2", "Power Users");
29
30 UserVerifier.VerifyUserIsMemberOf("", "testName3", "Power Users");
31
32 productA.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
33
34 // Verify Users marked as RemoveOnUninstall were removed.
35 Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Uninstall", "testName1"));
36 Assert.True(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was removed on Uninstall", "testName2"));
37
38 // Verify that user added to power users group is removed on uninstall.
39 UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users");
40
41 // clean up
42 UserVerifier.DeleteLocalUser("testName1");
43 UserVerifier.DeleteLocalUser("testName2");
44 UserVerifier.DeleteLocalUser("testName3");
45 }
46
47 // Verify the rollback action reverts all Users changes.
48 [RuntimeFact]
49 public void CanRollbackUsers()
50 {
51 UserVerifier.CreateLocalUser("testName3", "test123!@#", "User3 comment");
52 UserVerifier.AddUserToGroup("testName3", "Backup Operators");
53 var productFail = this.CreatePackageInstaller("ProductFail");
54
55 // make sure the user accounts are deleted before we start
56 UserVerifier.DeleteLocalUser("testName1");
57 UserVerifier.DeleteLocalUser("testName2");
58
59 productFail.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
60
61 // Verify added Users were removed on rollback.
62 Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Rollback", "testName1"));
63 Assert.False(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was not removed on Rollback", "testName2"));
64
65 // Verify that user added to power users group is removed from power users group on rollback.
66 UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users");
67 // but is not removed from Backup Operators
68 UserVerifier.VerifyUserIsMemberOf(string.Empty, "testName3", "Backup Operators");
69 // and has their original comment set back
70 UserVerifier.VerifyUserComment(string.Empty, "testName3", "User3 comment");
71
72 // clean up
73 UserVerifier.DeleteLocalUser("testName1");
74 UserVerifier.DeleteLocalUser("testName2");
75 UserVerifier.DeleteLocalUser("testName3");
76 }
77
78
79 // Verify that command-line parameters are not blocked by repair switches.
80 // Original code signalled repair mode by using "-f ", which silently
81 // terminated the command-line parsing, ignoring any parameters that followed.
82 [RuntimeFact()]
83 public void CanRepairUsersWithCommandLineParameters()
84 {
85 var arguments = new string[]
86 {
87 "TESTPARAMETER1=testName1",
88 };
89 var productWithCommandLineParameters = this.CreatePackageInstaller("ProductWithCommandLineParameters");
90
91 // Make sure that the user doesn't exist when we start the test.
92 UserVerifier.DeleteLocalUser("testName1");
93
94 // Install
95 productWithCommandLineParameters.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, arguments);
96
97 // Repair
98 productWithCommandLineParameters.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, arguments);
99
100 // Clean up
101 UserVerifier.DeleteLocalUser("testName1");
102 }
103
104
105 // Verify that the users specified in the authoring are created as expected on repair.
106 [RuntimeFact()]
107 public void CanRepairUsers()
108 {
109 UserVerifier.CreateLocalUser("testName3", "test123!@#");
110 var productA = this.CreatePackageInstaller("ProductA");
111
112 productA.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
113
114 // Validate New User Information.
115 UserVerifier.DeleteLocalUser("testName1");
116 UserVerifier.SetUserInformation(String.Empty, "testName2", true, false, false);
117
118 productA.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS);
119
120 // Validate New User Information.
121 UserVerifier.VerifyUserInformation(String.Empty, "testName1", true, false, false);
122 UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName1", "Administrators", "Power Users");
123
124 UserVerifier.VerifyUserInformation(String.Empty, "testName2", true, true, true);
125 UserVerifier.VerifyUserIsMemberOf(String.Empty, "testName2", "Power Users");
126
127 UserVerifier.VerifyUserIsMemberOf("", "testName3", "Power Users");
128
129 productA.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
130
131 // Verify Users marked as RemoveOnUninstall were removed.
132 Assert.False(UserVerifier.UserExists(String.Empty, "testName1"), String.Format("User '{0}' was not removed on Uninstall", "testName1"));
133 Assert.True(UserVerifier.UserExists(String.Empty, "testName2"), String.Format("User '{0}' was removed on Uninstall", "testName2"));
134
135 // Verify that user added to power users group is removed on uninstall.
136 UserVerifier.VerifyUserIsNotMemberOf("", "testName3", "Power Users");
137
138 // clean up
139 UserVerifier.DeleteLocalUser("testName1");
140 UserVerifier.DeleteLocalUser("testName2");
141 UserVerifier.DeleteLocalUser("testName3");
142 }
143
144 // Verify that Installation fails if FailIfExists is set.
145 [RuntimeFact]
146 public void FailsIfUserExists()
147 {
148 var productFailIfExists = this.CreatePackageInstaller("ProductFailIfExists");
149
150 // Create 'existinguser'
151 UserVerifier.CreateLocalUser("existinguser", "test123!@#");
152
153 try
154 {
155 productFailIfExists.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
156
157 // Verify User still exists.
158 bool userExists = UserVerifier.UserExists(String.Empty, "existinguser");
159
160 Assert.True(userExists, String.Format("User '{0}' was removed on Rollback", "existinguser"));
161 }
162 finally
163 {
164 // clean up
165 UserVerifier.DeleteLocalUser("existinguser");
166 }
167 }
168
169 // Verify that a user cannot be created on a domain on which you dont have create user permission.
170 [RuntimeFact]
171 public void FailsIfRestrictedDomain()
172 {
173 var productRestrictedDomain = this.CreatePackageInstaller("ProductRestrictedDomain");
174
175 string logFile = productRestrictedDomain.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE, "TEMPDOMAIN=DOESNOTEXIST");
176
177 // Verify expected error message in the log file
178 Assert.True(LogVerifier.MessageInLogFile(logFile, "ConfigureUsers: Failed to check existence of domain: DOESNOTEXIST, user: testName1 (error code 0x800706ba) - continuing"));
179 }
180
181 // Verify that adding a user to a non-existent group does not fail the install when non-vital.
182 [RuntimeFact]
183 public void IgnoresMissingGroupWhenNonVital()
184 {
185 var productNonVitalGroup = this.CreatePackageInstaller("ProductNonVitalUserGroup");
186
187 productNonVitalGroup.InstallProduct();
188 }
189
190 // Verify that a user can be created with a user comment
191 [RuntimeFact]
192 public void CanCreateNewUserWithComment()
193 {
194 var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment");
195
196 productNewUserWithComment.InstallProduct();
197 UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1");
198
199 // clean up
200 UserVerifier.DeleteLocalUser("testName1");
201 }
202
203 // Verify that a comment can be added to an existing user
204 [RuntimeFact]
205 public void CanAddCommentToExistingUser()
206 {
207 UserVerifier.CreateLocalUser("testName1", "test123!@#");
208 var productAddCommentToExistingUser = this.CreatePackageInstaller("ProductAddCommentToExistingUser");
209
210 productAddCommentToExistingUser.InstallProduct();
211
212 UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1");
213
214 // clean up
215 UserVerifier.DeleteLocalUser("testName1");
216 }
217
218 // Verify that a comment can be repaired for a new user
219 [RuntimeFact]
220 public void CanRepairCommentOfNewUser()
221 {
222 var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment");
223
224 productNewUserWithComment.InstallProduct();
225 UserVerifier.SetUserComment(String.Empty, "testName1", "");
226
227 productNewUserWithComment.RepairProduct();
228 UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1");
229
230 // clean up
231 UserVerifier.DeleteLocalUser("testName1");
232 }
233
234 // Verify that a comment can be changed for an existing user
235 [RuntimeFact]
236 public void CanChangeCommentOfExistingUser()
237 {
238 UserVerifier.CreateLocalUser("testName1", "test123!@#");
239 UserVerifier.SetUserComment(String.Empty, "testName1", "initialTestComment1");
240 var productNewUserWithComment = this.CreatePackageInstaller("ProductNewUserWithComment");
241
242 productNewUserWithComment.InstallProduct();
243 UserVerifier.VerifyUserComment(String.Empty, "testName1", "testComment1");
244
245 // clean up
246 UserVerifier.DeleteLocalUser("testName1");
247 }
248
249 // Verify that a comment can be rolled back for an existing user
250 [RuntimeFact]
251 public void CanRollbackCommentOfExistingUser()
252 {
253 UserVerifier.CreateLocalUser("testName1", "test123!@#");
254 UserVerifier.SetUserComment(String.Empty, "testName1", "initialTestComment1");
255 var productCommentFail = this.CreatePackageInstaller("ProductCommentFail");
256
257 productCommentFail.InstallProduct(MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
258
259 // Verify that comment change was rolled back.
260 UserVerifier.VerifyUserComment(String.Empty, "testName1", "initialTestComment1");
261
262 // clean up
263 UserVerifier.DeleteLocalUser("testName1");
264 }
265
266 // Verify that a comment can be deleted for an existing user
267 [RuntimeFact]
268 public void CanDeleteCommentOfExistingUser()
269 {
270 UserVerifier.CreateLocalUser("testName1", "test123!@#");
271 UserVerifier.SetUserComment(String.Empty, "testName1", "testComment1");
272 var productCommentDelete = this.CreatePackageInstaller("ProductCommentDelete");
273
274 productCommentDelete.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
275
276 // Verify that comment was removed.
277 UserVerifier.VerifyUserComment(String.Empty, "testName1", "");
278
279 // clean up
280 UserVerifier.DeleteLocalUser("testName1");
281 }
282 }
283 }