main
cs 171 lines 7.17 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.CoreIntegration
4 {
5 using System.Collections.Generic;
6 using System.IO;
7 using WixInternal.TestSupport;
8 using WixInternal.Core.TestPackage;
9 using Xunit;
10
11 public class MsiTransactionFixture
12 {
13 [Fact]
14 public void CannotBuildExePackageInMsiTransaction()
15 {
16 var folder = TestData.Get(@"TestData");
17
18 using (var fs = new DisposableFileSystem())
19 {
20 var baseFolder = fs.GetFolder();
21 var intermediateFolder = Path.Combine(baseFolder, "obj");
22 var exePath = Path.Combine(baseFolder, @"bin\test.exe");
23
24 var result = WixRunner.Execute(new[]
25 {
26 "build",
27 "-sw1151", // this is expected for this test
28 Path.Combine(folder, "MsiTransaction", "ExeInMsiTransactionBundle.wxs"),
29 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
30 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
31 "-bindpath", Path.Combine(folder, ".Data"),
32 "-intermediateFolder", intermediateFolder,
33 "-o", exePath,
34 });
35
36 Assert.Equal(412, result.ExitCode);
37 }
38 }
39
40 [Fact]
41 public void CannotBuildX64AfterX86Bundle()
42 {
43 var folder = TestData.Get(@"TestData");
44
45 using (var fs = new DisposableFileSystem())
46 {
47 var baseFolder = fs.GetFolder();
48 var intermediateFolder = Path.Combine(baseFolder, "obj");
49 var binFolder = Path.Combine(baseFolder, "bin");
50 var exePath = Path.Combine(binFolder, "test.exe");
51
52 BuildMsiPackages(folder, intermediateFolder, binFolder);
53
54 var result = WixRunner.Execute(new[]
55 {
56 "build",
57 "-sw1151", // this is expected for this test
58 Path.Combine(folder, "MsiTransaction", "X64AfterX86Bundle.wxs"),
59 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
60 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
61 "-bindpath", binFolder,
62 "-intermediateFolder", intermediateFolder,
63 "-o", exePath,
64 });
65
66 Assert.Equal(410, result.ExitCode);
67 }
68 }
69
70 [Fact]
71 public void CanBuildX86AfterX64Bundle()
72 {
73 var folder = TestData.Get(@"TestData");
74
75 using (var fs = new DisposableFileSystem())
76 {
77 var baseFolder = fs.GetFolder();
78 var intermediateFolder = Path.Combine(baseFolder, "obj");
79 var binFolder = Path.Combine(baseFolder, "bin");
80 var exePath = Path.Combine(binFolder, "test.exe");
81 var baFolderPath = Path.Combine(baseFolder, "ba");
82 var extractFolderPath = Path.Combine(baseFolder, "extract");
83
84 BuildMsiPackages(folder, intermediateFolder, binFolder);
85
86 var result = WixRunner.Execute(new[]
87 {
88 "build",
89 "-sw1151", // this is expected for this test
90 Path.Combine(folder, "MsiTransaction", "X86AfterX64Bundle.wxs"),
91 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
92 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
93 "-bindpath", binFolder,
94 "-intermediateFolder", intermediateFolder,
95 "-o", exePath,
96 });
97
98 result.AssertSuccess();
99
100 Assert.True(File.Exists(exePath));
101
102 var extractResult = BundleExtractor.ExtractBAContainer(null, exePath, baFolderPath, extractFolderPath);
103 extractResult.AssertSuccess();
104
105 var rollbackBoundaries = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:RollbackBoundary");
106 WixAssert.CompareLineByLine(new[]
107 {
108 "<RollbackBoundary Id='WixDefaultBoundary' Vital='yes' Transaction='no' />",
109 "<RollbackBoundary Id='rba31DvS6_ninGllmavuS.cp4RYckk' Vital='yes' Transaction='yes' LogPathVariable='WixBundleLog_rba31DvS6_ninGllmavuS.cp4RYckk' />",
110 }, rollbackBoundaries);
111 }
112 }
113
114 private static void BuildMsiPackages(string folder, string intermediateFolder, string binFolder)
115 {
116 var result = WixRunner.Execute(new[]
117 {
118 "build",
119 Path.Combine(folder, "MsiTransaction", "FirstX86.wxs"),
120 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
121 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
122 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
123 "-intermediateFolder", intermediateFolder,
124 "-o", Path.Combine(binFolder, "FirstX86", "FirstX86.msi"),
125 });
126
127 result.AssertSuccess();
128
129 result = WixRunner.Execute(new[]
130 {
131 "build",
132 Path.Combine(folder, "MsiTransaction", "SecondX86.wxs"),
133 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
134 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
135 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
136 "-intermediateFolder", intermediateFolder,
137 "-o", Path.Combine(binFolder, "SecondX86", "SecondX86.msi"),
138 });
139
140 result.AssertSuccess();
141
142 result = WixRunner.Execute(new[]
143 {
144 "build",
145 Path.Combine(folder, "MsiTransaction", "FirstX64.wxs"),
146 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
147 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
148 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
149 "-intermediateFolder", intermediateFolder,
150 "-arch", "x64",
151 "-o", Path.Combine(binFolder, "FirstX64", "FirstX64.msi"),
152 });
153
154 result.AssertSuccess();
155
156 result = WixRunner.Execute(new[]
157 {
158 "build",
159 Path.Combine(folder, "MsiTransaction", "SecondX64.wxs"),
160 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
161 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
162 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
163 "-intermediateFolder", intermediateFolder,
164 "-arch", "x64",
165 "-o", Path.Combine(binFolder, "SecondX64", "SecondX64.msi"),
166 });
167
168 result.AssertSuccess();
169 }
170 }
171 }