using Amazon;
using Amazon.Runtime;
using System;
namespace AWSSDK_DotNet35.UnitTests.TestTools
{
///
/// Simple way to switch between two states with a using block.
///
public class DisposableSwitch : IDisposable
{
private bool CallbacksSet { get; set; }
private Action EndAction { get; set; }
public DisposableSwitch(Action onEnd)
: this(null, onEnd) { }
public DisposableSwitch(Action onStart, Action onEnd)
{
SetCallbacks(onStart, onEnd);
}
protected DisposableSwitch()
{ }
protected void SetCallbacks(Action onStart, Action onEnd)
{
if (CallbacksSet)
throw new InvalidOperationException();
if (onStart != null)
onStart();
EndAction = onEnd;
CallbacksSet = true;
}
public void Dispose()
{
if (EndAction != null)
EndAction();
}
}
///
/// Disables SDK logging while this object is not disposed
///
public class DisableLogging : DisposableSwitch
{
public DisableLogging()
: base()
{
SetCallbacks(Disable, Enable);
}
private ResponseLoggingOption oldLogResponses;
private bool oldLogMetrics;
private LoggingOptions oldLogTo;
private void Disable()
{
oldLogResponses = AWSConfigs.LoggingConfig.LogResponses;
AWSConfigs.LoggingConfig.LogResponses = ResponseLoggingOption.Never;
oldLogMetrics = AWSConfigs.LoggingConfig.LogMetrics;
AWSConfigs.LoggingConfig.LogMetrics = false;
oldLogTo = AWSConfigs.LoggingConfig.LogTo;
AWSConfigs.LoggingConfig.LogTo = LoggingOptions.None;
}
private void Enable()
{
AWSConfigs.LoggingConfig.LogResponses = oldLogResponses;
AWSConfigs.LoggingConfig.LogMetrics = oldLogMetrics;
AWSConfigs.LoggingConfig.LogTo = oldLogTo;
}
}
}