diff --git a/Borepin/Borepin/Service/BFFH/BFFHService.cs b/Borepin/Borepin/Service/BFFH/BFFHService.cs
index a0fcf48..52d310e 100644
--- a/Borepin/Borepin/Service/BFFH/BFFHService.cs
+++ b/Borepin/Borepin/Service/BFFH/BFFHService.cs
@@ -13,6 +13,7 @@ using FabAccessAPI.Exceptions;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Security.Authentication;
+using FabAccessAPI;
namespace Borepin.Service.BFFH
{
@@ -22,7 +23,6 @@ namespace Borepin.Service.BFFH
private readonly ConnectionStorage _ConnectionStorage;
private readonly ConnectionCredentialStorage _ConnectionCredentialStorage;
- private FabAccessAPI.Connection _APIConnection;
private Connection_Plain _CurrentConnection;
#endregion
@@ -37,31 +37,9 @@ namespace Borepin.Service.BFFH
#region Fields
///
- /// Current Connection of Service
+ /// API Connection
///
- public Connection CurrentConnection
- {
- get
- {
- return _CurrentConnection;
- }
- }
-
- ///
- /// Check if Service is connected to a Server
- ///
- public bool IsConnected
- {
- get
- {
- if (_APIConnection != null && _APIConnection.RpcClient != null)
- {
- return _APIConnection.RpcClient.State == Capnp.Rpc.ConnectionState.Active;
- }
-
- return false;
- }
- }
+ public API API { get; private set; }
#endregion
#region Method
@@ -78,7 +56,7 @@ namespace Borepin.Service.BFFH
///
public async Task RemoveConnection(Connection connection)
{
- if (IsConnected && connection.Equals(CurrentConnection))
+ if (API != null && API.IsConnected && connection.Equals(_CurrentConnection))
{
await Disconnect().ConfigureAwait(false);
}
@@ -109,7 +87,6 @@ namespace Borepin.Service.BFFH
{
try
{
-
TcpRpcClient rpcClient = await _ConnectAsync(connection.Address.Host, connection.Address.Port).ConfigureAwait(false);
rpcClient.Dispose();
@@ -176,7 +153,6 @@ namespace Borepin.Service.BFFH
///
public async Task Connect(Connection connection, string password)
{
-
try
{
TcpRpcClient rpcClient = await _ConnectAsync(connection.Address.Host, connection.Address.Port).ConfigureAwait(false);
@@ -229,6 +205,10 @@ namespace Borepin.Service.BFFH
_APIConnection = new FabAccessAPI.Connection(rpcClient);
}
+ catch
+ {
+
+ }
}
///
diff --git a/FabAccessAPI/API.cs b/FabAccessAPI/API.cs
index 91042c5..27af1d5 100644
--- a/FabAccessAPI/API.cs
+++ b/FabAccessAPI/API.cs
@@ -1,8 +1,10 @@
using Capnp.Rpc;
using FabAccessAPI.Exceptions;
using FabAccessAPI.Schema;
+using S22.Sasl;
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
@@ -13,7 +15,8 @@ namespace FabAccessAPI
public class API : IAPI
{
#region Private Members
- private Connection _APIConnection;
+ private TcpRpcClient _TcpRpcClient;
+ private IBootstrap _Bootstrap;
#endregion
#region Constructors
@@ -25,6 +28,25 @@ namespace FabAccessAPI
#region Events
public event EventHandler ConnectionStatusChanged;
+
+ public void OnTcpRpcConnectionChanged(object sender, ConnectionStateChange args)
+ {
+ EventHandler eventHandler = ConnectionStatusChanged;
+
+ if (eventHandler == null)
+ {
+ return;
+ }
+
+ if (args.LastState == ConnectionState.Initializing && args.NewState == ConnectionState.Active)
+ {
+ eventHandler(this, ConnectionStatusChange.Connected);
+ }
+ if (args.LastState == ConnectionState.Active && args.NewState == ConnectionState.Down)
+ {
+ eventHandler(this, ConnectionStatusChange.ConnectionLoss);
+ }
+ }
#endregion
#region Members
@@ -36,17 +58,11 @@ namespace FabAccessAPI
{
get
{
- return _APIConnection != null && _APIConnection.RpcClient.State == ConnectionState.Active;
+ return _TcpRpcClient != null && _TcpRpcClient.State == ConnectionState.Active;
}
}
- public Session Session
- {
- get
- {
- throw new NotImplementedException();
- }
- }
+ public Session Session { get; private set; }
#endregion
#region Methods
@@ -55,20 +71,33 @@ namespace FabAccessAPI
///
///
///
- public async Task Connect(ConnectionData connectionData)
+ public async Task Connect(ConnectionData connectionData, TcpRpcClient tcpRpcClient = null)
{
if (IsConnected)
{
await Disconnect();
}
- TcpRpcClient rpcClient = await _ConnectAsync(connectionData).ConfigureAwait(false);
-
- _APIConnection = new Connection(rpcClient);
+ if(tcpRpcClient == null)
+ {
+ _TcpRpcClient = new TcpRpcClient();
+ }
+ else
+ {
+ _TcpRpcClient = tcpRpcClient;
+ }
try
{
- await _Authenticate(connectionData).ConfigureAwait(false);
+ _TcpRpcClient.ConnectionStateChanged += OnTcpRpcConnectionChanged;
+
+ await _ConnectAsync(_TcpRpcClient, connectionData).ConfigureAwait(false);
+
+ _Bootstrap = _TcpRpcClient.GetMain();
+ ConnectionInfo = await _GetConnectionInfo(_Bootstrap);
+
+ Session = await _Authenticate(connectionData).ConfigureAwait(false);
+ ConnectionData = connectionData;
}
catch(System.Exception)
{
@@ -81,45 +110,68 @@ namespace FabAccessAPI
{
if (IsConnected)
{
- _APIConnection.RpcClient?.Dispose();
+ _TcpRpcClient.Dispose();
}
-
- _APIConnection = null;
+
+ _Bootstrap = null;
+ Session = null;
+ _TcpRpcClient = null;
ConnectionData = null;
ConnectionInfo = null;
+ EventHandler eventHandler = ConnectionStatusChanged;
+ if (eventHandler != null)
+ {
+ eventHandler(this, ConnectionStatusChange.Disconnected);
+ }
+
return Task.CompletedTask;
}
- public Task Reconnect()
+ public async Task Reconnect()
{
- throw new NotImplementedException();
+ if (ConnectionData != null)
+ {
+ await Connect(ConnectionData);
+ }
+
+ EventHandler eventHandler = ConnectionStatusChanged;
+ if (eventHandler != null)
+ {
+ eventHandler(this, ConnectionStatusChange.Reconnected);
+ }
}
- public async Task TestConnection(ConnectionData connectionData)
+ public async Task TestConnection(ConnectionData connectionData, TcpRpcClient tcpRpcClient = null)
{
try
{
- TcpRpcClient rpcClient = await _ConnectAsync(connectionData).ConfigureAwait(false);
- Connection testConnection = new Connection(rpcClient);
-
- rpcClient.Dispose();
-
- ConnectionInfo connectionInfo = new ConnectionInfo()
+ if (tcpRpcClient == null)
{
- APIVersion = testConnection.
+ tcpRpcClient = new TcpRpcClient();
}
- return true;
+ await _ConnectAsync(tcpRpcClient, connectionData).ConfigureAwait(false);
+ IBootstrap testBootstrap = tcpRpcClient.GetMain();
+
+ ConnectionInfo connectionInfo = await _GetConnectionInfo(testBootstrap).ConfigureAwait(false);
+
+ tcpRpcClient.Dispose();
+
+ return connectionInfo;
}
catch
{
- return null;
+ throw new ConnectingFailedException();
}
}
#endregion
#region Private Methods
+ ///
+ /// Validate Certificate
+ /// TODO: Do some validation
+ ///
private static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// TODO Cert Check
@@ -132,9 +184,8 @@ namespace FabAccessAPI
/// TLS Error
/// Based on RPC Exception
///
- private async Task _ConnectAsync(ConnectionData connectionData)
+ private async Task _ConnectAsync(TcpRpcClient rpcClient, ConnectionData connectionData)
{
- TcpRpcClient rpcClient = new TcpRpcClient();
rpcClient.InjectMidlayer((tcpstream) =>
{
var sslStream = new SslStream(tcpstream, false, new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback));
@@ -154,8 +205,6 @@ namespace FabAccessAPI
{
rpcClient.Connect(connectionData.Host.Host, connectionData.Host.Port);
await rpcClient.WhenConnected.ConfigureAwait(false);
-
- return rpcClient;
}
catch (RpcException exception) when (string.Equals(exception.Message, "TcpRpcClient is unable to connect", StringComparison.Ordinal))
{
@@ -163,13 +212,29 @@ namespace FabAccessAPI
}
}
+ ///
+ /// Create ConnectionInfo from Bootstrap
+ ///
+ private async Task _GetConnectionInfo(IBootstrap bootstrap)
+ {
+ ConnectionInfo connectionInfo = new ConnectionInfo()
+ {
+ APIVersion = await bootstrap.GetAPIVersion().ConfigureAwait(false),
+ Mechanisms = new List(await bootstrap.Mechanisms().ConfigureAwait(false)),
+ ServerName = (await bootstrap.GetServerRelease().ConfigureAwait(false)).Item1,
+ ServerRelease = (await bootstrap.GetServerRelease().ConfigureAwait(false)).Item2,
+ };
+
+ return connectionInfo;
+ }
+
///
/// Authenticate connection with ConnectionData
///
///
///
///
- private async Task _Authenticate(ConnectionData connectionData)
+ private async Task _Authenticate(ConnectionData connectionData)
{
Dictionary joinedProperties = new Dictionary();
foreach(KeyValuePair keyValuePair in connectionData.Properties)
@@ -181,7 +246,72 @@ namespace FabAccessAPI
joinedProperties.Add(keyValuePair.Key, keyValuePair.Value);
}
- await _APIConnection.Auth(MechanismString.ToString(connectionData.Mechanism), joinedProperties).ConfigureAwait(false);
+ IAuthentication? authentication = await _Bootstrap.CreateSession(MechanismString.ToString(connectionData.Mechanism)).ConfigureAwait(false);
+
+ return await _SASLAuthenticate(authentication, MechanismString.ToString(connectionData.Mechanism), joinedProperties).ConfigureAwait(false);
+ }
+
+ ///
+ /// Authenticate Connection to get Session
+ ///
+ ///
+ ///
+ ///
+ public async Task _SASLAuthenticate(IAuthentication authentication, string mech, Dictionary properties)
+ {
+ SaslMechanism? saslMechanism = SaslFactory.Create(mech);
+ foreach (KeyValuePair entry in properties)
+ {
+ saslMechanism.Properties.Add(entry.Key, entry.Value);
+ }
+
+ byte[] data = new byte[0];
+
+ if (saslMechanism.HasInitial)
+ {
+ data = saslMechanism.GetResponse(new byte[0]);
+ }
+
+ Response? response = await authentication.Step(data);
+ while (!saslMechanism.IsCompleted)
+ {
+ if(response.Failed != null)
+ {
+ break;
+ }
+ if(response.Challenge != null)
+ {
+ byte[]? additional = saslMechanism.GetResponse(response.Challenge.ToArray());
+ response = await authentication.Step(additional);
+ }
+ else
+ {
+ throw new AuthenticationFailedException();
+ }
+ }
+
+ if (response.Successful != null)
+ {
+ return response.Successful.Session;
+ }
+ else if (response.Failed != null)
+ {
+ switch (response.Failed.Code)
+ {
+ case Response.Error.badMechanism:
+ throw new BadMechanismException();
+ case Response.Error.invalidCredentials:
+ throw new InvalidCredentialsException();
+ case Response.Error.aborted:
+ case Response.Error.failed:
+ default:
+ throw new AuthenticationFailedException(response.Failed.AdditionalData.ToArray());
+ }
+ }
+ else
+ {
+ throw new AuthenticationFailedException();
+ }
}
#endregion
}
diff --git a/FabAccessAPI/Auth.cs b/FabAccessAPI/Auth.cs
deleted file mode 100644
index 231952a..0000000
--- a/FabAccessAPI/Auth.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using FabAccessAPI.Schema;
-using S22.Sasl;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using FabAccessAPI.Exceptions;
-using System.Linq;
-
-namespace FabAccessAPI
-{
- ///
- /// Authenticate with SASL
- ///
- public class Auth
- {
- #region Private Fields
- private readonly IAuthentication _AuthCap;
- #endregion
-
- #region Constructors
- public Auth(IAuthentication authCap)
- {
- _AuthCap = authCap;
- }
- #endregion
-
- #region Methods
- ///
- /// Authenticate Connection to get Session
- ///
- ///
- ///
- ///
- public async Task Authenticate(string mech, Dictionary properties)
- {
- SaslMechanism? saslMechanism = SaslFactory.Create(mech);
- foreach (KeyValuePair entry in properties)
- {
- saslMechanism.Properties.Add(entry.Key, entry.Value);
- }
-
- byte[] data = new byte[0];
-
- if (saslMechanism.HasInitial)
- {
- data = saslMechanism.GetResponse(new byte[0]);
- }
-
- Response? response = await _AuthCap.Step(data);
- while (!saslMechanism.IsCompleted)
- {
- if(response.Failed != null)
- {
- break;
- }
- if(response.Challenge != null)
- {
- byte[]? additional = saslMechanism.GetResponse(response.Challenge.ToArray());
- response = await _AuthCap.Step(additional);
- }
- else
- {
- throw new AuthenticationFailedException();
- }
- }
-
- if (response.Successful != null)
- {
- return response.Successful.Session;
- }
- else if (response.Failed != null)
- {
- switch (response.Failed.Code)
- {
- case Response.Error.badMechanism:
- throw new BadMechanismException();
- case Response.Error.invalidCredentials:
- throw new InvalidCredentialsException();
- case Response.Error.aborted:
- case Response.Error.failed:
- default:
- throw new AuthenticationFailedException(response.Failed.AdditionalData.ToArray());
- }
- }
- else
- {
- throw new AuthenticationFailedException();
- }
- }
- #endregion
- }
-}
diff --git a/FabAccessAPI/Connection.cs b/FabAccessAPI/Connection.cs
deleted file mode 100644
index 34ade82..0000000
--- a/FabAccessAPI/Connection.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using Capnp.Rpc;
-using FabAccessAPI.Exceptions;
-using FabAccessAPI.Schema;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace FabAccessAPI
-{
- public class Connection
- {
- #region Private Fields
- private readonly IBootstrap? _BootstrapCap = null;
- private Auth? _Auth = null;
- #endregion
-
- #region Constructors
- ///
- ///
- ///
- /// Should be an already configured and connected TcpRpcClient
- public Connection(TcpRpcClient rpcClient)
- {
- RpcClient = rpcClient;
- _BootstrapCap = RpcClient.GetMain();
- }
- #endregion
-
- #region Fields
- public TcpRpcClient? RpcClient { get; } = null;
-
- public Session? Session { get; private set; } = null;
- #endregion
-
- #region Methods
- ///
- /// Authenticate this connection.
- /// Calling this more then once is UB
- ///
- /// The desired authentication mechanism
- /// Key-Value data specific to the mechanism
- ///
- ///
- ///
- public async Task Auth(string mech, Dictionary kvs, CancellationToken cancellationToken_ = default)
- {
- IReadOnlyList? mechs = await _BootstrapCap.Mechanisms();
- if (!mechs.Contains(mech))
- {
- throw new UnsupportedMechanismException();
- }
-
- if (_Auth == null)
- {
- IAuthentication? authCap = await _BootstrapCap.CreateSession(mech, cancellationToken_).ConfigureAwait(false);
- _Auth = new Auth(authCap);
- }
-
- Session = await _Auth.Authenticate(mech, kvs);
- }
- #endregion
- }
-}
diff --git a/FabAccessAPI/ConnectionInfo.cs b/FabAccessAPI/ConnectionInfo.cs
index e0870a3..33c65e9 100644
--- a/FabAccessAPI/ConnectionInfo.cs
+++ b/FabAccessAPI/ConnectionInfo.cs
@@ -5,7 +5,7 @@ namespace FabAccessAPI
{
public class ConnectionInfo
{
- public Version APIVersion;
+ public Schema.Version APIVersion;
public string ServerName;
public string ServerRelease;
public List Mechanisms;
diff --git a/FabAccessAPI/IAPI.cs b/FabAccessAPI/IAPI.cs
index 0d6d203..5818e34 100644
--- a/FabAccessAPI/IAPI.cs
+++ b/FabAccessAPI/IAPI.cs
@@ -1,4 +1,5 @@
-using FabAccessAPI.Schema;
+using Capnp.Rpc;
+using FabAccessAPI.Schema;
using System;
using System.Threading.Tasks;
@@ -36,7 +37,7 @@ namespace FabAccessAPI
/// Connect to BFFH Server
///
///
- Task Connect(ConnectionData connectionData);
+ Task Connect(ConnectionData connectionData, TcpRpcClient tcpRpcClient);
///
/// Disconnect from BFFH Server
@@ -52,6 +53,6 @@ namespace FabAccessAPI
/// Connect to Server and get ConnectionInfo.
/// The Connection is not maintained.
///
- ConnectionInfo TestConnection(ConnectionData connectionData);
+ Task TestConnection(ConnectionData connectionData, TcpRpcClient tcpRpcClient);
}
}
diff --git a/FabAccessAPI_Test/API_Test.cs b/FabAccessAPI_Test/API_Test.cs
index e631ed8..2cabfed 100644
--- a/FabAccessAPI_Test/API_Test.cs
+++ b/FabAccessAPI_Test/API_Test.cs
@@ -1,39 +1,17 @@
+using Capnp.Rpc;
using FabAccessAPI;
using FabAccessAPI.Exceptions;
using NUnit.Framework;
using System;
using System.Collections.Generic;
+using System.Threading;
using System.Threading.Tasks;
namespace FabAccessAPI_Test
{
public class API_Test
{
- [TestCase("Admin1")]
- public async Task ConnectDisconnect(string username)
- {
- API api = new API();
-
- ConnectionData connectionData = new ConnectionData()
- {
- Host = new UriBuilder(TestEnv.SCHEMA, TestEnv.TESTSERVER, TestEnv.TESTSERVER_PORT).Uri,
- Mechanism = Mechanism.PLAIN,
- Username = username,
- Properties = new Dictionary()
- {
- { "Username", username }
- },
- SecretProperties = new Dictionary()
- {
- { "Password", TestEnv.PASSWORD }
- }
- };
-
- await api.Connect(connectionData);
- await api.Disconnect();
- }
-
[Test]
public async Task Connect_HostUnreachable()
{
@@ -41,12 +19,12 @@ namespace FabAccessAPI_Test
ConnectionData connectionData = new ConnectionData()
{
- Host = new UriBuilder(TestEnv.SCHEMA, "NotReachable." + TestEnv.TESTSERVER, TestEnv.TESTSERVER_PORT).Uri,
+ Host = new UriBuilder(TestEnv.SCHEMA, "UnkownHost" + TestEnv.TESTSERVER, TestEnv.TESTSERVER_PORT).Uri,
Mechanism = Mechanism.PLAIN,
- Username = "UnknownUser",
+ Username = "UnkownUser",
Properties = new Dictionary()
{
- { "Username", "UnknownUser" }
+ { "Username", "UnkownUser" }
},
SecretProperties = new Dictionary()
{
@@ -70,20 +48,7 @@ namespace FabAccessAPI_Test
{
API api = new API();
- ConnectionData connectionData = new ConnectionData()
- {
- Host = new UriBuilder(TestEnv.SCHEMA, TestEnv.TESTSERVER, TestEnv.TESTSERVER_PORT).Uri,
- Mechanism = Mechanism.PLAIN,
- Username = "UnknownUser",
- Properties = new Dictionary()
- {
- { "Username", "UnknownUser" }
- },
- SecretProperties = new Dictionary()
- {
- { "Password", TestEnv.PASSWORD }
- }
- };
+ ConnectionData connectionData = TestEnv.CreateConnetionData("UnkownUser");
try
{
@@ -95,5 +60,124 @@ namespace FabAccessAPI_Test
}
Assert.Fail();
}
+
+ [TestCase("Admin1")]
+ public async Task ConnectDisconnect(string username)
+ {
+ API api = new API();
+
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+
+ bool event_Connected = false;
+ bool event_Disconnected = false;
+ api.ConnectionStatusChanged += (sender, eventArgs) =>
+ {
+ if (eventArgs == ConnectionStatusChange.Connected)
+ {
+ event_Connected = true;
+ }
+ if(eventArgs == ConnectionStatusChange.Disconnected)
+ {
+ event_Disconnected = true;
+ }
+ };
+
+ await api.Connect(connectionData);
+
+ bool HasSesion = api.Session != null;
+ bool HasConnectionData = api.ConnectionData != null;
+ bool HasConnectionInfo = api.ConnectionInfo != null;
+ bool IsConnected = api.IsConnected;
+
+ await api.Disconnect();
+
+ Thread.Sleep(3000);
+ Assert.Multiple(() =>
+ {
+ Assert.IsTrue(event_Connected, "event_Connected");
+ Assert.IsTrue(event_Disconnected, "event_Disconnected");
+
+ Assert.IsTrue(HasSesion, "HasSesion");
+ Assert.IsTrue(HasConnectionData, "HasConnectionData");
+ Assert.IsTrue(HasConnectionInfo, "HasConnectionInfo");
+ Assert.IsTrue(IsConnected, "IsConnected");
+
+ Assert.IsFalse(api.IsConnected, "api.IsConnected");
+ });
+ }
+
+ [TestCase("Admin1")]
+ public async Task TestConnectíon(string username)
+ {
+ API api = new API();
+
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+
+ ConnectionInfo connectionInfo = await api.TestConnection(connectionData);
+
+ Assert.IsNotNull(connectionInfo);
+ }
+
+ [TestCase("Admin1"), Explicit]
+ public async Task Reconnect(string username)
+ {
+ API api = new API();
+
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+
+ bool event_Connected = false;
+ bool event_ConnectionLoss = false;
+ bool event_Reconnect = false;
+ bool event_Disconnected = false;
+
+ api.ConnectionStatusChanged += (sender, eventArgs) =>
+ {
+ if (eventArgs == ConnectionStatusChange.Connected)
+ {
+ event_Connected = true;
+ }
+ if (eventArgs == ConnectionStatusChange.ConnectionLoss)
+ {
+ event_ConnectionLoss = true;
+ }
+ if (eventArgs == ConnectionStatusChange.Reconnected)
+ {
+ event_Reconnect = true;
+ }
+ if (eventArgs == ConnectionStatusChange.Disconnected)
+ {
+ event_Disconnected = true;
+ }
+ };
+
+ TcpRpcClient tcpRpcClient = new TcpRpcClient();
+ await api.Connect(connectionData, tcpRpcClient);
+
+ try
+ {
+ // Stop here and cut internet connection
+ await api.Session.MachineSystem.Info.GetMachineList().ConfigureAwait(false);
+ }
+ catch
+ {
+
+ }
+ Thread.Sleep(3000);
+
+ // Stop here and connect with internet again
+ await api.Reconnect();
+ await api.Disconnect();
+
+ Thread.Sleep(3000);
+ Assert.Multiple(() =>
+ {
+ Assert.IsTrue(event_Connected, "event_Connected");
+ Assert.IsTrue(event_ConnectionLoss, "event_ConnectionLoss");
+ Assert.IsTrue(event_Reconnect, "event_Reconnect");
+ Assert.IsTrue(event_Disconnected, "event_Disconnected");
+ });
+ }
+
+
}
}
diff --git a/FabAccessAPI_Test/API_TestEnv_Test.cs b/FabAccessAPI_Test/API_TestEnv_Test.cs
index 50fe060..8481345 100644
--- a/FabAccessAPI_Test/API_TestEnv_Test.cs
+++ b/FabAccessAPI_Test/API_TestEnv_Test.cs
@@ -12,50 +12,6 @@ using static FabAccessAPI.Schema.Machine;
namespace FabAccessAPI_Test
{
- public static class API_TestEnv_Test
- {
- public const string TESTSERVER = "bffh.lab.bln.kjknet.de";
- public const int TESTSERVER_PORT = 59666;
- public const string PASSWORD = "secret";
-
- public static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
- {
- return true;
- }
-
- public static async Task Connect(string username)
- {
- TcpRpcClient tcpRpcClient = new TcpRpcClient();
- tcpRpcClient.InjectMidlayer((tcpstream) =>
- {
- var sslStream = new SslStream(tcpstream, false, new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback));
- try
- {
- sslStream.AuthenticateAsClient("bffhd");
- return sslStream;
- }
- catch (AuthenticationException)
- {
- sslStream.Close();
- throw;
- }
- });
-
- tcpRpcClient.Connect(TESTSERVER, TESTSERVER_PORT);
- await tcpRpcClient.WhenConnected;
-
- Connection connection = new Connection(tcpRpcClient);
- await connection.Auth("PLAIN", new Dictionary(StringComparer.Ordinal) { { "Username", username }, { "Password", PASSWORD } });
-
- return connection;
- }
-
- public static void Disconnect(Connection connection)
- {
- connection.RpcClient.Dispose();
- }
- }
-
[TestFixture, Parallelizable(ParallelScope.Children)]
[Order(1)]
public class MachineSystem_Test
@@ -92,10 +48,11 @@ namespace FabAccessAPI_Test
[Order(2)]
public async Task AccessMachineSystem_Info(string username, bool expectAllow)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Assert.AreEqual(expectAllow, !((MachineSystem.InfoInterface_Proxy)session.MachineSystem.Info).IsNull);
+ Assert.AreEqual(expectAllow, !((MachineSystem.InfoInterface_Proxy)api.Session.MachineSystem.Info).IsNull);
}
[TestCase("Admin1", 15)]
@@ -117,14 +74,15 @@ namespace FabAccessAPI_Test
[Order(3)]
public async Task ListMachines(string username, int expectedMachineCount)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- IReadOnlyList machine_list = await session.MachineSystem.Info.GetMachineList().ConfigureAwait(false);
+ IReadOnlyList machine_list = await api.Session.MachineSystem.Info.GetMachineList().ConfigureAwait(false);
int result = machine_list.Count;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectedMachineCount, result);
}
@@ -156,14 +114,15 @@ namespace FabAccessAPI_Test
[Order(4)]
public async Task GetMachineByName(string username, string machineName, bool expectedAllow)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Optional optional = await session.MachineSystem.Info.GetMachine(machineName).ConfigureAwait(false);
+ Optional optional = await api.Session.MachineSystem.Info.GetMachine(machineName).ConfigureAwait(false);
bool result = optional.Just != null;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectedAllow, result);
}
@@ -173,12 +132,13 @@ namespace FabAccessAPI_Test
[Order(5)]
public async Task GetMachineByName_WrongName(string username, string machineName)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Optional optional = await session.MachineSystem.Info.GetMachine(machineName).ConfigureAwait(false);
+ Optional optional = await api.Session.MachineSystem.Info.GetMachine(machineName).ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.IsNull(optional.Just);
}
@@ -211,13 +171,14 @@ namespace FabAccessAPI_Test
[Order(6)]
public async Task GetMachineByURN(string username, string urn, bool expectedAllow)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Optional optional = await session.MachineSystem.Info.GetMachineURN(urn).ConfigureAwait(false);
+ Optional optional = await api.Session.MachineSystem.Info.GetMachineURN(urn).ConfigureAwait(false);
bool result = optional.Just != null;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectedAllow, result);
}
@@ -228,12 +189,13 @@ namespace FabAccessAPI_Test
[Order(7)]
public async Task GetMachineByURN_WrongURN(string username, string urn)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Optional optional = await session.MachineSystem.Info.GetMachineURN(urn).ConfigureAwait(false);
+ Optional optional = await api.Session.MachineSystem.Info.GetMachineURN(urn).ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.IsNull(optional.Just);
}
@@ -264,14 +226,15 @@ namespace FabAccessAPI_Test
[Order(1)]
public async Task InfoInterface(string username, string machineID, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Machine machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
bool result = !((Machine.InfoInterface_Proxy)machine.Info).IsNull;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -297,14 +260,15 @@ namespace FabAccessAPI_Test
[Order(2)]
public async Task ManageInterface(string username, string machineID, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Machine machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
bool result = !((ManageInterface_Proxy)machine.Manage).IsNull;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -330,14 +294,15 @@ namespace FabAccessAPI_Test
[Order(3), Ignore("Not Implemented")]
public async Task AdminInterface(string username, string machineID, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Machine machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
bool result = !((AdminInterface_Proxy)machine.Admin).IsNull;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -348,12 +313,13 @@ namespace FabAccessAPI_Test
[Order(4)]
public async Task ReadMachineData(string username, string machineID, string description, string wiki, string category)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Machine machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.Multiple(() =>
{
@@ -373,10 +339,11 @@ namespace FabAccessAPI_Test
[SetUp]
public async Task SetUp()
{
- Connection connection = await API_TestEnv_Test.Connect("Admin1");
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData("Admin1");
+ await api.Connect(connectionData);
- IReadOnlyList machine_list = await session.MachineSystem.Info.GetMachineList().ConfigureAwait(false);
+ IReadOnlyList machine_list = await api.Session.MachineSystem.Info.GetMachineList().ConfigureAwait(false);
List tasks = new List();
foreach(Machine m in machine_list)
@@ -394,26 +361,27 @@ namespace FabAccessAPI_Test
[Order(1)]
public async Task UseGiveBack(string username, string machineID)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Machine machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
await machine.Use.Use().ConfigureAwait(false);
- machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine.Inuse.GiveBack().ConfigureAwait(false);
- machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(MachineState.free, machine.State);
}
@@ -424,36 +392,38 @@ namespace FabAccessAPI_Test
[Order(2), Ignore("Not Implemented")]
public async Task TransferMachine(string username1, string username2, string machineID)
{
- Connection connection1 = await API_TestEnv_Test.Connect(username1);
- Session session1 = connection1.Session;
+ API api1 = new API();
+ ConnectionData connectionData1 = TestEnv.CreateConnetionData(username1);
+ await api1.Connect(connectionData1);
- Connection connection2 = await API_TestEnv_Test.Connect(username2);
- Session session2 = connection1.Session;
+ API api2 = new API();
+ ConnectionData connectionData2 = TestEnv.CreateConnetionData(username2);
+ await api2.Connect(connectionData2);
- Machine machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine1.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
await machine1.Use.Use().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.Releasefortakeover().ConfigureAwait(false);
- Machine machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine2.Takeover.Accept().ConfigureAwait(false);
- machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine2.Inuse.GiveBack().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.AreEqual(MachineState.free, machine1.State);
}
@@ -464,36 +434,38 @@ namespace FabAccessAPI_Test
[Order(3), Ignore("Not Implemented")]
public async Task TransferMachine_Reject(string username1, string username2, string machineID)
{
- Connection connection1 = await API_TestEnv_Test.Connect(username1);
- Session session1 = connection1.Session;
+ API api1 = new API();
+ ConnectionData connectionData1 = TestEnv.CreateConnetionData(username1);
+ await api1.Connect(connectionData1);
- Connection connection2 = await API_TestEnv_Test.Connect(username2);
- Session session2 = connection1.Session;
+ API api2 = new API();
+ ConnectionData connectionData2 = TestEnv.CreateConnetionData(username2);
+ await api2.Connect(connectionData2);
- Machine machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine1.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
await machine1.Use.Use().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.Releasefortakeover().ConfigureAwait(false);
- Machine machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine2.Takeover.Reject().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.GiveBack().ConfigureAwait(false);
- machine2 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine2 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.AreEqual(MachineState.free, machine2.State);
}
@@ -504,33 +476,35 @@ namespace FabAccessAPI_Test
[Order(4), Ignore("Not Implemented")]
public async Task CheckMachine(string username1, string username2, string machineID)
{
- Connection connection1 = await API_TestEnv_Test.Connect(username1);
- Session session1 = connection1.Session;
+ API api1 = new API();
+ ConnectionData connectionData1 = TestEnv.CreateConnetionData(username1);
+ await api1.Connect(connectionData1);
- Connection connection2 = await API_TestEnv_Test.Connect(username2);
- Session session2 = connection1.Session;
+ API api2 = new API();
+ ConnectionData connectionData2 = TestEnv.CreateConnetionData(username2);
+ await api2.Connect(connectionData2);
- Machine machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine1.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
await machine1.Use.Use().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.GiveBack().ConfigureAwait(false);
- Machine machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine2.Check.Check().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.AreEqual(MachineState.free, machine1.State);
}
@@ -541,40 +515,42 @@ namespace FabAccessAPI_Test
[Order(5), Ignore("Not Implemented")]
public async Task CheckMachine_Reject(string username1, string username2, string machineID)
{
- Connection connection1 = await API_TestEnv_Test.Connect(username1);
- Session session1 = connection1.Session;
+ API api1 = new API();
+ ConnectionData connectionData1 = TestEnv.CreateConnetionData(username1);
+ await api1.Connect(connectionData1);
- Connection connection2 = await API_TestEnv_Test.Connect(username2);
- Session session2 = connection1.Session;
+ API api2 = new API();
+ ConnectionData connectionData2 = TestEnv.CreateConnetionData(username2);
+ await api2.Connect(connectionData2);
- Machine machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine1.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
await machine1.Use.Use().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.GiveBack().ConfigureAwait(false);
- Machine machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine2.Check.Reject().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.GiveBack().ConfigureAwait(false);
- machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine2.Check.Check().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
Assert.AreEqual(MachineState.free, machine1.State);
}
@@ -583,37 +559,42 @@ namespace FabAccessAPI_Test
[Order(4), Ignore("Not Implemented")]
public async Task CheckMachine_NoPermission(string username1, string username2, string username3, string machineID)
{
- Connection connection1 = await API_TestEnv_Test.Connect(username1);
- Session session1 = connection1.Session;
+ API api1 = new API();
+ ConnectionData connectionData1 = TestEnv.CreateConnetionData(username1);
+ await api1.Connect(connectionData1);
- Connection connection2 = await API_TestEnv_Test.Connect(username2);
- Session session2 = connection1.Session;
+ API api2 = new API();
+ ConnectionData connectionData2 = TestEnv.CreateConnetionData(username2);
+ await api2.Connect(connectionData2);
- Connection connection3 = await API_TestEnv_Test.Connect(username3);
- Session session3 = connection3.Session;
+ API api3 = new API();
+ ConnectionData connectionData3 = TestEnv.CreateConnetionData(username3);
+ await api3.Connect(connectionData3);
- Machine machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine1.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
+ await api3.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
await machine1.Use.Use().ConfigureAwait(false);
- machine1 = (await session1.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ machine1 = (await api1.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine1.Inuse.GiveBack().ConfigureAwait(false);
- Machine machine2 = (await session2.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine2 = (await api2.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
bool result = ((CheckInterface_Proxy)machine2.Check).IsNull;
- Machine machine3 = (await session3.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine3 = (await api3.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
await machine3.Check.Check().ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection1);
- API_TestEnv_Test.Disconnect(connection2);
+ await api1.Disconnect();
+ await api2.Disconnect();
+ await api3.Disconnect();
Assert.IsTrue(result);
}
@@ -622,21 +603,22 @@ namespace FabAccessAPI_Test
[Order(5)]
public async Task CurrentUser(string username, string machineID)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- Machine machine = (await session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
+ Machine machine = (await api.Session.MachineSystem.Info.GetMachine(machineID).ConfigureAwait(false)).Just;
// Check State before run Test
if (machine.State != MachineState.free)
{
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.Inconclusive("State is not 'free'");
}
MachineInfoExtended machineInfoExtended = await machine.Manage.GetMachineInfoExtended().ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.IsNull(machineInfoExtended.CurrentUser.Just);
}
@@ -653,12 +635,13 @@ namespace FabAccessAPI_Test
[Order(1)]
public async Task AccessPermissionSystem(string username, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- bool result = session.PermissionSystem != null;
+ bool result = api.Session.PermissionSystem != null;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -689,12 +672,13 @@ namespace FabAccessAPI_Test
[Order(3), Ignore("Not Implemented")]
public async Task ListRoles(string username, int expectRolesCount)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- IReadOnlyList roles_list = await session.PermissionSystem.Info.GetRoleList().ConfigureAwait(false);
+ IReadOnlyList roles_list = await api.Session.PermissionSystem.Info.GetRoleList().ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectRolesCount, roles_list.Count);
}
@@ -749,12 +733,13 @@ namespace FabAccessAPI_Test
[Order(4)]
public async Task GetUserSelf(string username)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- User user = await session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
+ User user = await api.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.IsNotNull(user);
}
@@ -771,14 +756,15 @@ namespace FabAccessAPI_Test
[Order(1)]
public async Task InfoInterface(string username, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- User user = await session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
+ User user = await api.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
bool result = !((User.InfoInterface_Proxy)user.Info).IsNull;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -790,14 +776,15 @@ namespace FabAccessAPI_Test
[Order(2), Ignore("Not Implemented")]
public async Task ManageInterface(string username, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- User user = await session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
+ User user = await api.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
bool result = !((User.ManageInterface_Proxy)user.Manage).IsNull;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -809,14 +796,15 @@ namespace FabAccessAPI_Test
[Order(3), Ignore("Not Implemented")]
public async Task AdminInterface(string username, bool expectInterface)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- User user = await session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
+ User user = await api.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
bool result = !((User.AdminInterface_Proxy)user.Admin).IsNull;
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.AreEqual(expectInterface, result);
}
@@ -828,12 +816,13 @@ namespace FabAccessAPI_Test
[Order(4)]
public async Task ReadUserData(string username)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- User user = await session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
+ User user = await api.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
Assert.Multiple(() =>
{
@@ -848,15 +837,16 @@ namespace FabAccessAPI_Test
[Order(5), Ignore("Not Implemented")]
public async Task ListUserRoles(string username, params string[] expect_roles)
{
- Connection connection = await API_TestEnv_Test.Connect(username);
- Session session = connection.Session;
+ API api = new API();
+ ConnectionData connectionData = TestEnv.CreateConnetionData(username);
+ await api.Connect(connectionData);
- User user = await session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
+ User user = await api.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
List roles_user = new List(await user.Info.ListRoles().ConfigureAwait(false));
List expect_roles_list = new List(expect_roles);
- API_TestEnv_Test.Disconnect(connection);
+ await api.Disconnect();
if (roles_user.Count != expect_roles_list.Count)
{
diff --git a/FabAccessAPI_Test/Connection_Test.cs b/FabAccessAPI_Test/Connection_Test.cs
deleted file mode 100644
index f7a97eb..0000000
--- a/FabAccessAPI_Test/Connection_Test.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using Capnp.Rpc;
-using FabAccessAPI;
-using NUnit.Framework;
-using System;
-using System.Collections.Generic;
-using System.Net.Security;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-using System.Threading.Tasks;
-
-namespace FabAccessAPI_Test
-{
- [TestFixture, Order(0)]
- public class Connection_Test
- {
- const string TESTSERVER = "bffh.lab.bln.kjknet.de";
- const int TESTSERVER_PORT = 59666;
-
- private static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
- {
- return true;
- }
-
- [TestCase(TESTSERVER, TESTSERVER_PORT)]
- public async Task Connect(string host, int port)
- {
- TcpRpcClient tcpRpcClient = new TcpRpcClient();
- tcpRpcClient.InjectMidlayer((tcpstream) =>
- {
- var sslStream = new SslStream(tcpstream, false, new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback));
- try
- {
- sslStream.AuthenticateAsClient("bffhd");
- return sslStream;
- }
- catch (AuthenticationException)
- {
- sslStream.Close();
- throw;
- }
- });
- tcpRpcClient.Connect(host, port);
- await tcpRpcClient.WhenConnected;
-
- Connection connection = new Connection(tcpRpcClient);
- }
-
- [TestCase(TESTSERVER, TESTSERVER_PORT, "Admin1", "secret")]
- public async Task Authenticate_PLAIN(string host, int port, string username, string password)
- {
- TcpRpcClient tcpRpcClient = new TcpRpcClient();
- tcpRpcClient.InjectMidlayer((tcpstream) =>
- {
- var sslStream = new SslStream(tcpstream, false, new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback));
- try
- {
- sslStream.AuthenticateAsClient("bffhd");
- return sslStream;
- }
- catch (AuthenticationException)
- {
- sslStream.Close();
- throw;
- }
- });
- tcpRpcClient.Connect(host, port);
- await tcpRpcClient.WhenConnected;
-
- Connection connection = new Connection(tcpRpcClient);
- await connection.Auth("PLAIN", new Dictionary(StringComparer.Ordinal) { { "Username", username }, { "Password", password } });
-
- Assert.IsNotNull(connection.Session);
- }
- }
-}
\ No newline at end of file
diff --git a/FabAccessAPI_Test/TestEnv.cs b/FabAccessAPI_Test/TestEnv.cs
index adf2f83..538b8fc 100644
--- a/FabAccessAPI_Test/TestEnv.cs
+++ b/FabAccessAPI_Test/TestEnv.cs
@@ -1,4 +1,8 @@
-namespace FabAccessAPI_Test
+using FabAccessAPI;
+using System;
+using System.Collections.Generic;
+
+namespace FabAccessAPI_Test
{
public static class TestEnv
{
@@ -6,5 +10,25 @@
public const string TESTSERVER = "bffh.lab.bln.kjknet.de";
public const int TESTSERVER_PORT = 59666;
public const string PASSWORD = "secret";
+
+ public static ConnectionData CreateConnetionData(string username)
+ {
+ ConnectionData connectionData = new ConnectionData()
+ {
+ Host = new UriBuilder(TestEnv.SCHEMA, TestEnv.TESTSERVER, TestEnv.TESTSERVER_PORT).Uri,
+ Mechanism = Mechanism.PLAIN,
+ Username = username,
+ Properties = new Dictionary()
+ {
+ { "Username", username }
+ },
+ SecretProperties = new Dictionary()
+ {
+ { "Password", TestEnv.PASSWORD }
+ }
+ };
+
+ return connectionData;
+ }
}
}