Skip to content

Commit 506e126

Browse files
committed
Test with MySQL Server 5.6.
Add ServerFeatures.LargePackets to control whether large BLOBs should be sent to the server. Although max_allowed_packet can be increased for MySQL Server 5.6, inserting a large BLOB will still fail with the message "The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size." Rather than customizing this option for MySQL Server 5.6, I've simply disabled the tests. (They do pass locally with a correctly-configured mysql:5.6 Docker container.)
1 parent 027a4b9 commit 506e126

File tree

10 files changed

+24
-25
lines changed

10 files changed

+24
-25
lines changed

.ci/config/config.buffer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=127.0.0.1;user id=mysqltest;password='test;key=\"val';port=3306;database=mysqltest;ssl mode=none;Use Affected Rows=true;BufferResultSets=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.ci/config/config.compression+ssl.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=127.0.0.1;user id=ssltest;password=test;port=3306;database=mysqltest;ssl mode=required;use compression=true;Use Affected Rows=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.ci/config/config.compression.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=127.0.0.1;user id=mysqltest;password='test;key=\"val';port=3306;database=mysqltest;ssl mode=none;UseCompression=true;Use Affected Rows=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.ci/config/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=127.0.0.1;user id=mysqltest;password='test;key=\"val';port=3306;database=mysqltest;ssl mode=none;Use Affected Rows=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.ci/config/config.ssl.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=127.0.0.1;user id=ssltest;password=test;port=3306;database=mysqltest;ssl mode=required;certificate file=../../../../../.ci/server/certs/ssl-client.pfx;Use Affected Rows=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.ci/config/config.uds+ssl.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=./../../../../../.ci/mysqld/mysqld.sock;user id=ssltest;password=test;database=mysqltest;ssl mode=required;Use Affected Rows=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.ci/config/config.uds.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"ConnectionString": "server=./../../../../../.ci/run/mysql/mysqld.sock;user id=mysqltest;password='test;key=\"val';database=mysqltest;ssl mode=none;Use Affected Rows=true",
44
"PasswordlessUser": "no_password",
55
"SecondaryDatabase": "testdb2",
6-
"SupportedFeatures": "Json,StoredProcedures,Sha256Password",
6+
"SupportedFeatures": "Json,StoredProcedures,Sha256Password,LargePackets",
77
"MySqlBulkLoaderLocalCsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.CSV",
88
"MySqlBulkLoaderLocalTsvFile": "%TESTDATA%/LoadData_UTF8_BOM_Unix.TSV"
99
}

.travis.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@ dist: trusty
33
services: docker
44

55
env:
6+
- IMAGE=mysql:5.6
7+
NAME=mysql
8+
FEATURES=StoredProcedures
69
- IMAGE=mysql:5.7
710
NAME=mysql
8-
FEATURES=Json,StoredProcedures,Sha256Password
11+
FEATURES=Json,StoredProcedures,Sha256Password,LargePackets
912
- IMAGE=percona:5.7
1013
NAME=percona
11-
FEATURES=Json,StoredProcedures,Sha256Password,OpenSsl
14+
FEATURES=Json,StoredProcedures,Sha256Password,OpenSsl,LargePackets
1215
- IMAGE=mariadb:10.3
1316
NAME=mariadb
14-
FEATURES=StoredProcedures,OpenSsl
17+
FEATURES=StoredProcedures,OpenSsl,LargePackets
1518

1619
before_install:
1720
- .ci/docker-run.sh $IMAGE $NAME 3307 $FEATURES

tests/SideBySide/DataTypes.cs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -520,11 +520,8 @@ public async Task InsertLargeBlobAsync(string column, int size)
520520
await connection.OpenAsync();
521521
var transaction = await connection.BeginTransactionAsync();
522522

523-
// verify that this amount of data can be sent to MySQL successfully
524-
var maxAllowedPacket = (await connection.QueryAsync<int>("select @@max_allowed_packet").ConfigureAwait(false)).Single();
525-
var shouldFail = maxAllowedPacket < size + 100;
526-
527523
var data = CreateByteArray(size);
524+
var isSupported = size < 1048576 || AppConfig.SupportedFeatures.HasFlag(ServerFeatures.LargePackets);
528525

529526
long lastInsertId;
530527
using (var cmd = new MySqlCommand(Invariant($"insert into datatypes_blobs(`{column}`) values(?)"), connection, transaction)
@@ -536,17 +533,17 @@ public async Task InsertLargeBlobAsync(string column, int size)
536533
{
537534
await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
538535
lastInsertId = cmd.LastInsertedId;
539-
Assert.False(shouldFail);
536+
Assert.True(isSupported);
540537
}
541538
catch (MySqlException ex)
542539
{
543540
lastInsertId = -1;
544-
Assert.True(shouldFail);
545-
Assert.Contains("packet", ex.Message);
541+
Assert.False(isSupported);
542+
Assert.True(ex.Message.IndexOf("packet") >= 0 || ex.Message.IndexOf("innodb_log_file_size") >= 0);
546543
}
547544
}
548545

549-
if (!shouldFail)
546+
if (isSupported)
550547
{
551548
var queryResult = (await connection.QueryAsync<byte[]>(Invariant($"select `{column}` from datatypes_blobs where rowid = {lastInsertId}")).ConfigureAwait(false)).Single();
552549
TestUtilities.AssertEqual(data, queryResult);
@@ -569,11 +566,8 @@ public void InsertLargeBlobSync(string column, int size)
569566
connection.Open();
570567
var transaction = connection.BeginTransaction();
571568

572-
// verify that this amount of data can be sent to MySQL successfully
573-
var maxAllowedPacket = m_database.Connection.Query<int>("select @@max_allowed_packet").Single();
574-
var shouldFail = maxAllowedPacket < size + 100;
575-
576569
var data = CreateByteArray(size);
570+
var isSupported = size < 1048576 || AppConfig.SupportedFeatures.HasFlag(ServerFeatures.LargePackets);
577571

578572
long lastInsertId;
579573
using (var cmd = new MySqlCommand(Invariant($"insert into datatypes_blobs(`{column}`) values(?)"), connection, transaction)
@@ -585,16 +579,17 @@ public void InsertLargeBlobSync(string column, int size)
585579
{
586580
cmd.ExecuteNonQuery();
587581
lastInsertId = cmd.LastInsertedId;
582+
Assert.True(isSupported);
588583
}
589584
catch (MySqlException ex)
590585
{
591586
lastInsertId = -1;
592-
Assert.True(shouldFail);
593-
Assert.Contains("packet", ex.Message);
587+
Assert.False(isSupported);
588+
Assert.True(ex.Message.IndexOf("packet") >= 0 || ex.Message.IndexOf("innodb_log_file_size") >= 0);
594589
}
595590
}
596591

597-
if (!shouldFail)
592+
if (isSupported)
598593
{
599594
var queryResult = connection.Query<byte[]>(Invariant($"select `{column}` from datatypes_blobs where rowid = {lastInsertId}")).Single();
600595
TestUtilities.AssertEqual(data, queryResult);

tests/SideBySide/ServerFeatures.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public enum ServerFeatures
1010
StoredProcedures = 2,
1111
Sha256Password = 4,
1212
OpenSsl = 8,
13+
LargePackets = 16,
1314
}
1415
}

0 commit comments

Comments
 (0)