main
cs 1,142 lines 47.7 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 System.IO;
7 using System.Linq;
8 using System.Net.NetworkInformation;
9 using NetFwTypeLib;
10 using WixTestTools;
11 using WixTestTools.Firewall;
12 using Xunit;
13 using Xunit.Abstractions;
14
15 public class FirewallExtensionTests : MsiE2ETests
16 {
17 public FirewallExtensionTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
18
19 [RuntimeFact]
20 public void VerifierSelfTest()
21 {
22 foreach (var expected in Verifier.GetFirewallRules())
23 {
24 var check = new UniqueCheck(expected);
25 Verifier.VerifyFirewallRule(expected.Name, expected, check);
26 }
27 }
28
29 [RuntimeFact]
30 public void CanInstallAndUninstallFirewallRulesWithMinimalProperties()
31 {
32 var product = this.CreatePackageInstaller("FirewallRules");
33 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
34
35 // Validate new firewall exception details.
36 var expected1 = new RuleDetails("WiXToolset401 Test - 0001")
37 {
38 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
39 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")),
40 Description = "WiX Toolset firewall exception rule integration test - minimal app properties",
41 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
42 EdgeTraversal = false,
43 EdgeTraversalOptions = 0,
44 Enabled = true,
45 InterfaceTypes = "All",
46 LocalAddresses = "*",
47 Profiles = Int32.MaxValue,
48 Protocol = 256,
49 RemoteAddresses = "*",
50 SecureFlags = 0,
51 };
52
53 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0001", expected1);
54
55 var expected2 = new RuleDetails("WiXToolset401 Test - 0002")
56 {
57 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
58 Description = "WiX Toolset firewall exception rule integration test - minimal port properties",
59 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
60 EdgeTraversal = false,
61 EdgeTraversalOptions = 0,
62 Enabled = true,
63 InterfaceTypes = "All",
64 LocalAddresses = "*",
65 LocalPorts = "23456",
66 Profiles = Int32.MaxValue,
67 Protocol = 6,
68 RemoteAddresses = "*",
69 RemotePorts = "*",
70 SecureFlags = 0,
71 };
72
73 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0002", expected2);
74
75 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
76
77 // verify the firewall exceptions have been removed.
78 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0001"));
79 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0002"));
80 }
81
82 [RuntimeFact]
83 public void DisabledPortFirewallRuleIsEnabledAfterRepair()
84 {
85 var product = this.CreatePackageInstaller("FirewallRules");
86 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
87
88 Verifier.DisableFirewallRule("WiXToolset401 Test - 0002");
89
90 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS);
91
92 var expected = new RuleDetails("WiXToolset401 Test - 0002")
93 {
94 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
95 Description = "WiX Toolset firewall exception rule integration test - minimal port properties",
96 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
97 EdgeTraversal = false,
98 EdgeTraversalOptions = 0,
99 Enabled = true,
100 InterfaceTypes = "All",
101 LocalAddresses = "*",
102 LocalPorts = "23456",
103 Profiles = Int32.MaxValue,
104 Protocol = 6,
105 RemoteAddresses = "*",
106 RemotePorts = "*",
107 SecureFlags = 0,
108 };
109
110 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0002", expected);
111 }
112
113 [RuntimeFact]
114 public void DisabledApplicationFirewallRuleIsEnabledAfterRepair()
115 {
116 var product = this.CreatePackageInstaller("FirewallRules");
117 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
118
119 Verifier.DisableFirewallRule("WiXToolset401 Test - 0001");
120
121 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS);
122
123 var expected = new RuleDetails("WiXToolset401 Test - 0001")
124 {
125 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
126 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")),
127 Description = "WiX Toolset firewall exception rule integration test - minimal app properties",
128 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
129 EdgeTraversal = false,
130 EdgeTraversalOptions = 0,
131 Enabled = true,
132 InterfaceTypes = "All",
133 LocalAddresses = "*",
134 Profiles = Int32.MaxValue,
135 Protocol = 256,
136 RemoteAddresses = "*",
137 SecureFlags = 0,
138 };
139
140 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0001", expected);
141 }
142
143 [RuntimeFact]
144 public void MissingPortFirewallRuleIsAddedAfterRepair()
145 {
146 var product = this.CreatePackageInstaller("FirewallRules");
147 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
148
149 Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0002");
150 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0002"));
151
152 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS);
153
154 var expected = new RuleDetails("WiXToolset401 Test - 0002")
155 {
156 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
157 Description = "WiX Toolset firewall exception rule integration test - minimal port properties",
158 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
159 EdgeTraversal = false,
160 EdgeTraversalOptions = 0,
161 Enabled = true,
162 InterfaceTypes = "All",
163 LocalAddresses = "*",
164 LocalPorts = "23456",
165 Profiles = Int32.MaxValue,
166 Protocol = 6,
167 RemoteAddresses = "*",
168 RemotePorts = "*",
169 SecureFlags = 0,
170 };
171
172 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0002", expected);
173 }
174
175 [RuntimeFact]
176 public void MissingApplicationFirewallRuleIsAddedAfterRepair()
177 {
178 var product = this.CreatePackageInstaller("FirewallRules");
179 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
180
181 Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0001");
182 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0001"));
183
184 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS);
185
186 var expected = new RuleDetails("WiXToolset401 Test - 0001")
187 {
188 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
189 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")),
190 Description = "WiX Toolset firewall exception rule integration test - minimal app properties",
191 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
192 EdgeTraversal = false,
193 EdgeTraversalOptions = 0,
194 Enabled = true,
195 InterfaceTypes = "All",
196 LocalAddresses = "*",
197 Profiles = Int32.MaxValue,
198 Protocol = 256,
199 RemoteAddresses = "*",
200 SecureFlags = 0,
201 };
202
203 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0001", expected);
204 }
205
206 [RuntimeFact]
207 public void FirewallRulesUseFormattedStringProperties()
208 {
209 var product = this.CreatePackageInstaller("DynamicFirewallRules");
210 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
211
212 var expected1 = new RuleDetails("WiXToolset401 Test - 0003")
213 {
214 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
215 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("DynamicFirewallRules", "product.wxs")),
216 Description = "WiX Toolset firewall exception rule integration test - dynamic app description 9999",
217 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
218 EdgeTraversal = false,
219 EdgeTraversalOptions = 0,
220 Enabled = true,
221 InterfaceTypes = "All",
222 LocalAddresses = "*",
223 Profiles = Int32.MaxValue,
224 Protocol = 6,
225 RemoteAddresses = "LocalSubnet",
226 SecureFlags = 0,
227 LocalPorts = "9999",
228 RemotePorts = "*",
229 };
230
231 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0003", expected1);
232
233 var expected2 = new RuleDetails("WiXToolset401 Test - 0004")
234 {
235 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
236 Description = "WiX Toolset firewall exception rule integration test - dynamic port description 9999",
237 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
238 EdgeTraversal = false,
239 EdgeTraversalOptions = 0,
240 Enabled = true,
241 InterfaceTypes = "All",
242 LocalAddresses = "*",
243 Profiles = Int32.MaxValue,
244 Protocol = 6,
245 RemoteAddresses = "*",
246 SecureFlags = 0,
247 LocalPorts = "9999",
248 RemotePorts = "*",
249 };
250
251 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0004", expected2);
252
253
254 var expected3 = new RuleDetails("WiXToolset401 Test - 0005 - 9999")
255 {
256 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
257 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("windir"), "system32", "9999.exe"),
258 Description = "WiX Toolset firewall exception rule integration test - dynamic Name 9999",
259 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
260 EdgeTraversal = false,
261 EdgeTraversalOptions = 0,
262 Enabled = true,
263 InterfaceTypes = "All",
264 LocalAddresses = "*",
265 Profiles = 2,
266 Protocol = 17,
267 RemoteAddresses = "127.0.0.1/255.255.255.255,192.168.1.1/255.255.255.255",
268 SecureFlags = 0,
269 LocalPorts = "9999",
270 RemotePorts = "*",
271 };
272
273 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0005 - 9999", expected3);
274
275 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
276
277 // verify the firewall exceptions have been removed.
278 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0003"));
279 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0004"));
280 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0005 - 9999"));
281 }
282
283 [RuntimeFact]
284 public void SucceedWhenIgnoreOnFailureIsSet()
285 {
286 var product = this.CreatePackageInstaller("IgnoreFailedFirewallRules");
287 var log1 = product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
288
289 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0006 pipe"));
290 Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add firewall exception 'WiXToolset401 Test - 0006 pipe' to the list"));
291
292 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0007 pipe"));
293 Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add firewall exception 'WiXToolset401 Test - 0007 pipe' to the list"));
294
295 var expected = new RuleDetails("WiXToolset401 Test - 0008 removal")
296 {
297 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
298 ApplicationName = "test.exe",
299 Description = "WiX Toolset firewall exception rule integration test - removal test",
300 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
301 EdgeTraversal = false,
302 EdgeTraversalOptions = 0,
303 Enabled = true,
304 InterfaceTypes = "All",
305 LocalPorts = "52390",
306 LocalAddresses = "*",
307 Profiles = Int32.MaxValue,
308 Protocol = 6,
309 RemoteAddresses = "*",
310 RemotePorts = "*",
311 SecureFlags = 0,
312 };
313
314 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0008 removal", expected);
315 Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0008 removal");
316
317 var log2 = product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, "NORULENAME=1");
318 Assert.True(LogVerifier.MessageInLogFile(log2, "failed to remove firewall exception for name"));
319 }
320
321 [RuntimeFact]
322 public void VarietyOfProtocolValuesCanBeUsed()
323 {
324 var product = this.CreatePackageInstaller("ProtocolRules");
325 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
326
327 var expected1 = new RuleDetails("WiXToolset401 Test - 0009")
328 {
329 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
330 Description = "WiX Toolset firewall exception rule integration test - protocol TCP",
331 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
332 EdgeTraversal = false,
333 EdgeTraversalOptions = 0,
334 Enabled = true,
335 InterfaceTypes = "All",
336 LocalAddresses = "*",
337 Profiles = Int32.MaxValue,
338 Protocol = 6,
339 RemoteAddresses = "*",
340 SecureFlags = 0,
341 LocalPorts = "900",
342 RemotePorts = "*",
343 };
344
345 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0009", expected1);
346
347
348 var expected2 = new RuleDetails("WiXToolset401 Test - 0010")
349 {
350 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
351 Description = "WiX Toolset firewall exception rule integration test - protocol UDP",
352 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
353 EdgeTraversal = false,
354 EdgeTraversalOptions = 0,
355 Enabled = true,
356 InterfaceTypes = "All",
357 LocalAddresses = "*",
358 Profiles = Int32.MaxValue,
359 Protocol = 17,
360 RemoteAddresses = "*",
361 SecureFlags = 0,
362 LocalPorts = "1000",
363 RemotePorts = "*",
364 };
365
366 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0010", expected2);
367
368
369 var expected3 = new RuleDetails("WiXToolset401 Test - 0011")
370 {
371 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
372 ApplicationName = "test.exe",
373 Description = "WiX Toolset firewall exception rule integration test - ports can only be specified if protocol is TCP or UDP",
374 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
375 EdgeTraversal = false,
376 EdgeTraversalOptions = 0,
377 Enabled = true,
378 InterfaceTypes = "All",
379 LocalAddresses = "*",
380 Profiles = Int32.MaxValue,
381 Protocol = 134,
382 RemoteAddresses = "*",
383 SecureFlags = 0,
384 };
385
386 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0011", expected3);
387
388 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
389
390 // verify the firewall exceptions have been removed.
391 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0009"));
392 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0010"));
393 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0011"));
394 }
395
396 [RuntimeFact]
397 public void FullSetOfScopeValuesCanBeUsed()
398 {
399 var product = this.CreatePackageInstaller("ScopeRules");
400 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
401
402 var expected1 = new RuleDetails("WiXToolset401 Test - 0012")
403 {
404 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
405 Description = "WiX Toolset firewall exception rule integration test - scope any",
406 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
407 EdgeTraversal = false,
408 EdgeTraversalOptions = 0,
409 Enabled = true,
410 InterfaceTypes = "All",
411 LocalAddresses = "*",
412 Profiles = Int32.MaxValue,
413 Protocol = 6,
414 RemoteAddresses = "*",
415 SecureFlags = 0,
416 LocalPorts = "1200",
417 RemotePorts = "*",
418 };
419
420 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0012", expected1);
421
422
423 var expected2 = new RuleDetails("WiXToolset401 Test - 0013")
424 {
425 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
426 Description = "WiX Toolset firewall exception rule integration test - scope local subnet",
427 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
428 EdgeTraversal = false,
429 EdgeTraversalOptions = 0,
430 Enabled = true,
431 InterfaceTypes = "All",
432 LocalAddresses = "*",
433 Profiles = Int32.MaxValue,
434 Protocol = 6,
435 RemoteAddresses = "LocalSubnet",
436 SecureFlags = 0,
437 LocalPorts = "1300",
438 RemotePorts = "*",
439 };
440
441 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0013", expected2);
442
443
444 var expected3 = new RuleDetails("WiXToolset401 Test - 0014")
445 {
446 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
447 Description = "WiX Toolset firewall exception rule integration test - scope DNS",
448 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
449 EdgeTraversal = false,
450 EdgeTraversalOptions = 0,
451 Enabled = true,
452 InterfaceTypes = "All",
453 LocalAddresses = "*",
454 Profiles = Int32.MaxValue,
455 Protocol = 6,
456 RemoteAddresses = "DNS",
457 SecureFlags = 0,
458 LocalPorts = "1400",
459 RemotePorts = "*",
460 };
461
462 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0014", expected3);
463
464
465 var expected4 = new RuleDetails("WiXToolset401 Test - 0015")
466 {
467 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
468 Description = "WiX Toolset firewall exception rule integration test - scope DHCP",
469 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
470 EdgeTraversal = false,
471 EdgeTraversalOptions = 0,
472 Enabled = true,
473 InterfaceTypes = "All",
474 LocalAddresses = "*",
475 Profiles = Int32.MaxValue,
476 Protocol = 6,
477 RemoteAddresses = "DHCP",
478 SecureFlags = 0,
479 LocalPorts = "1500",
480 RemotePorts = "*",
481 };
482
483 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0015", expected4);
484
485
486 var expected5 = new RuleDetails("WiXToolset401 Test - 0016")
487 {
488 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
489 Description = "WiX Toolset firewall exception rule integration test - scope WINS",
490 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
491 EdgeTraversal = false,
492 EdgeTraversalOptions = 0,
493 Enabled = true,
494 InterfaceTypes = "All",
495 LocalAddresses = "*",
496 Profiles = Int32.MaxValue,
497 Protocol = 6,
498 RemoteAddresses = "WINS",
499 SecureFlags = 0,
500 LocalPorts = "1600",
501 RemotePorts = "*",
502 };
503
504 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0016", expected5);
505
506
507 var expected6 = new RuleDetails("WiXToolset401 Test - 0017")
508 {
509 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
510 Description = "WiX Toolset firewall exception rule integration test - scope default gateway",
511 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
512 EdgeTraversal = false,
513 EdgeTraversalOptions = 0,
514 Enabled = true,
515 InterfaceTypes = "All",
516 LocalAddresses = "*",
517 Profiles = Int32.MaxValue,
518 Protocol = 6,
519 RemoteAddresses = "DefaultGateway",
520 SecureFlags = 0,
521 LocalPorts = "1700",
522 RemotePorts = "*",
523 };
524
525 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0017", expected6);
526
527 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
528
529 // verify the firewall exceptions have been removed.
530 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0012"));
531 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0013"));
532 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0014"));
533 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0015"));
534 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0016"));
535 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0017"));
536 }
537
538 [RuntimeFact]
539 public void CanInstallAndUninstallFirewallRulesWithInterfaces()
540 {
541 var names = NetworkInterface.GetAllNetworkInterfaces()
542 .Take(3)
543 .Select(ni => ni.Name);
544
545 var props = names.Select((name, idx) => $"INTERFACE{idx + 1}=\"{name}\"")
546 .Concat(new[] { "INTERFACETYPE=Lan" }).ToArray();
547
548 var product = this.CreatePackageInstaller("FirewallRulesInterfaces");
549 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, props);
550
551 var expected1 = new RuleDetails("WiXToolset500 Test - 0028")
552 {
553 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
554 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRulesInterfaces", "product.wxs")),
555 Description = "WiX Toolset firewall exception rule integration test - three interfaces",
556 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
557 EdgeTraversal = false,
558 EdgeTraversalOptions = 0,
559 Enabled = true,
560 InterfaceTypes = "Lan,Wireless,RemoteAccess",
561 Interfaces = names.ToArray<object>(),
562 LocalAddresses = "*",
563 Profiles = Int32.MaxValue,
564 Protocol = 256,
565 RemoteAddresses = "*",
566 SecureFlags = 0,
567 };
568
569 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0028", expected1);
570
571 var expected2 = new RuleDetails("WiXToolset500 Test - 0029")
572 {
573 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
574 Description = "WiX Toolset firewall exception rule integration test - one interface",
575 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
576 EdgeTraversal = false,
577 EdgeTraversalOptions = 0,
578 Enabled = true,
579 InterfaceTypes = "Lan",
580 Interfaces = names.Take(1).ToArray<object>(),
581 LocalAddresses = "*",
582 LocalPorts = "29292",
583 Profiles = Int32.MaxValue,
584 Protocol = 6,
585 RemoteAddresses = "*",
586 RemotePorts = "*",
587 SecureFlags = 0,
588 };
589
590 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0029", expected2);
591
592 props = names.Take(1).Select((name, idx) => $"INTERFACE{idx + 2}=\"{name}\"").ToArray();
593
594 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, props);
595
596 var expected3 = new RuleDetails("WiXToolset500 Test - 0028")
597 {
598 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
599 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRulesInterfaces", "product.wxs")),
600 Description = "WiX Toolset firewall exception rule integration test - three interfaces",
601 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
602 EdgeTraversal = false,
603 EdgeTraversalOptions = 0,
604 Enabled = true,
605 InterfaceTypes = "Lan,Wireless,RemoteAccess",
606 Interfaces = names.Take(1).ToArray<object>(),
607 LocalAddresses = "*",
608 Profiles = Int32.MaxValue,
609 Protocol = 256,
610 RemoteAddresses = "*",
611 SecureFlags = 0,
612 };
613
614 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0028", expected3);
615
616 var expected4 = new RuleDetails("WiXToolset500 Test - 0029")
617 {
618 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
619 Description = "WiX Toolset firewall exception rule integration test - one interface",
620 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
621 EdgeTraversal = false,
622 EdgeTraversalOptions = 0,
623 Enabled = true,
624 InterfaceTypes = "All",
625 LocalAddresses = "*",
626 LocalPorts = "29292",
627 Profiles = Int32.MaxValue,
628 Protocol = 6,
629 RemoteAddresses = "*",
630 RemotePorts = "*",
631 SecureFlags = 0,
632 };
633
634 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0029", expected4);
635
636 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
637
638 // verify the firewall exceptions have been removed.
639 Assert.False(Verifier.FirewallRuleExists("WiXToolset500 Test - 0028"));
640 Assert.False(Verifier.FirewallRuleExists("WiXToolset500 Test - 0029"));
641 }
642
643 [RuntimeFact]
644 public void CanInstallAndUninstallFirewallRulesPackagedByDifferentModules()
645 {
646 var product = this.CreatePackageInstaller("CrossVersionMerge");
647 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
648
649 // Validate new firewall exception details.
650 var expected1 = new RuleDetails("WiXToolset401 Test - 0018")
651 {
652 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
653 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file1.txt"),
654 Description = "WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - app",
655 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
656 EdgeTraversal = true,
657 EdgeTraversalOptions = 1,
658 Enabled = true,
659 InterfaceTypes = "All",
660 LocalAddresses = "*",
661 LocalPorts = "40101",
662 Profiles = Int32.MaxValue,
663 Protocol = 6,
664 RemoteAddresses = "*",
665 RemotePorts = "*",
666 SecureFlags = 0,
667 };
668
669 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0018", expected1);
670
671 var expected2 = new RuleDetails("WiXToolset401 Test - 0019")
672 {
673 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
674 Description = "WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - port",
675 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
676 EdgeTraversal = false,
677 EdgeTraversalOptions = 0,
678 Enabled = true,
679 InterfaceTypes = "All",
680 LocalAddresses = "*",
681 LocalPorts = "40102",
682 Profiles = Int32.MaxValue,
683 Protocol = 6,
684 RemoteAddresses = "*",
685 RemotePorts = "*",
686 SecureFlags = 0,
687 };
688
689 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0019", expected2);
690
691 var expected3 = new RuleDetails("WiXToolset401 Test - 0020")
692 {
693 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
694 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file2.txt"),
695 Description = "WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - app",
696 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
697 EdgeTraversal = true,
698 EdgeTraversalOptions = 1,
699 Enabled = true,
700 InterfaceTypes = "All",
701 LocalAddresses = "*",
702 LocalPorts = "40103",
703 Profiles = Int32.MaxValue,
704 Protocol = 6,
705 RemoteAddresses = "*",
706 RemotePorts = "*",
707 SecureFlags = 0,
708 };
709
710 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0020", expected3);
711
712 var expected4 = new RuleDetails("WiXToolset401 Test - 0021")
713 {
714 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
715 Description = "WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - port",
716 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
717 EdgeTraversal = false,
718 EdgeTraversalOptions = 0,
719 Enabled = true,
720 InterfaceTypes = "All",
721 LocalAddresses = "*",
722 LocalPorts = "40104",
723 Profiles = Int32.MaxValue,
724 Protocol = 6,
725 RemoteAddresses = "*",
726 RemotePorts = "*",
727 SecureFlags = 0,
728 };
729
730 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0021", expected4);
731
732 var expected5 = new RuleDetails("WiXToolset Test - 0022")
733 {
734 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
735 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file1.txt"),
736 Description = "WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - app",
737 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
738 EdgeTraversal = false,
739 EdgeTraversalOptions = 0,
740 Enabled = true,
741 InterfaceTypes = "All",
742 LocalAddresses = "*",
743 LocalPorts = "50001",
744 Profiles = Int32.MaxValue,
745 Protocol = 6,
746 RemoteAddresses = "*",
747 RemotePorts = "*",
748 SecureFlags = 0,
749 };
750
751 Verifier.VerifyFirewallRule("WiXToolset Test - 0022", expected5);
752
753 var expected6 = new RuleDetails("WiXToolset Test - 0023")
754 {
755 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
756 Description = "WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - port",
757 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
758 EdgeTraversal = false,
759 EdgeTraversalOptions = 0,
760 Enabled = true,
761 InterfaceTypes = "All",
762 LocalAddresses = "*",
763 LocalPorts = "50002",
764 Profiles = Int32.MaxValue,
765 Protocol = 6,
766 RemoteAddresses = "*",
767 RemotePorts = "*",
768 SecureFlags = 0,
769 };
770
771 Verifier.VerifyFirewallRule("WiXToolset Test - 0023", expected6);
772
773 var expected7 = new RuleDetails("WiXToolset Test - 0024")
774 {
775 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
776 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file2.txt"),
777 Description = "WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - app",
778 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
779 EdgeTraversal = false,
780 EdgeTraversalOptions = 0,
781 Enabled = true,
782 InterfaceTypes = "All",
783 LocalAddresses = "*",
784 LocalPorts = "50003",
785 Profiles = Int32.MaxValue,
786 Protocol = 6,
787 RemoteAddresses = "*",
788 RemotePorts = "*",
789 SecureFlags = 0,
790 };
791
792 Verifier.VerifyFirewallRule("WiXToolset Test - 0024", expected7);
793
794 var expected8 = new RuleDetails("WiXToolset Test - 0025")
795 {
796 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
797 Description = "WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - port",
798 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
799 EdgeTraversal = false,
800 EdgeTraversalOptions = 0,
801 Enabled = true,
802 InterfaceTypes = "All",
803 LocalAddresses = "*",
804 LocalPorts = "50004",
805 Profiles = Int32.MaxValue,
806 Protocol = 6,
807 RemoteAddresses = "*",
808 RemotePorts = "*",
809 SecureFlags = 0,
810 };
811
812 Verifier.VerifyFirewallRule("WiXToolset Test - 0025", expected8);
813
814 var expected9 = new RuleDetails("WiXToolset Test - 0026")
815 {
816 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
817 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "package.wxs"),
818 Description = "WiX Toolset firewall exception rule integration test - package app",
819 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
820 EdgeTraversal = false,
821 EdgeTraversalOptions = 0,
822 Enabled = true,
823 InterfaceTypes = "All",
824 LocalAddresses = "*",
825 LocalPorts = "20001",
826 Profiles = Int32.MaxValue,
827 Protocol = 6,
828 RemoteAddresses = "*",
829 RemotePorts = "*",
830 SecureFlags = 0,
831 };
832
833 Verifier.VerifyFirewallRule("WiXToolset Test - 0026", expected9);
834
835 var expected10 = new RuleDetails("WiXToolset Test - 0027")
836 {
837 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
838 Description = "WiX Toolset firewall exception rule integration test - package port",
839 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
840 EdgeTraversal = false,
841 EdgeTraversalOptions = 0,
842 Enabled = true,
843 InterfaceTypes = "All",
844 LocalAddresses = "*",
845 LocalPorts = "20002",
846 Profiles = Int32.MaxValue,
847 Protocol = 6,
848 RemoteAddresses = "*",
849 RemotePorts = "*",
850 SecureFlags = 0,
851 };
852
853 Verifier.VerifyFirewallRule("WiXToolset Test - 0027", expected10);
854
855 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
856
857 // verify the firewall exceptions have been removed.
858 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0018"));
859 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0019"));
860 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0020"));
861 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0021"));
862 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0022"));
863 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0023"));
864 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0024"));
865 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0025"));
866 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0026"));
867 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0027"));
868 }
869
870 [RuntimeFact]
871 public void ServiceNameIsPassedIntoNestedRules()
872 {
873 var product = this.CreatePackageInstaller("NestedService");
874 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
875
876 var expected1 = new RuleDetails("WiXToolset Test - 0031")
877 {
878 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
879 Protocol = 256,
880 LocalAddresses = "*",
881 RemoteAddresses = "*",
882 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
883 Description = "WiX Toolset firewall exception rule integration test - service property",
884 EdgeTraversal = false,
885 EdgeTraversalOptions = 0,
886 Enabled = true,
887 InterfaceTypes = "All",
888 Profiles = Int32.MaxValue,
889 SecureFlags = 0,
890 ServiceName = "Spooler",
891 };
892
893 Verifier.VerifyFirewallRule("WiXToolset Test - 0031", expected1);
894
895 var expected2 = new RuleDetails("WiXToolset Test - 0032")
896 {
897 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
898 Protocol = 256,
899 LocalAddresses = "*",
900 RemoteAddresses = "*",
901 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
902 Description = "WiX Toolset firewall exception rule integration test - ServiceConfig",
903 EdgeTraversal = false,
904 EdgeTraversalOptions = 0,
905 Enabled = true,
906 InterfaceTypes = "All",
907 Profiles = Int32.MaxValue,
908 SecureFlags = 0,
909 ServiceName = "Spooler",
910 };
911
912 Verifier.VerifyFirewallRule("WiXToolset Test - 0032", expected2);
913
914 var expected3 = new RuleDetails("WiXToolset Test - 0033")
915 {
916 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
917 Protocol = 256,
918 LocalAddresses = "*",
919 RemoteAddresses = "*",
920 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
921 Description = "WiX Toolset firewall exception rule integration test - ServiceInstall",
922 EdgeTraversal = false,
923 EdgeTraversalOptions = 0,
924 Enabled = true,
925 InterfaceTypes = "All",
926 Profiles = Int32.MaxValue,
927 SecureFlags = 0,
928 ServiceName = "WixTestFirewallSrv",
929 };
930
931 Verifier.VerifyFirewallRule("WiXToolset Test - 0033", expected3);
932
933 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
934
935 // verify the firewall exceptions have been removed.
936 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0031"));
937 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0032"));
938 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0033"));
939 }
940
941 [RuntimeFact]
942 public void SucceedWhenEnableOnlyFlagIsSet()
943 {
944 var product = this.CreatePackageInstaller("FirewallRulesProperties");
945 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
946
947 var expected1 = new RuleDetails("WiXToolset Test - 0028")
948 {
949 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
950 Protocol = 256,
951 LocalAddresses = "*",
952 RemoteAddresses = "*",
953 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
954 EdgeTraversal = false,
955 EdgeTraversalOptions = 0,
956 Enabled = true,
957 InterfaceTypes = "All",
958 Profiles = Int32.MaxValue,
959 SecureFlags = 0,
960 };
961
962 Verifier.VerifyFirewallRule("WiXToolset Test - 0028", expected1);
963
964 Verifier.DisableFirewallRule("WiXToolset Test - 0028");
965
966 var args = new[]
967 {
968 "LOCALPORT=3456",
969 "PROTOCOL=6",
970 "PROGRAM=ShouldBeUnchanged",
971 "PROFILE=2",
972 "DESCRIPTION=ShouldBeUnchanged",
973 "REMOTESCOPE=ShouldBeUnchanged",
974 "EDGETRAVERSAL=3",
975 "ENABLED=1",
976 "GROUPING=ShouldBeUnchanged",
977 "ICMPTYPES=ShouldBeUnchanged",
978 "INTERFACE=ShouldBeUnchanged",
979 "INTERFACETYPE=ShouldBeUnchanged",
980 "LOCALSCOPE=ShouldBeUnchanged",
981 "REMOTEPORT=60000",
982 "SERVICE=ShouldBeUnchanged",
983 "PACKAGEID=ShouldBeUnchanged",
984 "LOCALUSERS=ShouldBeUnchanged",
985 "LOCALOWNER=ShouldBeUnchanged",
986 "REMOTEMACHINES=ShouldBeUnchanged",
987 "REMOTEUSERS=ShouldBeUnchanged",
988 "SECUREFLAGS=15",
989 "REMOTEADDRESS=ShouldBeUnchanged",
990 "LOCALADDRESS=ShouldBeUnchanged",
991 };
992
993 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args);
994
995 var expected2 = new RuleDetails("WiXToolset Test - 0028")
996 {
997 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
998 Protocol = 256,
999 LocalAddresses = "*",
1000 RemoteAddresses = "*",
1001 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1002 EdgeTraversal = false,
1003 EdgeTraversalOptions = 0,
1004 Enabled = true,
1005 InterfaceTypes = "All",
1006 Profiles = Int32.MaxValue,
1007 SecureFlags = 0,
1008 };
1009
1010 Verifier.VerifyFirewallRule("WiXToolset Test - 0028", expected2);
1011
1012 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1013
1014 // verify the firewall exceptions have been removed.
1015 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0028"));
1016 }
1017
1018 [RuntimeFact]
1019 public void SucceedWhenDoNothingFlagIsSet()
1020 {
1021 var product = this.CreatePackageInstaller("FirewallRulesProperties");
1022 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1023
1024 var expected1 = new RuleDetails("WiXToolset Test - 0029")
1025 {
1026 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1027 Protocol = 256,
1028 LocalAddresses = "*",
1029 RemoteAddresses = "*",
1030 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1031 EdgeTraversal = false,
1032 EdgeTraversalOptions = 0,
1033 Enabled = true,
1034 InterfaceTypes = "All",
1035 Profiles = Int32.MaxValue,
1036 SecureFlags = 0,
1037 };
1038
1039 Verifier.VerifyFirewallRule("WiXToolset Test - 0029", expected1);
1040 Verifier.DisableFirewallRule("WiXToolset Test - 0029");
1041
1042 var args = new[]
1043 {
1044 "INTERFACE=ShouldBeUnchanged",
1045 "INTERFACETYPE=ShouldBeUnchanged",
1046 "REMOTEADDRESS=ShouldBeUnchanged",
1047 "LOCALADDRESS=ShouldBeUnchanged",
1048 };
1049
1050 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args);
1051
1052 var expected2 = new RuleDetails("WiXToolset Test - 0029")
1053 {
1054 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1055 Protocol = 256,
1056 LocalAddresses = "*",
1057 RemoteAddresses = "*",
1058 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1059 EdgeTraversal = false,
1060 EdgeTraversalOptions = 0,
1061 Enabled = false, // remains as disabled after the repair
1062 InterfaceTypes = "All",
1063 Profiles = Int32.MaxValue,
1064 SecureFlags = 0,
1065 };
1066
1067 Verifier.VerifyFirewallRule("WiXToolset Test - 0029", expected2);
1068
1069 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1070
1071 // verify the firewall exceptions have been removed.
1072 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0029"));
1073 }
1074
1075 [RuntimeFact]
1076 public void SucceedWhenNoFlagIsSet()
1077 {
1078 var product = this.CreatePackageInstaller("FirewallRulesProperties");
1079 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1080
1081 var expected1 = new RuleDetails("WiXToolset Test - 0030")
1082 {
1083 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1084 Protocol = 256,
1085 LocalAddresses = "*",
1086 RemoteAddresses = "*",
1087 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1088 EdgeTraversal = false,
1089 EdgeTraversalOptions = 0,
1090 Enabled = true,
1091 InterfaceTypes = "All",
1092 Profiles = Int32.MaxValue,
1093 SecureFlags = 0,
1094 };
1095
1096 Verifier.VerifyFirewallRule("WiXToolset Test - 0030", expected1);
1097 Verifier.DisableFirewallRule("WiXToolset Test - 0030");
1098
1099 var names = NetworkInterface.GetAllNetworkInterfaces()
1100 .Take(2)
1101 .Select(ni => ni.Name);
1102
1103 var args = names.Select((name, idx) => $"INTERFACE{idx + 1}=\"{name}\"")
1104 .Concat(new[]
1105 {
1106 "INTERFACETYPE1=Wireless",
1107 "INTERFACETYPE2=Lan",
1108 "REMOTEADDRESS1=DHCP",
1109 "REMOTEADDRESS2=LocalSubnet",
1110 "LOCALADDRESS1=127.0.0.1",
1111 "LOCALADDRESS2=192.168.1.1",
1112 })
1113 .ToArray();
1114
1115 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args);
1116
1117 var expected2 = new RuleDetails("WiXToolset Test - 0030")
1118 {
1119 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1120 Protocol = 256,
1121 LocalAddresses = "127.0.0.1/255.255.255.255,192.168.1.1/255.255.255.255",
1122 RemoteAddresses = "LocalSubnet,DHCP",
1123 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1124 Description = "",
1125 EdgeTraversal = false,
1126 EdgeTraversalOptions = 0,
1127 Enabled = true,
1128 Interfaces = names.ToArray(),
1129 InterfaceTypes = "Lan,Wireless",
1130 Profiles = Int32.MaxValue,
1131 SecureFlags = 0,
1132 };
1133
1134 Verifier.VerifyFirewallRule("WiXToolset Test - 0030", expected2);
1135
1136 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1137
1138 // verify the firewall exceptions have been removed.
1139 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0030"));
1140 }
1141 }
1142 }