aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.UnitTesting
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-02-20 22:55:15 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-02-20 22:55:15 +0200
commit9447a8a09f87d6ea2cb62860021c595386668eec (patch)
treea02db15a1247587f14fedb6ccae76f79bd63afb3 /Software/Visual_Studio/Tango.UnitTesting
parent17446569ca8d8dd00331da5926b938593c4b117f (diff)
downloadTango-9447a8a09f87d6ea2cb62860021c595386668eec.tar.gz
Tango-9447a8a09f87d6ea2cb62860021c595386668eec.zip
A lot of work !!!
Diffstat (limited to 'Software/Visual_Studio/Tango.UnitTesting')
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/App.config2
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs78
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs95
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/MachineService_TST.cs2
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj12
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/Web/JWT_Tokens_TST.cs69
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/packages.config3
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" />