public void Job_CheckStreamingProgress_ExpectFileFallback_ClientClosedConnectionEarly()

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.");
        }