From 9447a8a09f87d6ea2cb62860021c595386668eec Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 20 Feb 2019 22:55:15 +0200 Subject: A lot of work !!! --- .../Visual_Studio/Tango.UnitTesting/App.config | 2 +- .../MachineService/MachineStudio_Controller_TST.cs | 78 ++++++++++++++++++ .../MachineService/PPC_Controller_TST.cs | 95 ++++++++++++++++++++++ .../Tango.UnitTesting/MachineService_TST.cs | 2 +- .../Tango.UnitTesting/Tango.UnitTesting.csproj | 12 ++- .../Tango.UnitTesting/Web/JWT_Tokens_TST.cs | 69 ++++++++++++++++ .../Tango.UnitTesting/packages.config | 3 +- 7 files changed, 256 insertions(+), 5 deletions(-) create mode 100644 Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs create mode 100644 Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs create mode 100644 Software/Visual_Studio/Tango.UnitTesting/Web/JWT_Tokens_TST.cs (limited to 'Software/Visual_Studio/Tango.UnitTesting') diff --git a/Software/Visual_Studio/Tango.UnitTesting/App.config b/Software/Visual_Studio/Tango.UnitTesting/App.config index 525a23acf..1a3af14d9 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/App.config +++ b/Software/Visual_Studio/Tango.UnitTesting/App.config @@ -64,7 +64,7 @@ - + diff --git a/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs new file mode 100644 index 000000000..8a126df2e --- /dev/null +++ b/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs @@ -0,0 +1,78 @@ +using System; +using System.Security.Authentication; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Tango.BL; +using Tango.MachineStudio.Common.Web; +using Tango.Transport.Web; +using System.Linq; + +namespace Tango.UnitTesting.Web +{ + [TestClass] + [TestCategory("Machine Service - Machine Studio")] + public class MachineStudio_Controller_TST + { + private const string address = "http://localhost:51581"; + + [TestMethod] + public void Login_and_check_for_updates() + { + //First test the more primitive web clients. + + IWebTransportClient client = new WebTransportClient(); + + var res1 = client.PostJson($"{address}/api/MachineStudio/Login", new LoginRequest() + { + Email = "TestUser@twine-s.com", + Password = "ASJH_asdjkl1234", + Version = "1.0.0.0" + }).Result; + + String token = res1.AccessToken; + client.AuthenticationToken = token; + + var res2 = client.PostJson($"{address}/api/MachineStudio/CheckForUpdates", new CheckForUpdatesRequest() + { + Version = "1.0.0.0" + }).ConfigureAwait(false).GetAwaiter().GetResult(); + + //Check updates are available.. + Assert.IsTrue(res2.IsUpdateAvailable); + + + //Now check the dedicated machine studio client. + MachineStudioWebClient msClient = new MachineStudioWebClient(address, null); + + //Should throw an exception without login first (no token specified..) + Assert.ThrowsException(() => + { + var res3 = msClient.CheckForUpdates(new CheckForUpdatesRequest() + { + Version = "1.0.0.0" + }).GetAwaiter().GetResult(); + }); + + //Perform a login. + var res4 = msClient.Login(new LoginRequest() + { + Email = "TestUser@twine-s.com", + Password = "ASJH_asdjkl1234", + Version = "1.0.0.0" + }).Result; + + //Validate the data source received. + using (ObservablesContext db = ObservablesContext.CreateDefault(res4.DataSource)) + { + var user = db.Users.Single(x => x.Email.ToLower() == "TestUser@twine-s.com"); + } + + //Check updates are not available.. + var res5 = msClient.CheckForUpdates(new CheckForUpdatesRequest() + { + Version = "100.0.0.0" + }).Result; + + Assert.IsFalse(res5.IsUpdateAvailable); + } + } +} diff --git a/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs new file mode 100644 index 000000000..23ab74f3b --- /dev/null +++ b/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs @@ -0,0 +1,95 @@ +using System; +using System.Security.Authentication; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Tango.BL; +using Tango.Transport.Web; +using System.Linq; +using Tango.PPC.Common.Web; +using Tango.Core.IO; + +namespace Tango.UnitTesting.Web +{ + [TestClass] + [TestCategory("Machine Service - PPC")] + public class PPC_Controller_TST + { + private const string address = "http://localhost:51581"; + + [TestMethod] + public void Login_and_setup() + { + //Now check the dedicated machine studio client. + PPCWebClient client = new PPCWebClient(address, null); + + //Should throw an exception without login first (no token specified..) + Assert.ThrowsException(() => + { + var res1 = client.MachineSetup(new MachineSetupRequest() + { + + }).GetAwaiter().GetResult(); + }); + + //Perform a login with user mode. + var res2 = client.Login(new LoginRequest() + { + Mode = LoginMode.User, + Email = "TestUser@twine-s.com", + Password = "ASJH_asdjkl1234", + }).Result; + + //Should throw exception about serial number not found. + Assert.ThrowsException(() => + { + var res3 = client.Login(new LoginRequest() + { + Mode = LoginMode.Machine, + SerialNumber = "NOT_EXISTING_SERIAL_NUMBER", + }).GetAwaiter().GetResult(); + }); + + //Perform a login with machine mode. + var res4 = client.Login(new LoginRequest() + { + Mode = LoginMode.Machine, + SerialNumber = "0003", + }).Result; + + //Should return setup information + var res5 = client.MachineSetup(new MachineSetupRequest() + { + SerialNumber = "0003", + }).GetAwaiter().GetResult(); + + //Now get DEV data source using the machine studio client in order to validate the setup information. + MachineStudio.Common.Web.MachineStudioWebClient msClient = new MachineStudio.Common.Web.MachineStudioWebClient(address, null); + var res6 = msClient.Login(new MachineStudio.Common.Web.LoginRequest() + { + Email = "TestUser@twine-s.com", + Password = "ASJH_asdjkl1234", + }).Result; + + var dataSource = res6.DataSource; + + using (ObservablesContext db = ObservablesContext.CreateDefault(dataSource)) + { + var machine = db.Machines.Single(x => x.SerialNumber == "0003"); + + Assert.AreEqual(res5.IsDemo, machine.IsDemo); + Assert.AreEqual(res5.OSKey, machine.OsKey); + Assert.AreEqual(res5.SetupActivation, machine.SetupActivation); + Assert.AreEqual(res5.SetupFirmware, machine.SetupFirmware); + Assert.AreEqual(res5.SetupFPGA, machine.SetupFpga); + Assert.AreEqual(res5.SetupRemoteAssistance, machine.SetupRemoteAssistance); + Assert.AreEqual(res5.SetupUWF, machine.SetupUwf); + } + + + var tempFile = TemporaryManager.Default.CreateFile(); + StorageBlobDownloader downloader = new StorageBlobDownloader(res5.BlobAddress, tempFile); + downloader.Download().Wait(); + + tempFile.Delete(); + } + } +} diff --git a/Software/Visual_Studio/Tango.UnitTesting/MachineService_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/MachineService_TST.cs index ababd1793..455a45895 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/MachineService_TST.cs +++ b/Software/Visual_Studio/Tango.UnitTesting/MachineService_TST.cs @@ -59,7 +59,7 @@ namespace Tango.UnitTesting tokensManager.Validate(recent_token); - Assert.ThrowsException(() => tokensManager.Validate(token1)); + Assert.ThrowsException(() => tokensManager.Validate(token1)); } } } diff --git a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj index 9ebc45dfc..445992b64 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj +++ b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj @@ -56,18 +56,23 @@ ..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll + + ..\packages\JWT.5.0.0\lib\net46\JWT.dll + True + ..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll - - ..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll @@ -96,6 +101,7 @@ + @@ -108,6 +114,8 @@ + + diff --git a/Software/Visual_Studio/Tango.UnitTesting/Web/JWT_Tokens_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/Web/JWT_Tokens_TST.cs new file mode 100644 index 000000000..ff698f18f --- /dev/null +++ b/Software/Visual_Studio/Tango.UnitTesting/Web/JWT_Tokens_TST.cs @@ -0,0 +1,69 @@ +using JWT; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Tango.Web.Authentication; + +namespace Tango.UnitTesting.Web +{ + [TestClass] + [TestCategory("Web")] + public class JWT_Tokens_TST + { + private class TokenObject + { + public String Name { get; set; } + public int Age { get; set; } + } + + [TestMethod] + public void Test_JWT_Tokens_Read_Write_Validation() + { + string secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk"; + + //Create new web token with embedded object. Expiration in 2 seconds. + var webToken = WebToken.CreateNew(secret, new TokenObject() + { + Name = "Roy", + Age = 35 + + }, DateTime.UtcNow.AddSeconds(2)); + + //Get the actual string token. + String token = webToken.AccessToken; + + //Validate the string token using the secret. + WebToken.Validate(secret, token); + + //Read the token payload (Expiration, Issued, Embedded Object).. + var read_web_token = WebToken.FromToken(token); + + //Validate the token again using the web token instance (Just to see if the method is working..) + read_web_token.Validate(secret); + + //Validate the token payload reading.. + Assert.AreEqual(read_web_token.Expiration.Value.ToString("hh:mm"), webToken.Expiration.Value.ToString("hh:mm")); + Assert.AreEqual(read_web_token.Issued.ToString("hh:mm"), webToken.Issued.ToString("hh:mm")); + Assert.AreEqual(read_web_token.Object.Name, webToken.Object.Name); + Assert.AreEqual(read_web_token.Object.Age, webToken.Object.Age); + + //Ensure token validation fails when messing with the token string. + Assert.ThrowsException(() => + { + WebToken.Validate(secret, token.Substring(0, token.Length - 1) + "0"); + }); + + //Wait for the token to expire... + Thread.Sleep(2000); + + //Ensure the token validation fails with 'token expired'. + Assert.ThrowsException(() => read_web_token.Validate(secret)); + } + + + } +} diff --git a/Software/Visual_Studio/Tango.UnitTesting/packages.config b/Software/Visual_Studio/Tango.UnitTesting/packages.config index 9b8d6e793..0528c7ef0 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/packages.config +++ b/Software/Visual_Studio/Tango.UnitTesting/packages.config @@ -4,9 +4,10 @@ + - + -- cgit v1.3.1