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

Commit f433f1f

Browse files
rushermethane
authored andcommitted
test stability improvement.
* ensuring performance schema is enabled when testing some performance schema results * Added logic to check if the default collation is overridden by the server character_set_collations * ensure using IANA timezone in test, since tzinfo depending on system won't have deprecated tz like "US/Central" and "US/Pacific"
1 parent 879eb11 commit f433f1f

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

‎driver_test.go

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,13 +1631,46 @@ func TestCollation(t *testing.T) {
16311631
}
16321632

16331633
runTests(t, tdsn, func(dbt *DBTest) {
1634+
// see https://mariadb.com/kb/en/setting-character-sets-and-collations/#changing-default-collation
1635+
// when character_set_collations is set for the charset, it overrides the default collation
1636+
// so we need to check if the default collation is overridden
1637+
forceExpected := expected
1638+
var defaultCollations string
1639+
err := dbt.db.QueryRow("SELECT @@character_set_collations").Scan(&defaultCollations)
1640+
if err == nil {
1641+
// Query succeeded, need to check if we should override expected collation
1642+
collationMap := make(map[string]string)
1643+
pairs := strings.Split(defaultCollations, ",")
1644+
for _, pair := range pairs {
1645+
parts := strings.Split(pair, "=")
1646+
if len(parts) == 2 {
1647+
collationMap[parts[0]] = parts[1]
1648+
}
1649+
}
1650+
1651+
// Get charset prefix from expected collation
1652+
parts := strings.Split(expected, "_")
1653+
if len(parts) > 0 {
1654+
charset := parts[0]
1655+
if newCollation, ok := collationMap[charset]; ok {
1656+
forceExpected = newCollation
1657+
}
1658+
}
1659+
}
1660+
16341661
var got string
16351662
if err := dbt.db.QueryRow("SELECT @@collation_connection").Scan(&got); err != nil {
16361663
dbt.Fatal(err)
16371664
}
16381665

16391666
if got != expected {
1640-
dbt.Fatalf("expected connection collation %s but got %s", expected, got)
1667+
if forceExpected != expected {
1668+
if got != forceExpected {
1669+
dbt.Fatalf("expected forced connection collation %s but got %s", forceExpected, got)
1670+
}
1671+
} else {
1672+
dbt.Fatalf("expected connection collation %s but got %s", expected, got)
1673+
}
16411674
}
16421675
})
16431676
}
@@ -1686,16 +1719,16 @@ func TestRawBytesResultExceedsBuffer(t *testing.T) {
16861719
}
16871720

16881721
func TestTimezoneConversion(t *testing.T) {
1689-
zones := []string{"UTC", "US/Central", "US/Pacific", "Local"}
1722+
zones := []string{"UTC", "America/New_York", "Asia/Hong_Kong", "Local"}
16901723

16911724
// Regression test for timezone handling
16921725
tzTest := func(dbt *DBTest) {
16931726
// Create table
16941727
dbt.mustExec("CREATE TABLE test (ts TIMESTAMP)")
16951728

16961729
// Insert local time into database (should be converted)
1697-
usCentral, _ := time.LoadLocation("US/Central")
1698-
reftime := time.Date(2014, 05, 30, 18, 03, 17, 0, time.UTC).In(usCentral)
1730+
newYorkTz, _ := time.LoadLocation("America/New_York")
1731+
reftime := time.Date(2014, 05, 30, 18, 03, 17, 0, time.UTC).In(newYorkTz)
16991732
dbt.mustExec("INSERT INTO test VALUE (?)", reftime)
17001733

17011734
// Retrieve time from DB
@@ -1714,7 +1747,7 @@ func TestTimezoneConversion(t *testing.T) {
17141747
// Check that dates match
17151748
if reftime.Unix() != dbTime.Unix() {
17161749
dbt.Errorf("times do not match.\n")
1717-
dbt.Errorf(" Now(%v)=%v\n", usCentral, reftime)
1750+
dbt.Errorf(" Now(%v)=%v\n", newYorkTz, reftime)
17181751
dbt.Errorf(" Now(UTC)=%v\n", dbTime)
17191752
}
17201753
}
@@ -3542,6 +3575,15 @@ func TestConnectionAttributes(t *testing.T) {
35423575

35433576
dbt := &DBTest{t, db}
35443577

3578+
var varName string
3579+
var varValue string
3580+
err := dbt.db.QueryRow("SHOW VARIABLES LIKE 'performance_schema'").Scan(&varName, &varValue)
3581+
if err != nil {
3582+
t.Fatalf("error: %s", err.Error())
3583+
}
3584+
if varValue != "ON" {
3585+
t.Skipf("Performance schema is not enabled. skipping")
3586+
}
35453587
queryString := "SELECT ATTR_NAME, ATTR_VALUE FROM performance_schema.session_account_connect_attrs WHERE PROCESSLIST_ID = CONNECTION_ID()"
35463588
rows := dbt.mustQuery(queryString)
35473589
defer rows.Close()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /