SEBWIN-219: Added ignore flag for service proxy.
This commit is contained in:
parent
ebc12934bf
commit
1e8eb858de
6 changed files with 59 additions and 13 deletions
|
@ -24,11 +24,14 @@ namespace SafeExamBrowser.Configuration.Settings
|
|||
|
||||
public ISettings LoadDefaults()
|
||||
{
|
||||
Current = new Settings();
|
||||
|
||||
// TODO
|
||||
var settings = new Settings();
|
||||
|
||||
return Current;
|
||||
// TODO
|
||||
settings.ServicePolicy = ServicePolicy.Optional;
|
||||
|
||||
Current = settings;
|
||||
|
||||
return settings;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,12 @@ namespace SafeExamBrowser.Contracts.Communication
|
|||
{
|
||||
public interface IServiceProxy
|
||||
{
|
||||
/// <summary>
|
||||
/// Instructs the proxy to ignore all operations or simulate a connection, where applicable. To be set e.g. when the service
|
||||
/// policy is optional and the service is not available.
|
||||
/// </summary>
|
||||
bool Ignore { set; }
|
||||
|
||||
/// <summary>
|
||||
/// Tries to connect to the service host.
|
||||
/// </summary>
|
||||
|
|
|
@ -96,7 +96,7 @@ namespace SafeExamBrowser.Core.Communication
|
|||
|
||||
private void CommunicationHostProxy_Faulted(object sender, EventArgs e)
|
||||
{
|
||||
Logger.Error("Communication channel has faulted!");
|
||||
Logger.Debug("Communication channel has faulted!");
|
||||
}
|
||||
|
||||
private string GetChannelState()
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using SafeExamBrowser.Contracts.Communication;
|
||||
using SafeExamBrowser.Contracts.Logging;
|
||||
using SafeExamBrowser.Core.Communication.Messages;
|
||||
|
@ -15,20 +14,40 @@ namespace SafeExamBrowser.Core.Communication
|
|||
{
|
||||
public class ServiceProxy : BaseProxy, IServiceProxy
|
||||
{
|
||||
public bool Ignore { private get; set; }
|
||||
|
||||
public ServiceProxy(ILogger logger, string address) : base(logger, address)
|
||||
{
|
||||
}
|
||||
|
||||
public bool Connect()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
if (!IgnoreOperation(nameof(Connect)))
|
||||
{
|
||||
return base.Connect().ConnectionEstablished;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Disconnect()
|
||||
{
|
||||
FailIfNotConnected(nameof(Disconnect));
|
||||
if (!IgnoreOperation(nameof(Disconnect)))
|
||||
{
|
||||
FailIfNotConnected(nameof(Disconnect));
|
||||
|
||||
Disconnect(new Message { CommunicationToken = CommunicationToken.Value });
|
||||
Disconnect(new Message { CommunicationToken = CommunicationToken.Value });
|
||||
}
|
||||
}
|
||||
|
||||
private bool IgnoreOperation(string operationName)
|
||||
{
|
||||
if (Ignore)
|
||||
{
|
||||
Logger.Debug($"Skipping {operationName} because the ignore flag is set.");
|
||||
}
|
||||
|
||||
return Ignore;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,6 +102,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
|||
|
||||
sut.Perform();
|
||||
|
||||
service.VerifySet(s => s.Ignore = true);
|
||||
Assert.IsFalse(sut.AbortStartup);
|
||||
}
|
||||
|
||||
|
@ -123,6 +124,19 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
|||
service.Verify(s => s.Disconnect(), Times.Exactly(2));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MustNotFailWhenDisconnecting()
|
||||
{
|
||||
service.Setup(s => s.Connect()).Returns(true);
|
||||
service.Setup(s => s.Disconnect()).Throws<Exception>();
|
||||
settings.SetupGet(s => s.Current.ServicePolicy).Returns(ServicePolicy.Optional);
|
||||
|
||||
sut.Perform();
|
||||
sut.Revert();
|
||||
|
||||
service.Verify(s => s.Disconnect(), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MustNotDisconnnectIfNotAvailable()
|
||||
{
|
||||
|
|
|
@ -60,15 +60,19 @@ namespace SafeExamBrowser.Runtime.Behaviour.Operations
|
|||
}
|
||||
}
|
||||
|
||||
AbortStartup = serviceMandatory && !serviceAvailable;
|
||||
|
||||
if (AbortStartup)
|
||||
if (serviceMandatory && !serviceAvailable)
|
||||
{
|
||||
AbortStartup = true;
|
||||
logger.Info("Aborting startup because the service is mandatory but not available!");
|
||||
}
|
||||
else if (!serviceAvailable)
|
||||
{
|
||||
service.Ignore = true;
|
||||
logger.Info("All service-related operations will be ignored, since the service is optional and not available.");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info($"The service is {(serviceMandatory ? "mandatory" : "optional")} and {(!serviceAvailable ? "not" : "")} available.");
|
||||
logger.Info($"The service is {(serviceMandatory ? "mandatory" : "optional")} and available.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue