From 962bd685eaf23b50abbf8d4907f7c63be7dc65c3 Mon Sep 17 00:00:00 2001 From: Mike Chu <104384559+mikechu-optimizely@users.noreply.github.com> Date: Tue, 25 Jul 2023 13:04:40 -0400 Subject: [PATCH] [FSSDK-9538] bug: Fix last modified formatting (#361) * Fix non-RFC1123 formatting * Update tests to ensure expected format * Add more accurate assert * Lint fixes --- .../HttpProjectConfigManagerTest.cs | 28 ++++++++++++++----- .../Config/HttpProjectConfigManager.cs | 8 ++++-- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs b/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs index 4d218706..884d9b92 100644 --- a/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs +++ b/OptimizelySDK.Tests/ConfigTest/HttpProjectConfigManagerTest.cs @@ -37,6 +37,11 @@ public class HttpProjectConfigManagerTest private Mock NotificationCallbackMock = new Mock(); + private const string ExpectedRfc1123DateTime = "Thu, 03 Nov 2022 16:00:00 GMT"; + + private readonly DateTime _pastLastModified = + new DateTimeOffset(new DateTime(2022, 11, 3, 16, 0, 0, DateTimeKind.Utc)).UtcDateTime; + [SetUp] public void Setup() { @@ -100,22 +105,29 @@ public void TestSettingIfModifiedSinceInRequestHeader() statusCode: HttpStatusCode.NotModified, responseContentHeaders: new Dictionary { - { "Last-Modified", new DateTime(2050, 10, 10).ToString("R") }, + { "Last-Modified", _pastLastModified.ToString("r") }, } ); var httpManager = new HttpProjectConfigManager.Builder() - .WithDatafile(string.Empty) + .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(2000)) .WithStartByDefault() .Build(defer: true); - httpManager.LastModifiedSince = new DateTime(2020, 4, 4).ToString("R"); + httpManager.LastModifiedSince = _pastLastModified.ToString("r"); t.Wait(3000); + HttpClientMock.Verify(_ => _.SendAsync( + It.Is(requestMessage => + requestMessage.Headers.IfModifiedSince.HasValue && + requestMessage.Headers.IfModifiedSince.Value.UtcDateTime.ToString("r") == + ExpectedRfc1123DateTime + )), Times.Once); LoggerMock.Verify( - _ => _.Log(LogLevel.DEBUG, "Set If-Modified-Since in request header."), + _ => _.Log(LogLevel.DEBUG, + $"Set If-Modified-Since in request header: {ExpectedRfc1123DateTime}"), Times.AtLeastOnce); httpManager.Dispose(); @@ -125,14 +137,15 @@ public void TestSettingIfModifiedSinceInRequestHeader() public void TestSettingLastModifiedFromResponseHeader() { MockSendAsync( + datafile: TestData.Datafile, statusCode: HttpStatusCode.OK, responseContentHeaders: new Dictionary { - { "Last-Modified", new DateTime(2050, 10, 10).ToString("R") }, + { "Last-Modified", _pastLastModified.ToString("r") }, } ); var httpManager = new HttpProjectConfigManager.Builder() - .WithUrl("https://cdn.optimizely.com/datafiles/QBw9gFM8oTn7ogY9ANCC1z.json") + .WithSdkKey("QBw9gFM8oTn7ogY9ANCC1z") .WithLogger(LoggerMock.Object) .WithPollingInterval(TimeSpan.FromMilliseconds(1000)) .WithBlockingTimeoutPeriod(TimeSpan.FromMilliseconds(500)) @@ -140,7 +153,8 @@ public void TestSettingLastModifiedFromResponseHeader() .Build(); LoggerMock.Verify( - _ => _.Log(LogLevel.DEBUG, "Set LastModifiedSince from response header."), + _ => _.Log(LogLevel.DEBUG, + $"Set LastModifiedSince from response header: {ExpectedRfc1123DateTime}"), Times.AtLeastOnce); httpManager.Dispose(); diff --git a/OptimizelySDK/Config/HttpProjectConfigManager.cs b/OptimizelySDK/Config/HttpProjectConfigManager.cs index 6a73e2ec..fecd0a92 100644 --- a/OptimizelySDK/Config/HttpProjectConfigManager.cs +++ b/OptimizelySDK/Config/HttpProjectConfigManager.cs @@ -119,7 +119,8 @@ private string GetRemoteDatafileResponse() if (!string.IsNullOrEmpty(LastModifiedSince)) { request.Headers.Add("If-Modified-Since", LastModifiedSince); - Logger.Log(LogLevel.DEBUG, $"Set If-Modified-Since in request header."); + Logger.Log(LogLevel.DEBUG, + $"Set If-Modified-Since in request header: {LastModifiedSince}"); } if (!string.IsNullOrEmpty(DatafileAccessToken)) @@ -149,8 +150,9 @@ private string GetRemoteDatafileResponse() // Update Last-Modified header if provided. if (result.Content.Headers.LastModified.HasValue) { - LastModifiedSince = result.Content.Headers.LastModified.ToString(); - Logger.Log(LogLevel.DEBUG, $"Set LastModifiedSince from response header."); + LastModifiedSince = result.Content.Headers.LastModified?.UtcDateTime.ToString("r"); + Logger.Log(LogLevel.DEBUG, + $"Set LastModifiedSince from response header: {LastModifiedSince}"); } var content = result.Content.ReadAsStringAsync();