Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc2021f7

Browse files
Parameterize the test for MARS and BulkCopy streaming behavior
1 parentdff3f0a commitc2021f7

File tree

1 file changed

+88
-23
lines changed

1 file changed

+88
-23
lines changed

‎src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/TestBulkCopyWithUTF8.cs

Lines changed: 88 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,64 @@
44

55
usingSystem;
66
usingSystem.Data;
7-
usingSystem.Text;
7+
usingSystem.Threading.Tasks;
88
usingXunit;
99

1010
namespaceMicrosoft.Data.SqlClient.ManualTesting.Tests
1111
{
12-
publicclassTestBulkCopyWithUtf8
12+
publicsealedclassTestBulkCopyWithUtf8:IDisposable
1313
{
14-
privatereadonlystring_connectionString;
14+
privatestaticstringsourceTable=DataTestUtility.GetUniqueName("SrcUtf8DataTable");
15+
privatestaticstringdestinationTable=DataTestUtility.GetUniqueName("DstUtf8DataTable");
16+
privatestaticreadonlystringinsertQuery=$"INSERT INTO{sourceTable} VALUES('test')";
1517

1618
publicTestBulkCopyWithUtf8()
1719
{
18-
_connectionString=newSqlConnectionStringBuilder(DataTestUtility.TCPConnectionString){MultipleActiveResultSets=true}.ConnectionString;
20+
usingSqlConnectionsourceConnection=newSqlConnection(GetConnectionString(true));
21+
sourceConnection.Open();
22+
SetupTables(sourceConnection,sourceTable,destinationTable,insertQuery);
23+
}
24+
25+
privatestringGetConnectionString(boolenableMars)
26+
{
27+
returnnewSqlConnectionStringBuilder(DataTestUtility.TCPConnectionString)
28+
{
29+
MultipleActiveResultSets=enableMars
30+
}.ConnectionString;
1931
}
2032

2133
privatevoidSetupTables(SqlConnectionconnection,stringsourceTable,stringdestinationTable,stringinsertQuery)
2234
{
2335
stringcolumnDefinition="(str_col varchar(max) COLLATE Latin1_General_100_CS_AS_KS_WS_SC_UTF8)";
2436
DataTestUtility.CreateTable(connection,sourceTable,columnDefinition);
2537
DataTestUtility.CreateTable(connection,destinationTable,columnDefinition);
26-
2738
usingSqlCommandinsertCommand=connection.CreateCommand();
2839
insertCommand.CommandText=insertQuery;
2940
Helpers.TryExecute(insertCommand,insertQuery);
3041
}
3142

32-
[ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup),nameof(DataTestUtility.IsNotAzureServer),nameof(DataTestUtility.IsNotAzureSynapse))]
33-
publicvoidBulkCopy_Utf8Data_ShouldMatchSource()
43+
[ConditionalTheory(typeof(DataTestUtility),
44+
nameof(DataTestUtility.AreConnStringsSetup),
45+
nameof(DataTestUtility.IsNotAzureServer),
46+
nameof(DataTestUtility.IsNotAzureSynapse))]
47+
[InlineData(true,true)]
48+
[InlineData(false,true)]
49+
[InlineData(true,false)]
50+
[InlineData(false,false)]
51+
publicvoidBulkCopy_Utf8Data_ShouldMatchSource(boolisMarsEnabled,boolenableStreaming)
3452
{
35-
stringsourceTable=DataTestUtility.GetUniqueName("SrcUtf8DataTable");
36-
stringdestinationTable=DataTestUtility.GetUniqueName("DstUtf8DataTable");
37-
stringinsertQuery=$"INSERT INTO{sourceTable} VALUES('test')";
38-
39-
usingSqlConnectionsourceConnection=newSqlConnection(_connectionString);
53+
usingSqlConnectionsourceConnection=newSqlConnection(GetConnectionString(isMarsEnabled));
4054
sourceConnection.Open();
41-
SetupTables(sourceConnection,sourceTable,destinationTable,insertQuery);
42-
4355
usingSqlCommandcountCommand=newSqlCommand($"SELECT COUNT(*) FROM{destinationTable}",sourceConnection);
4456
longinitialCount=Convert.ToInt64(countCommand.ExecuteScalar());
45-
4657
usingSqlCommandsourceDataCommand=newSqlCommand($"SELECT str_col FROM{sourceTable}",sourceConnection);
4758
usingSqlDataReaderreader=sourceDataCommand.ExecuteReader(CommandBehavior.SequentialAccess);
48-
49-
usingSqlConnectiondestinationConnection=newSqlConnection(_connectionString);
59+
usingSqlConnectiondestinationConnection=newSqlConnection(GetConnectionString(isMarsEnabled));
5060
destinationConnection.Open();
51-
61+
5262
usingSqlBulkCopybulkCopy=newSqlBulkCopy(destinationConnection)
5363
{
54-
EnableStreaming=true,
64+
EnableStreaming=enableStreaming,
5565
DestinationTableName=destinationTable
5666
};
5767

@@ -63,20 +73,75 @@ public void BulkCopy_Utf8Data_ShouldMatchSource()
6373
{
6474
Assert.Fail($"Bulk copy failed:{ex.Message}");
6575
}
66-
76+
77+
reader.Close();
6778
longfinalCount=Convert.ToInt64(countCommand.ExecuteScalar());
6879
Assert.Equal(1,finalCount-initialCount);
69-
7080
usingSqlCommandverifyCommand=newSqlCommand($"SELECT cast(str_col as varbinary) FROM{destinationTable}",destinationConnection);
7181
usingSqlDataReaderverifyReader=verifyCommand.ExecuteReader(CommandBehavior.SequentialAccess);
72-
7382
byte[]expectedBytes=newbyte[]{0x74,0x65,0x73,0x74};
74-
7583
Assert.True(verifyReader.Read(),"No data found in destination table after bulk copy.");
84+
byte[]actualBytes=verifyReader.GetSqlBinary(0).Value;
85+
Assert.Equal(expectedBytes.Length,actualBytes.Length);
86+
Assert.Equal(expectedBytes,actualBytes);
87+
}
88+
89+
90+
[ConditionalTheory(typeof(DataTestUtility),
91+
nameof(DataTestUtility.AreConnStringsSetup),
92+
nameof(DataTestUtility.IsNotAzureServer),
93+
nameof(DataTestUtility.IsNotAzureSynapse))]
94+
[InlineData(true,true)]
95+
[InlineData(false,true)]
96+
[InlineData(true,false)]
97+
[InlineData(false,false)]
98+
publicasyncTaskBulkCopy_Utf8Data_ShouldMatchSource_Async(boolisMarsEnabled,boolenableStreaming)
99+
{
100+
stringconnectionString=GetConnectionString(isMarsEnabled);
101+
usingSqlConnectionsourceConnection=newSqlConnection(connectionString);
102+
awaitsourceConnection.OpenAsync();
103+
usingSqlCommandcountCommand=newSqlCommand($"SELECT COUNT(*) FROM{destinationTable}",sourceConnection);
104+
longinitialCount=Convert.ToInt64(awaitcountCommand.ExecuteScalarAsync());
105+
usingSqlCommandsourceDataCommand=newSqlCommand($"SELECT str_col FROM{sourceTable}",sourceConnection);
106+
usingSqlDataReaderreader=awaitsourceDataCommand.ExecuteReaderAsync(CommandBehavior.SequentialAccess);
107+
usingSqlConnectiondestinationConnection=newSqlConnection(connectionString);
108+
awaitdestinationConnection.OpenAsync();
109+
110+
usingSqlBulkCopybulkCopy=newSqlBulkCopy(destinationConnection)
111+
{
112+
EnableStreaming=enableStreaming,
113+
DestinationTableName=destinationTable
114+
};
76115

116+
try
117+
{
118+
awaitbulkCopy.WriteToServerAsync(reader);
119+
}
120+
catch(Exceptionex)
121+
{
122+
Assert.Fail($"Bulk copy failed:{ex.Message}");
123+
}
124+
125+
reader.Close();
126+
longfinalCount=Convert.ToInt64(awaitcountCommand.ExecuteScalarAsync());
127+
Assert.Equal(1,finalCount-initialCount);
128+
usingSqlCommandverifyCommand=newSqlCommand($"SELECT cast(str_col as varbinary) FROM{destinationTable}",destinationConnection);
129+
usingSqlDataReaderverifyReader=awaitverifyCommand.ExecuteReaderAsync(CommandBehavior.SequentialAccess);
130+
byte[]expectedBytes=newbyte[]{0x74,0x65,0x73,0x74};
131+
Assert.True(awaitverifyReader.ReadAsync(),"No data found in destination table after bulk copy.");
77132
byte[]actualBytes=verifyReader.GetSqlBinary(0).Value;
78133
Assert.Equal(expectedBytes.Length,actualBytes.Length);
79134
Assert.Equal(expectedBytes,actualBytes);
80135
}
136+
137+
138+
publicvoidDispose()
139+
{
140+
usingSqlConnectionconnection=newSqlConnection(GetConnectionString(true));
141+
connection.Open();
142+
DataTestUtility.DropTable(connection,sourceTable);
143+
DataTestUtility.DropTable(connection,destinationTable);
144+
connection.Close();
145+
}
81146
}
82147
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp