diff options
| author | Avi Levkovich <avi@twine-s.com> | 2019-02-21 17:34:53 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2019-02-21 17:34:53 +0200 |
| commit | d7c8a8e9a6320ade6098e0d8e182c7ada4e30a97 (patch) | |
| tree | 4f261cdd6c2f5a3336e09e775576fbd6bf353dd1 /Software/Visual_Studio/Tango.UnitTesting | |
| parent | 1b6e37351cde492bc27e48d4c53f6a69eea91052 (diff) | |
| parent | a5fde6c76b7c98c482d5fc069c371da5480c0bdf (diff) | |
| download | Tango-d7c8a8e9a6320ade6098e0d8e182c7ada4e30a97.tar.gz Tango-d7c8a8e9a6320ade6098e0d8e182c7ada4e30a97.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Tango.UnitTesting')
7 files changed, 256 insertions, 5 deletions
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 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 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<LoginRequest, LoginResponse>($"{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<CheckForUpdatesRequest, CheckForUpdatesResponse>($"{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<AuthenticationException>(() => + { + 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<AuthenticationException>(() => + { + 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<AuthenticationException>(() => + { + 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<SessionExpiredException>(() => tokensManager.Validate(token1)); + Assert.ThrowsException<TokenExpiredException>(() => 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 @@ <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> <HintPath>..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> </Reference> + <Reference Include="JWT, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\JWT.5.0.0\lib\net46\JWT.dll</HintPath> + </Reference> <Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.Office.Interop.Outlook, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL"> <EmbedInteropTypes>True</EmbedInteropTypes> </Reference> + <Reference Include="Microsoft.SqlServer.AzureStorageEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" /> <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath> </Reference> <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath> </Reference> - <Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> + <Reference Include="Microsoft.WindowsAzure.Storage, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> + <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.DataAnnotations" /> @@ -96,6 +101,7 @@ </Compile> <Compile Include="Integration_TST.cs" /> <Compile Include="Logging_TST.cs" /> + <Compile Include="MachineService\PPC_Controller_TST.cs" /> <Compile Include="MachineStudio_TST.cs" /> <Compile Include="RemoteRunner_TST.cs" /> <Compile Include="SQLExaminer_TST.cs" /> @@ -108,6 +114,8 @@ <Compile Include="Protobuf_TST.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="MachineService_TST.cs" /> + <Compile Include="Web\JWT_Tokens_TST.cs" /> + <Compile Include="MachineService\MachineStudio_Controller_TST.cs" /> </ItemGroup> <ItemGroup> <None Include="App.config" /> 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<TokenObject>.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<TokenObject>.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<SignatureVerificationException>(() => + { + 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<TokenExpiredException>(() => 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 @@ <package id="DeepEqual" version="1.6.0.0" targetFramework="net461" /> <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> <package id="Google.Protobuf" version="3.4.1" targetFramework="net46" /> + <package id="JWT" version="5.0.0" targetFramework="net461" /> <package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net45" /> <package id="MSTest.TestFramework" version="1.1.11" targetFramework="net45" /> - <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net46" /> + <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> <package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" /> <package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" /> <package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" /> |
