Skip to content

Commit 532cbff

Browse files
committed
Add tests for boundary conditions in GetBytes.
(cherry picked from commit d5dae59)
1 parent 5b80cf1 commit 532cbff

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

tests/SideBySide/QueryTests.cs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,6 +1454,74 @@ public void QueryAttributeAndParameter(bool prepare)
14541454
}
14551455
}
14561456

1457+
[Fact]
1458+
public void GetBytesByOrdinal()
1459+
{
1460+
using var connection = new MySqlConnection(AppConfig.ConnectionString);
1461+
connection.Open();
1462+
using var cmd = new MySqlCommand("select X'0123456789ABCDEF';", connection);
1463+
using var reader = cmd.ExecuteReader();
1464+
Assert.True(reader.Read());
1465+
1466+
Assert.Equal(8, reader.GetBytes(0, 0, null, 0, 0));
1467+
var buffer = new byte[10];
1468+
#if BASELINE
1469+
Assert.Throws<IndexOutOfRangeException>(() => reader.GetBytes(0, -1, buffer, 0, 8));
1470+
Assert.Throws<IndexOutOfRangeException>(() => reader.GetBytes(0, 0x1_0000_0000L, buffer, 0, 8));
1471+
Assert.Throws<IndexOutOfRangeException>(() => reader.GetBytes(0, 0, buffer, -1, 8));
1472+
#else
1473+
Assert.Throws<ArgumentOutOfRangeException>(() => reader.GetBytes(0, -1, buffer, 0, 8));
1474+
Assert.Throws<ArgumentOutOfRangeException>(() => reader.GetBytes(0, 0x1_0000_0000L, buffer, 0, 8));
1475+
Assert.Throws<ArgumentOutOfRangeException>(() => reader.GetBytes(0, 0, buffer, -1, 8));
1476+
#endif
1477+
Assert.Throws<ArgumentException>(() => reader.GetBytes(0, 0, buffer, 0, 11));
1478+
1479+
#if BASELINE
1480+
Assert.Throws<IndexOutOfRangeException>(() => reader.GetBytes(0, 9, buffer, 0, 10));
1481+
#else
1482+
Assert.Equal(0, reader.GetBytes(0, 9, buffer, 0, 10));
1483+
#endif
1484+
1485+
Assert.Equal(8, reader.GetBytes(0, 0, buffer, 1, 9));
1486+
Assert.Equal(new byte[] { 0, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0 }, buffer);
1487+
1488+
Assert.Equal(5, reader.GetBytes(0, 0, buffer, 5, 5));
1489+
Assert.Equal(new byte[] { 0, 0x01, 0x23, 0x45, 0x67, 0x01, 0x23, 0x45, 0x67, 0x89 }, buffer);
1490+
1491+
Assert.Equal(5, reader.GetBytes(0, 3, buffer, 0, 5));
1492+
Assert.Equal(new byte[] { 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89 }, buffer);
1493+
}
1494+
1495+
#if !BASELINE
1496+
[Fact]
1497+
public void GetBytesByName()
1498+
{
1499+
using var connection = new MySqlConnection(AppConfig.ConnectionString);
1500+
connection.Open();
1501+
using var cmd = new MySqlCommand("select X'0123456789ABCDEF' as tmp;", connection);
1502+
using var reader = cmd.ExecuteReader();
1503+
Assert.True(reader.Read());
1504+
1505+
Assert.Equal(8, reader.GetBytes("tmp", 0, null, 0, 0));
1506+
var buffer = new byte[10];
1507+
Assert.Throws<ArgumentOutOfRangeException>(() => reader.GetBytes("tmp", -1, buffer, 0, 8));
1508+
Assert.Throws<ArgumentOutOfRangeException>(() => reader.GetBytes("tmp", 0x1_0000_0000L, buffer, 0, 8));
1509+
Assert.Throws<ArgumentOutOfRangeException>(() => reader.GetBytes("tmp", 0, buffer, -1, 8));
1510+
Assert.Throws<ArgumentException>(() => reader.GetBytes("tmp", 0, buffer, 0, 11));
1511+
1512+
Assert.Equal(0, reader.GetBytes("tmp", 9, buffer, 0, 10));
1513+
1514+
Assert.Equal(8, reader.GetBytes("tmp", 0, buffer, 1, 9));
1515+
Assert.Equal(new byte[] { 0, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0 }, buffer);
1516+
1517+
Assert.Equal(5, reader.GetBytes("tmp", 0, buffer, 5, 5));
1518+
Assert.Equal(new byte[] { 0, 0x01, 0x23, 0x45, 0x67, 0x01, 0x23, 0x45, 0x67, 0x89 }, buffer);
1519+
1520+
Assert.Equal(5, reader.GetBytes("tmp", 3, buffer, 0, 5));
1521+
Assert.Equal(new byte[] { 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89 }, buffer);
1522+
}
1523+
#endif
1524+
14571525
class BoolTest
14581526
{
14591527
public int Id { get; set; }

0 commit comments

Comments
 (0)