Skip to content

Commit 1697eac

Browse files
committed
Fix Flaky test #3011
1 parent d07bc9d commit 1697eac

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtDateTimeOffsetTest.cs

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using System.Data;
77
using Microsoft.Data.SqlClient.Server;
88
using Xunit;
9+
using Xunit.Abstractions;
10+
using Xunit.Sdk;
911

1012
namespace Microsoft.Data.SqlClient.ManualTesting.Tests
1113
{
@@ -31,9 +33,11 @@ public class UdtDateTimeOffsetTest
3133
{
3234
private readonly string _connectionString = null;
3335
private readonly string _udtTableType = DataTestUtility.GetUniqueNameForSqlServer("DataTimeOffsetTableType");
36+
private readonly ITestOutputHelper _testOutputHelper;
3437

35-
public UdtDateTimeOffsetTest()
38+
public UdtDateTimeOffsetTest(ITestOutputHelper testOutputHelper)
3639
{
40+
_testOutputHelper = testOutputHelper;
3741
_connectionString = DataTestUtility.TCPConnectionString;
3842
}
3943

@@ -74,26 +78,27 @@ public void SelectFromSqlParameterShouldSucceed()
7478
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotAzureSynapse))]
7579
public void DateTimeOffsetAllScalesTestShouldSucceed()
7680
{
77-
string tvpTypeName = DataTestUtility.GetUniqueNameForSqlServer("tvpType");
78-
7981
using SqlConnection connection = new(_connectionString);
8082
connection.Open();
8183

82-
try
84+
// Use different scale for each test: 0 to 7
85+
int fromScale = 0;
86+
int toScale = 7;
87+
88+
for (int scale = fromScale; scale <= toScale; scale++)
8389
{
84-
// Use different scale for each test: 0 to 7
85-
int fromScale = 0;
86-
int toScale = 7;
90+
string tvpTypeName = DataTestUtility.GetUniqueNameForSqlServer("tvpType"); // Need a unique name per scale, else we get errors. See https://github.com/dotnet/SqlClient/issues/3011
8791

88-
for (int scale = fromScale; scale <= toScale; scale++)
89-
{
90-
DateTimeOffset dateTimeOffset = new DateTimeOffset(2024, 1, 1, 23, 59, 59, TimeSpan.Zero);
92+
DateTimeOffset dateTimeOffset = new DateTimeOffset(2024, 1, 1, 23, 59, 59, TimeSpan.Zero);
9193

92-
// Add sub-second offset corresponding to the scale being tested
93-
TimeSpan subSeconds = TimeSpan.FromTicks((long)(TimeSpan.TicksPerSecond / Math.Pow(10, scale)));
94-
dateTimeOffset = dateTimeOffset.Add(subSeconds);
94+
// Add sub-second offset corresponding to the scale being tested
95+
TimeSpan subSeconds = TimeSpan.FromTicks((long)(TimeSpan.TicksPerSecond / Math.Pow(10, scale)));
96+
dateTimeOffset = dateTimeOffset.Add(subSeconds);
9597

96-
DataTestUtility.DropUserDefinedType(connection, tvpTypeName);
98+
DataTestUtility.DropUserDefinedType(connection, tvpTypeName);
99+
100+
try
101+
{
97102
SetupDateTimeOffsetTableType(connection, tvpTypeName, scale);
98103

99104
var param = new SqlParameter
@@ -109,14 +114,24 @@ public void DateTimeOffsetAllScalesTestShouldSucceed()
109114
{
110115
cmd.CommandText = "SELECT * FROM @params";
111116
cmd.Parameters.Add(param);
112-
var result = cmd.ExecuteScalar();
113-
Assert.Equal(dateTimeOffset, result);
117+
118+
object result = null;
119+
try
120+
{
121+
result = cmd.ExecuteScalar();
122+
Assert.Equal(dateTimeOffset, result);
123+
}
124+
catch (Exception)
125+
{
126+
_testOutputHelper.WriteLine($"{DateTime.UtcNow:O}: Failed for scale {scale} DateTimeOffset: {dateTimeOffset} Result: {result ?? "No result"}");
127+
throw;
128+
}
114129
}
115130
}
116-
}
117-
finally
118-
{
119-
DataTestUtility.DropUserDefinedType(connection, tvpTypeName);
131+
finally
132+
{
133+
DataTestUtility.DropUserDefinedType(connection, tvpTypeName);
134+
}
120135
}
121136
}
122137

0 commit comments

Comments
 (0)