Commit c08423c4 authored by Matt Hyman's avatar Matt Hyman
Browse files

Add tests for web sockets and PerformanceData methods with necessary mocks....

Add tests for web sockets and PerformanceData methods with necessary mocks. Also adds ability to add mock data by HTTP operation type and cleaned by the TestAppXbox’s use of web sockets.
parent 032a8393
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)
+37 −64
Original line number Diff line number Diff line
@@ -5,11 +5,12 @@
//----------------------------------------------------------------------------------------------

using System;
using System.Diagnostics;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Tools.WindowsDevicePortal;
using System.Diagnostics;
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