private static void TestServiceCallForClockSkew(Action action)
{
var oldCorrectClockSkew = AWSConfigs.CorrectForClockSkew;
var oldClockSkewCorrection = AWSConfigs.ClockOffset;
try
{
// Enable clock skew correction
AWSConfigs.CorrectForClockSkew = true;
// Make call to possibly set the offset
action();
// Determine if skew exists
var skewCorrection = AWSConfigs.ClockOffset;
var skewExists = skewCorrection > TimeSpan.Zero;
if (skewExists)
{
Console.WriteLine("Clock skew exists, offset is " + AWSConfigs.ClockOffset);
// If skew exists, test that disabling correction results in an error
AWSConfigs.CorrectForClockSkew = false;
AssertExtensions.ExpectException(action);
}
else
{
Console.WriteLine("No clock skew found");
// If no skew exists, set invalid skew correction and
// verify an exception is thrown before the invalid correction is
// corrected by the SDK
// Do this twice, once for positive offset and once for negative
SetClockSkewCorrection(IncorrectPositiveClockSkewOffset);
action();
Assert.AreNotEqual(IncorrectPositiveClockSkewOffset, AWSConfigs.ClockOffset);
SetClockSkewCorrection(IncorrectNegativeClockSkewOffset);
action();
Assert.AreNotEqual(IncorrectNegativeClockSkewOffset, AWSConfigs.ClockOffset);
}
}
finally
{
AWSConfigs.CorrectForClockSkew = oldCorrectClockSkew;
SetClockSkewCorrection(oldClockSkewCorrection);
}
}