diff --git a/generator/.DevConfigs/4edfd844-7122-4e1b-9eed-12395d959dda.json b/generator/.DevConfigs/4edfd844-7122-4e1b-9eed-12395d959dda.json new file mode 100644 index 000000000000..08c745e8c524 --- /dev/null +++ b/generator/.DevConfigs/4edfd844-7122-4e1b-9eed-12395d959dda.json @@ -0,0 +1,9 @@ +{ + "core": { + "changeLogMessages": [ + "Adjustments to fix failing DateTimes asserts in tests due to local/UTC inconsistencies." + ], + "type": "patch", + "updateMinimum": true + } + } \ No newline at end of file diff --git a/sdk/src/Core/Amazon.Runtime/Credentials/RefreshingAWSCredentials.cs b/sdk/src/Core/Amazon.Runtime/Credentials/RefreshingAWSCredentials.cs index ede111bf057e..d3a1fd95e75c 100644 --- a/sdk/src/Core/Amazon.Runtime/Credentials/RefreshingAWSCredentials.cs +++ b/sdk/src/Core/Amazon.Runtime/Credentials/RefreshingAWSCredentials.cs @@ -52,14 +52,14 @@ public CredentialsRefreshState(ImmutableCredentials credentials, DateTime expira internal bool IsExpiredWithin(TimeSpan preemptExpiryTime) { var now = AWSSDKUtils.CorrectedUtcNow; - var exp = Expiration; + var exp = Expiration.ToUniversalTime(); return now > exp - preemptExpiryTime; } internal TimeSpan GetTimeToLive(TimeSpan preemptExpiryTime) { var now = AWSSDKUtils.CorrectedUtcNow; - var exp = Expiration; + var exp = Expiration.ToUniversalTime(); return exp - now + preemptExpiryTime; } diff --git a/sdk/test/Services/DynamoDBv2/UnitTests/Custom/DynamoDBTests.cs b/sdk/test/Services/DynamoDBv2/UnitTests/Custom/DynamoDBTests.cs index 90da25fd33cf..e0081c9ab37a 100644 --- a/sdk/test/Services/DynamoDBv2/UnitTests/Custom/DynamoDBTests.cs +++ b/sdk/test/Services/DynamoDBv2/UnitTests/Custom/DynamoDBTests.cs @@ -227,10 +227,10 @@ public void TestDateTimeDeserializationWithDdbContext() { //Arrange var dateWithNoDecimals = "2022-05-05T11:56:11Z"; - var expectedDateNoDecimal = DateTime.Parse(dateWithNoDecimals); + var expectedDateNoDecimal = DateTime.Parse(dateWithNoDecimals, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal); var dateWithDecimals = "2022-05-05T11:56:11.000Z"; - var expectedDateDecimal = DateTime.Parse(dateWithDecimals); + var expectedDateDecimal = DateTime.Parse(dateWithDecimals, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal); var jsonDateWithNoDecimals = JsonMapper.ToJson(new { diff --git a/sdk/test/UnitTests/Custom/Runtime/EC2InstanceMetadataServlet.cs b/sdk/test/UnitTests/Custom/Runtime/EC2InstanceMetadataServlet.cs index 4478bae5ddad..80c3f654d8ed 100644 --- a/sdk/test/UnitTests/Custom/Runtime/EC2InstanceMetadataServlet.cs +++ b/sdk/test/UnitTests/Custom/Runtime/EC2InstanceMetadataServlet.cs @@ -29,10 +29,30 @@ public EC2InstanceMetadataServlet() new DisposableSwitch( onStart: () => SetEC2InstanceMetadataEndpoint(ServiceURL), onEnd: () => SetEC2InstanceMetadataEndpoint(currentEndpointUrl)); + + // JsonMapper.ToJson's DateTime writing exporter will output any date as a string formatted + // as a local or unspecified time. This changes it so the data is mocked as IMDS would + // actually return it which is "yyyy-MM-ddTHH:mm:ssZ" ending in a Z specified as UTC. + JsonMapper.RegisterExporter( + (DateTime date, JsonWriter writer) => { + if(date == DateTime.MinValue && date.Kind != DateTimeKind.Utc) + { + //Do not use .ToUniversalTime on a min datetime as it will adjust the hours. + DateTime.SpecifyKind(date, DateTimeKind.Utc); + } + else if(date.Kind != DateTimeKind.Utc) + { + date = date.ToUniversalTime(); + } + + writer.Write(date.ToString("yyyy-MM-ddTHH:mm:ssZ")); + } + ); } public override void Dispose() { + JsonMapper.UnregisterExporters(); _metadataServiceEndpointSwitch.Dispose(); ResetUseNullToken();