private static void TestServiceCallForClockSkew(ClockSkewTestContext context) { var oldCorrectClockSkew = AWSConfigs.CorrectForClockSkew; var oldClockSkewCorrection = context.Config.ClockOffset; var oldUtcNowSource = GetUtcNowSource(); try { AWSConfigs.CorrectForClockSkew = true; SetClockSkewCorrection(context.Config, TimeSpan.Zero); context.TestAction(); #pragma warning disable CS0618 // Type or member is obsolete Assert.IsTrue(AWSConfigs.ClockOffset == TimeSpan.Zero); #pragma warning restore CS0618 // Type or member is obsolete Assert.IsTrue(context.Config.ClockOffset == TimeSpan.Zero); SetClockSkewCorrection(context.Config, IncorrectPositiveClockSkewOffset); context.TestAction(); #pragma warning disable CS0618 // Type or member is obsolete Assert.AreNotEqual(IncorrectPositiveClockSkewOffset, AWSConfigs.ClockOffset); #pragma warning restore CS0618 // Type or member is obsolete Assert.AreNotEqual(IncorrectPositiveClockSkewOffset, context.Config.ClockOffset); SetClockSkewCorrection(context.Config, IncorrectNegativeClockSkewOffset); context.TestAction(); #pragma warning disable CS0618 // Type or member is obsolete Assert.AreNotEqual(IncorrectPositiveClockSkewOffset, AWSConfigs.ClockOffset); #pragma warning restore CS0618 // Type or member is obsolete Assert.AreNotEqual(IncorrectNegativeClockSkewOffset, context.Config.ClockOffset); Console.WriteLine("Simulating positive clock skew"); SetUtcNowSource(() => DateTime.UtcNow + IncorrectPositiveClockSkewOffset); AWSConfigs.CorrectForClockSkew = false; AssertExtensions.ExpectException(context.TestAction); AWSConfigs.CorrectForClockSkew = true; SetClockSkewCorrection(context.Config, TimeSpan.Zero); context.TestAction(); Console.WriteLine("Simulating negative clock skew"); SetUtcNowSource(() => DateTime.UtcNow + IncorrectNegativeClockSkewOffset); AWSConfigs.CorrectForClockSkew = true; SetClockSkewCorrection(context.Config, TimeSpan.Zero); context.TestAction(); AWSConfigs.CorrectForClockSkew = false; AssertExtensions.ExpectException(context.TestAction); } finally { AWSConfigs.CorrectForClockSkew = oldCorrectClockSkew; SetClockSkewCorrection(context.Config, oldClockSkewCorrection); SetUtcNowSource(oldUtcNowSource); } }
private static void TestServiceCallForManualClockCorrection(ClockSkewTestContext context) { var oldManualClockCorrection = AWSConfigs.ManualClockCorrection; var oldCorrectClockSkew = AWSConfigs.CorrectForClockSkew; var oldClockSkewCorrection = context.Config.ClockOffset; var oldUtcNowSource = GetUtcNowSource(); try { AWSConfigs.CorrectForClockSkew = false; SetUtcNowSource(() => DateTime.UtcNow + IncorrectPositiveClockSkewOffset); AWSConfigs.ManualClockCorrection = null; AssertExtensions.ExpectException(context.TestAction); AWSConfigs.ManualClockCorrection = IncorrectPositiveClockSkewOffset.Negate(); context.TestAction(); SetUtcNowSource(() => DateTime.UtcNow + IncorrectNegativeClockSkewOffset); AWSConfigs.ManualClockCorrection = IncorrectNegativeClockSkewOffset.Negate(); context.TestAction(); AWSConfigs.ManualClockCorrection = TimeSpan.FromTicks(IncorrectNegativeClockSkewOffset.Negate().Ticks * 2); AssertExtensions.ExpectException(context.TestAction); AWSConfigs.ManualClockCorrection = TimeSpan.Zero; AssertExtensions.ExpectException(context.TestAction); } finally { AWSConfigs.ManualClockCorrection = oldManualClockCorrection; AWSConfigs.CorrectForClockSkew = oldCorrectClockSkew; SetClockSkewCorrection(context.Config, oldClockSkewCorrection); SetUtcNowSource(oldUtcNowSource); } }