summaryrefslogtreecommitdiff
path: root/src/test/burn/TestExe/Task.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-22 17:12:34 -0700
committerRob Mensching <rob@firegiant.com>2021-05-05 11:18:35 -0700
commitd8e47230e094a506406a83eb78916abf2668b29c (patch)
tree2213ee3ed1a19fd5cd19a5914a23b7f7a57318ff /src/test/burn/TestExe/Task.cs
parent2cbe83832cc76aa379b29665de5523e82c543acf (diff)
downloadwix-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.cs209
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
3using System;
4using System.Collections.Generic;
5using System.Diagnostics;
6using System.IO;
7using Microsoft.Win32;
8
9namespace 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}