diff options
author | Rob Mensching <rob@firegiant.com> | 2021-04-22 17:12:34 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2021-05-05 11:18:35 -0700 |
commit | d8e47230e094a506406a83eb78916abf2668b29c (patch) | |
tree | 2213ee3ed1a19fd5cd19a5914a23b7f7a57318ff /src/test/burn/TestExe/Task.cs | |
parent | 2cbe83832cc76aa379b29665de5523e82c543acf (diff) | |
download | wix-d8e47230e094a506406a83eb78916abf2668b29c.tar.gz wix-d8e47230e094a506406a83eb78916abf2668b29c.tar.bz2 wix-d8e47230e094a506406a83eb78916abf2668b29c.zip |
Move Integration into test
Diffstat (limited to 'src/test/burn/TestExe/Task.cs')
-rw-r--r-- | src/test/burn/TestExe/Task.cs | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/src/test/burn/TestExe/Task.cs b/src/test/burn/TestExe/Task.cs new file mode 100644 index 00000000..7d39bfd9 --- /dev/null +++ b/src/test/burn/TestExe/Task.cs | |||
@@ -0,0 +1,209 @@ | |||
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 | using System; | ||
4 | using System.Collections.Generic; | ||
5 | using System.Diagnostics; | ||
6 | using System.IO; | ||
7 | using Microsoft.Win32; | ||
8 | |||
9 | namespace TestExe | ||
10 | { | ||
11 | public abstract class Task | ||
12 | { | ||
13 | public string data; | ||
14 | |||
15 | public Task(string Data) | ||
16 | { | ||
17 | this.data = Data; | ||
18 | } | ||
19 | |||
20 | public abstract void RunTask(); | ||
21 | |||
22 | } | ||
23 | |||
24 | public class ExitCodeTask : Task | ||
25 | { | ||
26 | public ExitCodeTask(string Data) : base(Data) { } | ||
27 | |||
28 | public override void RunTask() | ||
29 | { | ||
30 | // this task does nothing. Just stores data about what exit code to return. | ||
31 | } | ||
32 | } | ||
33 | |||
34 | public class SleepTask : Task | ||
35 | { | ||
36 | public SleepTask(string Data) : base(Data) { } | ||
37 | |||
38 | public override void RunTask() | ||
39 | { | ||
40 | int milliseconds = int.Parse(this.data); | ||
41 | Console.WriteLine("Starting to sleep for {0} milliseconds", milliseconds); | ||
42 | System.Threading.Thread.Sleep(milliseconds); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | public class SleepRandomTask : Task | ||
47 | { | ||
48 | public SleepRandomTask(string Data) : base(Data) { } | ||
49 | |||
50 | public override void RunTask() | ||
51 | { | ||
52 | int low = int.Parse(this.data.Split(new string[] { ":" }, 2, StringSplitOptions.None)[0]); | ||
53 | int high = int.Parse(this.data.Split(new string[] { ":" }, 2, StringSplitOptions.None)[1]); | ||
54 | |||
55 | Random r = new Random(); | ||
56 | int milliseconds = r.Next(high - low) + low; | ||
57 | Console.WriteLine("Starting to sleep for {0} milliseconds", milliseconds); | ||
58 | System.Threading.Thread.Sleep(milliseconds); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | public class LargeFileTask : Task | ||
63 | { | ||
64 | public LargeFileTask(string Data) : base(Data) { } | ||
65 | |||
66 | public override void RunTask() | ||
67 | { | ||
68 | string[] tokens = this.data.Split(new char[] { '|' }, 2); | ||
69 | string filePath = System.Environment.ExpandEnvironmentVariables(tokens[0]); | ||
70 | long size = long.Parse(tokens[1]); | ||
71 | using (var stream = File.Create(filePath)) | ||
72 | { | ||
73 | stream.Seek(size - 1, SeekOrigin.Begin); | ||
74 | stream.WriteByte(1); | ||
75 | } | ||
76 | } | ||
77 | } | ||
78 | |||
79 | public class LogTask : Task | ||
80 | { | ||
81 | string[] argsUsed; | ||
82 | public LogTask(string Data, string[] args) | ||
83 | : base(Data) | ||
84 | { | ||
85 | this.argsUsed = args; | ||
86 | } | ||
87 | |||
88 | public override void RunTask() | ||
89 | { | ||
90 | string logFile = ""; | ||
91 | string argsUsedString = ""; | ||
92 | |||
93 | foreach (string a in this.argsUsed) | ||
94 | { | ||
95 | argsUsedString += a + " "; | ||
96 | } | ||
97 | |||
98 | try | ||
99 | { | ||
100 | logFile = System.Environment.ExpandEnvironmentVariables(this.data); | ||
101 | Console.WriteLine("creating log file: " + logFile); | ||
102 | StreamWriter textFile = File.CreateText(logFile); | ||
103 | textFile.WriteLine("This is a log file created by TestExe.exe"); | ||
104 | textFile.WriteLine("Args used: " + argsUsedString); | ||
105 | textFile.Close(); | ||
106 | } | ||
107 | catch | ||
108 | { | ||
109 | Console.WriteLine("creating a log file failed for: {0}", logFile); | ||
110 | } | ||
111 | |||
112 | } | ||
113 | } | ||
114 | |||
115 | public class FileExistsTask : Task | ||
116 | { | ||
117 | public FileExistsTask(string Data) : base(Data) { } | ||
118 | |||
119 | public override void RunTask() | ||
120 | { | ||
121 | string fileToExist = System.Environment.ExpandEnvironmentVariables(this.data); | ||
122 | |||
123 | if (!String.IsNullOrEmpty(fileToExist)) | ||
124 | { | ||
125 | Console.WriteLine("Waiting for this file to exist: \"" + fileToExist + "\""); | ||
126 | while (!System.IO.File.Exists(fileToExist)) | ||
127 | { | ||
128 | System.Threading.Thread.Sleep(250); | ||
129 | } | ||
130 | Console.WriteLine("Found: \"" + fileToExist + "\""); | ||
131 | } | ||
132 | |||
133 | } | ||
134 | } | ||
135 | |||
136 | public class TaskParser | ||
137 | { | ||
138 | |||
139 | public static List<Task> ParseTasks(string[] args) | ||
140 | { | ||
141 | List<Task> tasks = new List<Task>(); | ||
142 | |||
143 | try | ||
144 | { | ||
145 | // for invalid args. return empty list | ||
146 | if (args.Length % 2 == 0) | ||
147 | { | ||
148 | Task t; | ||
149 | |||
150 | for (int i = 0; i < args.Length; i += 2) | ||
151 | { | ||
152 | switch (args[i].ToLower()) | ||
153 | { | ||
154 | case "/ec": | ||
155 | t = new ExitCodeTask(args[i + 1]); | ||
156 | tasks.Add(t); | ||
157 | break; | ||
158 | case "/s": | ||
159 | t = new SleepTask(args[i + 1]); | ||
160 | tasks.Add(t); | ||
161 | break; | ||
162 | case "/sr": | ||
163 | t = new SleepRandomTask(args[i + 1]); | ||
164 | tasks.Add(t); | ||
165 | break; | ||
166 | case "/lf": | ||
167 | t = new LargeFileTask(args[i + 1]); | ||
168 | tasks.Add(t); | ||
169 | break; | ||
170 | case "/log": | ||
171 | t = new LogTask(args[i + 1], args); | ||
172 | tasks.Add(t); | ||
173 | break; | ||
174 | case "/fe": | ||
175 | t = new FileExistsTask(args[i + 1]); | ||
176 | tasks.Add(t); | ||
177 | break; | ||
178 | #if NET35 | ||
179 | case "/pinfo": | ||
180 | t = new ProcessInfoTask(args[i + 1]); | ||
181 | tasks.Add(t); | ||
182 | break; | ||
183 | case "/regw": | ||
184 | t = new RegistryWriterTask(args[i + 1]); | ||
185 | tasks.Add(t); | ||
186 | break; | ||
187 | case "/regd": | ||
188 | t = new RegistryDeleterTask(args[i + 1]); | ||
189 | tasks.Add(t); | ||
190 | break; | ||
191 | #endif | ||
192 | |||
193 | default: | ||
194 | Console.WriteLine("Error: Invalid switch specified."); | ||
195 | return new List<Task>(); | ||
196 | } | ||
197 | } | ||
198 | } | ||
199 | } | ||
200 | catch | ||
201 | { | ||
202 | Console.WriteLine("Error: Invalid switch data specified. Couldn't parse the data."); | ||
203 | return new List<Task>(); | ||
204 | } | ||
205 | |||
206 | return tasks; | ||
207 | } | ||
208 | } | ||
209 | } | ||