Commit bf9735cd authored by David Kline's avatar David Kline Committed by GitHub
Browse files

Merge pull request #63 from Microsoft/HymanMatt

Add tests for web sockets and PerformanceData methods
parents 3ebdf62f cb1303bf
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ using System.IO;
using System.Net;
using System.Threading.Tasks;
using Microsoft.Tools.WindowsDevicePortal;
using static Microsoft.Tools.WindowsDevicePortal.DevicePortal;

namespace MockDataGenerator
{
@@ -17,6 +18,11 @@ namespace MockDataGenerator
    /// </summary>
    public class Program
    {
        /// <summary>
        /// WebSocket operation prefix
        /// </summary>
        private const string WebSocketOpertionPrefix = "WebSocket/";

        /// <summary>
        /// Usage string
        /// </summary>
@@ -32,6 +38,10 @@ namespace MockDataGenerator
            DevicePortal.OsInfoApi,
            DevicePortal.XboxLiveUserApi,
            DevicePortal.XboxSettingsApi,
            DevicePortal.SystemPerfApi,
            DevicePortal.RunningProcessApi,
            WebSocketOpertionPrefix + DevicePortal.SystemPerfApi,
            WebSocketOpertionPrefix + DevicePortal.RunningProcessApi
        };

        /// <summary>
@@ -103,16 +113,34 @@ namespace MockDataGenerator

            if (parameters.HasParameter("endpoint"))
            {
                Task saveResponseTask = portal.SaveEndpointResponseToFile(parameters.GetParameterValue("endpoint"), directory);
                HttpOperations httpOperation = HttpOperations.Get;
                string endpoint = parameters.GetParameterValue("endpoint");

                if (endpoint.StartsWith(WebSocketOpertionPrefix, StringComparison.OrdinalIgnoreCase))
                {
                    httpOperation = HttpOperations.WebSocket;
                    endpoint = endpoint.Substring(WebSocketOpertionPrefix.Length);
                }

                Task saveResponseTask = portal.SaveEndpointResponseToFile(endpoint, directory, httpOperation);
                saveResponseTask.Wait();
            }
            else
            {
                foreach (string endpoint in Endpoints)
                {
                    string finalEndpoint = endpoint;
                    HttpOperations httpOperation = HttpOperations.Get;

                    if (endpoint.StartsWith(WebSocketOpertionPrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        httpOperation = HttpOperations.WebSocket;
                        finalEndpoint = endpoint.Substring(WebSocketOpertionPrefix.Length);
                    }

                    try
                    {
                        Task saveResponseTask = portal.SaveEndpointResponseToFile(endpoint, directory);
                        Task saveResponseTask = portal.SaveEndpointResponseToFile(finalEndpoint, directory, httpOperation);
                        saveResponseTask.Wait();
                    }
                    catch (Exception e)
+36 −63
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Tools.WindowsDevicePortal;
using static Microsoft.Tools.WindowsDevicePortal.DevicePortal;

namespace TestApp
{
@@ -36,26 +37,6 @@ namespace TestApp
        /// </summary>
        private static readonly string GeneralUsageMessage = "Usage: /ip:<system-ip or hostname> /user:<WDP username> /pwd:<WDP password> [/op:<operation type> [operation parameters]]";

        /// <summary>
        /// Event used to indicate that the running processes on the device have been received.
        /// </summary>
        private ManualResetEvent runningProcessesReceived = new ManualResetEvent(false);

        /// <summary>
        /// The running processes on the device.
        /// </summary>
        private DevicePortal.RunningProcesses runningProcesses = null;

        /// <summary>
        /// Event used to indicate that the system perf on the device have been received.
        /// </summary>
        private ManualResetEvent systemPerfReceived = new ManualResetEvent(false);

        /// <summary>
        /// The system perf of the device.
        /// </summary>
        private DevicePortal.SystemPerformanceInformation systemPerf = null;

        /// <summary>
        /// Operation types
        /// </summary>
@@ -183,28 +164,40 @@ namespace TestApp
                }
                else if (operation == OperationType.ListProcessesOperation)
                {
                    DevicePortal.RunningProcesses deviceProcesses = null;
                    RunningProcesses runningProcesses = null;
                    if (listen)
                    {
                        portal.RunningProcessesMessageReceived += app.ProcessesReceivedHandler;
                        ManualResetEvent runningProcessesReceived = new ManualResetEvent(false);

                        WebSocketMessageReceivedEventHandler<RunningProcesses> runningProcessesReceivedHandler =
                            delegate(object sender, WebSocketMessageReceivedEventArgs<RunningProcesses> runningProccesesArgs)
                        {
                            if (runningProccesesArgs.Message != null)
                            {
                                runningProcesses = runningProccesesArgs.Message;
                                runningProcessesReceived.Set();
                            }
                        };

                        portal.RunningProcessesMessageReceived += runningProcessesReceivedHandler;

                        Task startListeningForProcessesTask = portal.StartListeningForRunningProcesses();
                        startListeningForProcessesTask.Wait();

                        app.runningProcessesReceived.WaitOne();
                        runningProcessesReceived.WaitOne();

                        Task stopListeningForProcessesTask = portal.StopListeningForRunningProcesses();
                        stopListeningForProcessesTask.Wait();

                        deviceProcesses = app.runningProcesses;
                        portal.RunningProcessesMessageReceived -= runningProcessesReceivedHandler;
                    }
                    else
                    {
                        Task<DevicePortal.RunningProcesses> getRunningProcessesTask = portal.GetRunningProcesses();
                        deviceProcesses = getRunningProcessesTask.Result;
                        runningProcesses = getRunningProcessesTask.Result;
                    }

                    foreach (DevicePortal.DeviceProcessInfo process in deviceProcesses.Processes)
                    foreach (DeviceProcessInfo process in runningProcesses.Processes)
                    {
                        if (!string.IsNullOrEmpty(process.Name))
                        {
@@ -214,24 +207,36 @@ namespace TestApp
                }
                else if (operation == OperationType.GetSystemPerfOperation)
                {
                    DevicePortal.SystemPerformanceInformation systemPerformanceInformation = null;
                    SystemPerformanceInformation systemPerformanceInformation = null;
                    if (listen)
                    {
                        portal.SystemPerfMessageReceived += app.SystemPerfReceivedHandler;
                        ManualResetEvent systemPerfReceived = new ManualResetEvent(false);

                        WebSocketMessageReceivedEventHandler<SystemPerformanceInformation> systemPerfReceivedHandler =
                            delegate(object sender, WebSocketMessageReceivedEventArgs<SystemPerformanceInformation> sysPerfInfoArgs)
                        {
                            if (sysPerfInfoArgs.Message != null)
                            {
                                systemPerformanceInformation = sysPerfInfoArgs.Message;
                                systemPerfReceived.Set();
                            }
                        };

                        portal.SystemPerfMessageReceived += systemPerfReceivedHandler;

                        Task startListeningForSystemPerfTask = portal.StartListeningForSystemPerf();
                        startListeningForSystemPerfTask.Wait();

                        app.systemPerfReceived.WaitOne();
                        systemPerfReceived.WaitOne();

                        Task stopListeningForSystemPerfTask = portal.StopListeningForRunningProcesses();
                        stopListeningForSystemPerfTask.Wait();

                        systemPerformanceInformation = app.systemPerf;
                        portal.SystemPerfMessageReceived -= systemPerfReceivedHandler;
                    }
                    else
                    {
                        Task<DevicePortal.SystemPerformanceInformation> getRunningProcessesTask = portal.GetSystemPerf();
                        Task<SystemPerformanceInformation> getRunningProcessesTask = portal.GetSystemPerf();
                        systemPerformanceInformation = getRunningProcessesTask.Result;
                    }

@@ -321,37 +326,5 @@ namespace TestApp

            throw new Exception("Unknown Operation Type. " + AvailableOperationsText);
        }

        /// <summary>
        /// Handler for the ProcessesMessageReceived event.
        /// </summary>
        /// <param name="sender">The object sending the event.</param>
        /// <param name="args">The event data.</param>
        private void ProcessesReceivedHandler(
            object sender,
            WebSocketMessageReceivedEventArgs<DevicePortal.RunningProcesses> args)
        {
            if (args.Message != null)
            {
                this.runningProcesses = args.Message;
                this.runningProcessesReceived.Set();
            }
        }

        /// <summary>
        /// Handler for the SystemPerfMessageReceived event.
        /// </summary>
        /// <param name="sender">The object sending the event.</param>
        /// <param name="args">The event data.</param>
        private void SystemPerfReceivedHandler(
            object sender,
            WebSocketMessageReceivedEventArgs<DevicePortal.SystemPerformanceInformation> args)
        {
            if (args.Message != null)
            {
                this.systemPerf = args.Message;
                this.systemPerfReceived.Set();
            }
        }
    }
}
+7 −7
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests

            response.Content = content;

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.KnownFoldersApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.KnownFoldersApi, response, HttpOperations.Get);

            Task<KnownFolders> getKnownFoldersTask = TestHelpers.Portal.GetKnownFolders();
            getKnownFoldersTask.Wait();
@@ -69,7 +69,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests

            response.Content = content;

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFilesApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFilesApi, response, HttpOperations.Get);

            Task<FolderContents> getFolderContentsTask = TestHelpers.Portal.GetFolderContents("KnownFolderOne");
            getFolderContentsTask.Wait();
@@ -117,7 +117,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests
            HttpContent content = new StreamContent(stream);
            response.Content = content;

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response, HttpOperations.Get);

            Task<Stream> getFileTask = TestHelpers.Portal.GetFile("knownfolder", "FileToDownload.txt", "SubFolder\\SubFolder2");
            getFileTask.Wait();
@@ -135,7 +135,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests
        {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response, HttpOperations.Post);

            Task uploadFileTask = TestHelpers.Portal.UploadFile("knownfolder", "MockData\\Defaults\\api_os_devicefamily_Default.dat", "SubFolder\\SubFolder2");
            uploadFileTask.Wait();
@@ -152,7 +152,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests
        {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response, HttpOperations.Post);

            try
            {
@@ -175,7 +175,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests
        {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.GetFileApi, response, HttpOperations.Delete);

            Task deleteFileTask = TestHelpers.Portal.DeleteFile("knownfolder", "FileToDelete.txt", "SubFolder\\SubFolder2");
            deleteFileTask.Wait();
@@ -191,7 +191,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests
        {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.RenameFileApi, response);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.RenameFileApi, response, HttpOperations.Post);

            Task renameFileTask = TestHelpers.Portal.RenameFile("knownfolder", "FileToRename.txt", "NewFileName.txt", "SubFolder\\SubFolder2");
            renameFileTask.Wait();
+2 −1
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
using System;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using static Microsoft.Tools.WindowsDevicePortal.DevicePortal;

namespace Microsoft.Tools.WindowsDevicePortal.Tests
{
@@ -22,7 +23,7 @@ namespace Microsoft.Tools.WindowsDevicePortal.Tests
        [TestMethod]
        public void OsInformationTest()
        {
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.MachineNameApi);
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.MachineNameApi, HttpOperations.Get);

            Task<string> getNameTask = TestHelpers.Portal.GetDeviceName();
            getNameTask.Wait();
+214 −0
Original line number Diff line number Diff line
//----------------------------------------------------------------------------------------------
// <copyright file="PerformanceDataTests.cs" company="Microsoft Corporation">
//     Licensed under the MIT License. See LICENSE.TXT in the project root license information.
// </copyright>
//----------------------------------------------------------------------------------------------

using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using static Microsoft.Tools.WindowsDevicePortal.DevicePortal;

namespace Microsoft.Tools.WindowsDevicePortal.Tests.Core
{
    /// <summary>
    /// Test class for PerformanceData APIs.
    /// </summary>
    [TestClass]
    public class PerformanceDataTests : BaseTests
    {
        /// <summary>
        /// Basic test of GET method for getting a list of running processes.
        /// </summary>
        [TestMethod]
        public void GetRunningProcessesTest()
        {
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.RunningProcessApi, HttpOperations.Get);

            Task<RunningProcesses> getRunningProcessesTask = TestHelpers.Portal.GetRunningProcesses();
            getRunningProcessesTask.Wait();

            Assert.AreEqual(TaskStatus.RanToCompletion, getRunningProcessesTask.Status);

            ValidateRunningProcesses(getRunningProcessesTask.Result);
        }

        /// <summary>
        /// Basic test of web socket connection for getting a list of running processes.
        /// </summary>
        [TestMethod]
        public void GetRunningProcessesWebSocketTest()
        {
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.RunningProcessApi, HttpOperations.WebSocket);

            ManualResetEvent runningProcessesReceived = new ManualResetEvent(false);
            RunningProcesses runningProcesses = null;

            WindowsDevicePortal.WebSocketMessageReceivedEventHandler<RunningProcesses> runningProcessesReceivedHandler = delegate(object sender,
            WebSocketMessageReceivedEventArgs<RunningProcesses> args)
            {
                if (args.Message != null)
                {
                    runningProcesses = args.Message;
                    runningProcessesReceived.Set();
                }
            };

            TestHelpers.Portal.RunningProcessesMessageReceived += runningProcessesReceivedHandler;

            Task startListeningForProcessesTask = TestHelpers.Portal.StartListeningForRunningProcesses();
            startListeningForProcessesTask.Wait();
            Assert.AreEqual(TaskStatus.RanToCompletion, startListeningForProcessesTask.Status);

            runningProcessesReceived.WaitOne();

            Task stopListeningForProcessesTask = TestHelpers.Portal.StopListeningForRunningProcesses();
            stopListeningForProcessesTask.Wait();
            Assert.AreEqual(TaskStatus.RanToCompletion, stopListeningForProcessesTask.Status);

            TestHelpers.Portal.RunningProcessesMessageReceived -= runningProcessesReceivedHandler;

            ValidateRunningProcesses(runningProcesses);
        }

        /// <summary>
        /// Basic test of GET method for getting system perf without the known JSON error.
        /// </summary>
        [TestMethod]
        public void GetSystemPerfTest()
        {
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.SystemPerfApi, HttpOperations.Get);

            Task<SystemPerformanceInformation> getSystemPerfTask = TestHelpers.Portal.GetSystemPerf();
            getSystemPerfTask.Wait();

            Assert.AreEqual(TaskStatus.RanToCompletion, getSystemPerfTask.Status);

            ValidateSystemPerm(getSystemPerfTask.Result);
        }

        /// <summary>
        /// Basic test of web socket for getting system perf.
        /// </summary>
        [TestMethod]
        public void GetSystemPerfWebSocketTest()
        {
            TestHelpers.MockHttpResponder.AddMockResponse(DevicePortal.SystemPerfApi, HttpOperations.WebSocket);

            ManualResetEvent systemPerfReceived = new ManualResetEvent(false);
            SystemPerformanceInformation systemPerfInfo = null;

            WebSocketMessageReceivedEventHandler<SystemPerformanceInformation> systemPerfReceivedHandler = delegate(object sender,
            WebSocketMessageReceivedEventArgs<SystemPerformanceInformation> args)
            {
                if (args.Message != null)
                {
                    systemPerfInfo = args.Message;
                    systemPerfReceived.Set();
                }
            };

            TestHelpers.Portal.SystemPerfMessageReceived += systemPerfReceivedHandler;

            Task startListeningForSystemPerfTask = TestHelpers.Portal.StartListeningForSystemPerf();
            startListeningForSystemPerfTask.Wait();
            Assert.AreEqual(TaskStatus.RanToCompletion, startListeningForSystemPerfTask.Status);

            systemPerfReceived.WaitOne();

            Task stopListeningForSystemPerf = TestHelpers.Portal.StopListeningForSystemPerf();
            stopListeningForSystemPerf.Wait();
            Assert.AreEqual(TaskStatus.RanToCompletion, stopListeningForSystemPerf.Status);

            TestHelpers.Portal.SystemPerfMessageReceived -= systemPerfReceivedHandler;

            ValidateSystemPerm(systemPerfInfo);
        }

        /// <summary>
        /// Validate the <see cref="RunningProcesses" /> returned from the tests.
        /// </summary>
        /// <param name="runningProcesses">The <see cref="RunningProcesses" /> to validate.</param>
        private static void ValidateRunningProcesses(RunningProcesses runningProcesses)
        {
            List<DeviceProcessInfo> processes = new List<DeviceProcessInfo>(runningProcesses.Processes);

            // Check some known things about this response.
            Assert.AreEqual(2, processes.Count);

            DeviceProcessInfo systemIdleprocess = processes[0];
            Assert.IsNull(systemIdleprocess.AppName);
            Assert.AreEqual(systemIdleprocess.CpuUsage, 0);
            Assert.IsFalse(systemIdleprocess.IsRunning);
            Assert.IsFalse(systemIdleprocess.IsXAP);
            Assert.AreEqual(systemIdleprocess.Name, "System Idle Process");
            Assert.IsNull(systemIdleprocess.PackageFullName);
            Assert.AreEqual(systemIdleprocess.PageFile, 0U);
            Assert.AreEqual(systemIdleprocess.PrivateWorkingSet, 4096);
            Assert.AreEqual(systemIdleprocess.ProcessId, 0);
            Assert.IsNull(systemIdleprocess.Publisher);
            Assert.AreEqual(systemIdleprocess.SessionId, 0U);
            Assert.AreEqual(systemIdleprocess.TotalCommit, 0);
            Assert.AreEqual(systemIdleprocess.UserName, "NT AUTHORITY\\SYSTEM");
            Assert.IsNull(systemIdleprocess.Version);
            Assert.AreEqual(systemIdleprocess.VirtualSize, 65536);
            Assert.AreEqual(systemIdleprocess.WorkingSet, 4096U);

            DeviceProcessInfo devHomeProcess = processes[1];
            Assert.IsNull(devHomeProcess.AppName);
            Assert.AreEqual(devHomeProcess.CpuUsage, 0);
            Assert.IsFalse(devHomeProcess.IsRunning);
            Assert.IsFalse(devHomeProcess.IsXAP);
            Assert.AreEqual(devHomeProcess.Name, "svchost.exe");
            Assert.IsNull(devHomeProcess.PackageFullName);
            Assert.AreEqual(devHomeProcess.PageFile, 5472256U);
            Assert.AreEqual(devHomeProcess.PrivateWorkingSet, 4755456);
            Assert.AreEqual(devHomeProcess.ProcessId, 892);
            Assert.IsNull(devHomeProcess.Publisher);
            Assert.AreEqual(devHomeProcess.SessionId, 0U);
            Assert.AreEqual(devHomeProcess.TotalCommit, 5914624);
            Assert.AreEqual(devHomeProcess.UserName, "NT AUTHORITY\\SYSTEM");
            Assert.IsNull(devHomeProcess.Version);
            Assert.AreEqual(devHomeProcess.VirtualSize, 2203387539456);
            Assert.AreEqual(devHomeProcess.WorkingSet, 17285120U);
        }

        /// <summary>
        /// Validate the <see cref="SystemPerformanceInformation" /> returned from the tests.
        /// </summary>
        /// <param name="systemPerfInfo">The <see cref="SystemPerformanceInformation" /> to validate.</param>
        private static void ValidateSystemPerm(SystemPerformanceInformation systemPerfInfo)
        {
            // Check some known things about this response.
            Assert.AreEqual(systemPerfInfo.AvailablePages, 369054);
            Assert.AreEqual(systemPerfInfo.CommitLimit, 784851);
            Assert.AreEqual(systemPerfInfo.CommittedPages, 322627);
            Assert.AreEqual(systemPerfInfo.CpuLoad, 1);
            Assert.AreEqual(systemPerfInfo.IoOtherSpeed, 3692);
            Assert.AreEqual(systemPerfInfo.IoReadSpeed, 36);
            Assert.AreEqual(systemPerfInfo.IoWriteSpeed, 6480);
            Assert.AreEqual(systemPerfInfo.NonPagedPoolPages, 42504);
            Assert.AreEqual(systemPerfInfo.PageSize, 4096);
            Assert.AreEqual(systemPerfInfo.PagedPoolPages, 30697);
            Assert.AreEqual(systemPerfInfo.TotalInstalledKb, 1048592);
            Assert.AreEqual(systemPerfInfo.TotalPages, 655360);

            Assert.AreEqual(systemPerfInfo.GpuData.Adapters.Count, 1);
            GpuAdapter gpuAdapter = systemPerfInfo.GpuData.Adapters[0];
            Assert.AreEqual(gpuAdapter.DedicatedMemory, 268435456U);
            Assert.AreEqual(gpuAdapter.DedicatedMemoryUsed, 79282176U);
            Assert.AreEqual(gpuAdapter.Description, "ROOT\\SraKmd\\0000");
            Assert.AreEqual(gpuAdapter.SystemMemory, 1342177280U);
            Assert.AreEqual(gpuAdapter.SystemMemoryUsed, 10203136U);

            Assert.AreEqual(gpuAdapter.EnginesUtilization.Count, 7);
            double enguineUtilization = gpuAdapter.EnginesUtilization[0];
            Assert.AreEqual(enguineUtilization, 0.0011459999950602651);

            NetworkPerformanceData networkPerformanceData = systemPerfInfo.NetworkData;
            Assert.AreEqual(networkPerformanceData.BytesIn, 15000);
            Assert.AreEqual(networkPerformanceData.BytesOut, 0);
        }
    }
}
Loading