in DUTRemoteTests/JobTests.cs [275:331]
public void Job_CheckStreamingProgress_ExpectFileFallback_ClientClosedConnectionEarly()
{
var old_files = Directory.GetFiles(Path.GetTempPath()).Where((x) => x.Contains("SimpleRemote-JobOutput-"));
old_files.ToList().ForEach(x => File.Delete(x));
var self = IPAddress.Loopback;
var completionPort = 0;
var progressPort = 0;
string receivedMessage = null;
// completion server items
var completionServer = new TcpListener(self, completionPort);
completionServer.Start(1);
completionPort = ((IPEndPoint)completionServer.Server.LocalEndPoint).Port;
var completionClient = completionServer.AcceptTcpClientAsync();
// progress server items
var progressServer = new TcpListener(self, progressPort);
progressServer.Start(1);
progressPort = ((IPEndPoint)progressServer.Server.LocalEndPoint).Port;
var progressClient = progressServer.AcceptSocketAsync();
// close the client as soon as it's connected.
progressClient.ContinueWith((t) => t.Result.Close());
// start streaming job
var id = remoteFunctions.StartJobWithProgress(self.ToString(), completionPort, progressPort, "systeminfo.exe");
// wait for completion
if (!completionClient.Wait(10 * 1000))
{
completionServer.Stop();
progressServer.Stop();
Assert.Fail("Timed out waiting for callback.");
}
remoteFunctions.GetJobResult(id);
// confirm there's a fallback file.
var files = Directory.GetFiles(Path.GetTempPath()).Where((x) => x.Contains("SimpleRemote-JobOutput-"));
Assert.IsTrue(files.Count() == 1, $"Incorrect number of fallback logs found: {files.Count()} instead of 1");
var file = files.First();
Assert.IsTrue(DateTime.Now.Subtract(File.GetLastWriteTime(file)).Seconds < 10, "File found is too old.");
// read the fallback file
receivedMessage += File.ReadAllText(file);
// clean all sockets.
progressClient.Result.Dispose();
completionClient.Result.Dispose();
progressServer.Stop();
completionServer.Stop();
Assert.IsTrue(receivedMessage.Contains("OS Name:"), "Missing expected text from progress file.");
}