Skip to content

Commit acc1c41

Browse files
authored
Merge pull request #2792 from dolthub/macneale4/strict-warning-tests
Fix the warning checks in enginetest to be more strict
2 parents 260b407 + 5c4a14a commit acc1c41

File tree

3 files changed

+99
-58
lines changed

3 files changed

+99
-58
lines changed

enginetest/evaluation.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,15 +1042,25 @@ func AssertWarningAndTestQuery(
10421042
// check warnings depend on context, which ServerEngine does not depend on
10431043
if expectedWarningsCount > 0 {
10441044
assert.Equal(t, expectedWarningsCount, len(ctx.Warnings()))
1045+
// Verify that if warnings are expected, we also configured a specific value check.
1046+
if expectedCode == 0 && len(expectedWarningMessageSubstring) == 0 {
1047+
require.Fail("Invalid test setup. Warning expected, but no value validation was configured.")
1048+
}
1049+
} else {
1050+
if expectedCode != 0 || len(expectedWarningMessageSubstring) != 0 {
1051+
require.Fail("Invalid test setup. No warnings expected, but value validation was configured")
1052+
}
1053+
assert.Zero(t, len(ctx.Warnings()), "Unexpected warnings")
10451054
}
10461055

10471056
if expectedCode > 0 {
1057+
// Not ideal. We are only supporting all warning codes being identical in a given test.
10481058
for _, warning := range ctx.Warnings() {
10491059
assert.Equal(t, expectedCode, warning.Code, "Unexpected warning code")
10501060
}
10511061
}
1052-
10531062
if len(expectedWarningMessageSubstring) > 0 {
1063+
// Not ideal. All messages must have the same substring for a given test.
10541064
for _, warning := range ctx.Warnings() {
10551065
assert.Contains(t, warning.Message, expectedWarningMessageSubstring, "Unexpected warning message")
10561066
}

enginetest/queries/insert_queries.go

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,7 +1529,8 @@ var InsertScripts = []ScriptTest{
15291529
},
15301530
},
15311531
{
1532-
Name: "Try INSERT IGNORE with primary key, non null, and single row violations",
1532+
Name: "Try INSERT IGNORE with primary key, non null, and single row violations",
1533+
Dialect: "mysql",
15331534
SetUpScript: []string{
15341535
"CREATE TABLE y (pk int primary key, c1 int NOT NULL);",
15351536
"INSERT IGNORE INTO y VALUES (1, 1), (1,2), (2, 2), (3, 3)",
@@ -1546,49 +1547,56 @@ var InsertScripts = []ScriptTest{
15461547
Expected: []sql.Row{
15471548
{types.OkResult{RowsAffected: 1}},
15481549
},
1549-
ExpectedWarning: mysql.ERDupEntry,
1550+
ExpectedWarningsCount: 1,
1551+
ExpectedWarning: mysql.ERDupEntry,
15501552
},
15511553
{
15521554
Query: "INSERT IGNORE INTO y VALUES (5, NULL)",
15531555
Expected: []sql.Row{
15541556
{types.OkResult{RowsAffected: 1}},
15551557
},
1556-
ExpectedWarning: mysql.ERBadNullError,
1558+
ExpectedWarningsCount: 1,
1559+
ExpectedWarning: mysql.ERBadNullError,
15571560
},
15581561
{
15591562
Query: "INSERT IGNORE INTO y SELECT * FROM y WHERE pk=(SELECT pk+10 FROM y WHERE pk > 1);",
15601563
Expected: []sql.Row{
15611564
{types.OkResult{RowsAffected: 0}},
15621565
},
1563-
ExpectedWarning: mysql.ERSubqueryNo1Row,
1566+
ExpectedWarningsCount: 5,
1567+
ExpectedWarning: mysql.ERSubqueryNo1Row,
15641568
},
15651569
{
15661570
Query: "INSERT IGNORE INTO y SELECT 10, 0 FROM dual WHERE 1=(SELECT 1 FROM dual UNION SELECT 2 FROM dual);",
15671571
Expected: []sql.Row{
15681572
{types.OkResult{RowsAffected: 0}},
15691573
},
1570-
ExpectedWarning: mysql.ERSubqueryNo1Row,
1574+
ExpectedWarningsCount: 1,
1575+
ExpectedWarning: mysql.ERSubqueryNo1Row,
15711576
},
15721577
{
15731578
Query: "INSERT IGNORE INTO y SELECT 11, 0 FROM dual WHERE 1=(SELECT 1 FROM dual UNION SELECT 2 FROM dual) UNION SELECT 12, 0 FROM dual;",
15741579
Expected: []sql.Row{
15751580
{types.OkResult{RowsAffected: 1}},
15761581
},
1577-
ExpectedWarning: mysql.ERSubqueryNo1Row,
1582+
ExpectedWarningsCount: 1,
1583+
ExpectedWarning: mysql.ERSubqueryNo1Row,
15781584
},
15791585
{
15801586
Query: "INSERT IGNORE INTO y SELECT 13, 0 FROM dual UNION SELECT 14, 0 FROM dual WHERE 1=(SELECT 1 FROM dual UNION SELECT 2 FROM dual);",
15811587
Expected: []sql.Row{
15821588
{types.OkResult{RowsAffected: 1}},
15831589
},
1584-
ExpectedWarning: mysql.ERSubqueryNo1Row,
1590+
ExpectedWarningsCount: 1,
1591+
ExpectedWarning: mysql.ERSubqueryNo1Row,
15851592
},
15861593
{
15871594
Query: "INSERT IGNORE INTO y VALUES (3, 8)",
15881595
Expected: []sql.Row{
15891596
{types.OkResult{RowsAffected: 0}},
15901597
},
1591-
ExpectedWarning: mysql.ERDupEntry,
1598+
ExpectedWarningsCount: 1,
1599+
ExpectedWarning: mysql.ERDupEntry,
15921600
},
15931601
},
15941602
},
@@ -2164,7 +2172,8 @@ var InsertScripts = []ScriptTest{
21642172
},
21652173
},
21662174
{
2167-
Name: "INSERT IGNORE works with FK Violations",
2175+
Name: "INSERT IGNORE works with FK Violations",
2176+
Dialect: "mysql",
21682177
SetUpScript: []string{
21692178
"CREATE TABLE t1 (id INT PRIMARY KEY, v int);",
21702179
"CREATE TABLE t2 (id INT PRIMARY KEY, v2 int, CONSTRAINT mfk FOREIGN KEY (v2) REFERENCES t1(id));",
@@ -2176,7 +2185,8 @@ var InsertScripts = []ScriptTest{
21762185
Expected: []sql.Row{
21772186
{types.OkResult{RowsAffected: 0}},
21782187
},
2179-
ExpectedWarning: mysql.ErNoReferencedRow2,
2188+
ExpectedWarningsCount: 1,
2189+
ExpectedWarning: mysql.ErNoReferencedRow2,
21802190
},
21812191
},
21822192
},
@@ -2622,7 +2632,8 @@ var InsertIgnoreScripts = []ScriptTest{
26222632
Expected: []sql.Row{
26232633
{types.OkResult{RowsAffected: 1}},
26242634
},
2625-
ExpectedWarning: mysql.ERBadNullError,
2635+
ExpectedWarningsCount: 1,
2636+
ExpectedWarning: mysql.ERBadNullError,
26262637
},
26272638
},
26282639
},
@@ -2638,7 +2649,8 @@ var InsertIgnoreScripts = []ScriptTest{
26382649
Expected: []sql.Row{
26392650
{types.OkResult{RowsAffected: 1}},
26402651
},
2641-
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
2652+
ExpectedWarningsCount: 1,
2653+
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
26422654
},
26432655
{
26442656
Query: "SELECT * FROM t1",
@@ -2651,7 +2663,8 @@ var InsertIgnoreScripts = []ScriptTest{
26512663
Expected: []sql.Row{
26522664
{types.OkResult{RowsAffected: 1}},
26532665
},
2654-
ExpectedWarning: mysql.ERUnknownError,
2666+
ExpectedWarningsCount: 1,
2667+
ExpectedWarning: mysql.ERUnknownError,
26552668
},
26562669
{
26572670
Query: "SELECT * FROM t2",
@@ -2675,7 +2688,8 @@ var InsertIgnoreScripts = []ScriptTest{
26752688
Expected: []sql.Row{
26762689
{types.OkResult{RowsAffected: 2}},
26772690
},
2678-
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
2691+
ExpectedWarningsCount: 1,
2692+
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
26792693
},
26802694
{
26812695
Query: "SELECT * FROM t1",
@@ -2688,7 +2702,8 @@ var InsertIgnoreScripts = []ScriptTest{
26882702
Expected: []sql.Row{
26892703
{types.OkResult{RowsAffected: 1}},
26902704
},
2691-
ExpectedWarning: mysql.ERUnknownError,
2705+
ExpectedWarningsCount: 1,
2706+
ExpectedWarning: mysql.ERUnknownError,
26922707
},
26932708
{
26942709
Query: "SELECT * FROM t2",
@@ -2722,7 +2737,8 @@ var InsertIgnoreScripts = []ScriptTest{
27222737
Expected: []sql.Row{
27232738
{types.OkResult{RowsAffected: 3}},
27242739
},
2725-
ExpectedWarning: mysql.ERDupEntry,
2740+
ExpectedWarningsCount: 1,
2741+
ExpectedWarning: mysql.ERDupEntry,
27262742
},
27272743
{
27282744
Query: "SELECT * from one_uniq;",
@@ -2735,7 +2751,8 @@ var InsertIgnoreScripts = []ScriptTest{
27352751
Expected: []sql.Row{
27362752
{types.OkResult{RowsAffected: 8}},
27372753
},
2738-
ExpectedWarning: mysql.ERDupEntry,
2754+
ExpectedWarningsCount: 1,
2755+
ExpectedWarning: mysql.ERDupEntry,
27392756
},
27402757
{
27412758
Query: "SELECT * from two_uniq;",
@@ -2784,7 +2801,8 @@ var IgnoreWithDuplicateUniqueKeyKeylessScripts = []ScriptTest{
27842801
Expected: []sql.Row{
27852802
{types.OkResult{RowsAffected: 3}},
27862803
},
2787-
ExpectedWarning: mysql.ERDupEntry,
2804+
ExpectedWarningsCount: 1,
2805+
ExpectedWarning: mysql.ERDupEntry,
27882806
},
27892807
{
27902808
Query: "SELECT * from one_uniq;",
@@ -2797,7 +2815,8 @@ var IgnoreWithDuplicateUniqueKeyKeylessScripts = []ScriptTest{
27972815
Expected: []sql.Row{
27982816
{types.OkResult{RowsAffected: 8}},
27992817
},
2800-
ExpectedWarning: mysql.ERDupEntry,
2818+
ExpectedWarningsCount: 1,
2819+
ExpectedWarning: mysql.ERDupEntry,
28012820
},
28022821
{
28032822
Query: "SELECT * from two_uniq;",
@@ -2831,9 +2850,10 @@ var IgnoreWithDuplicateUniqueKeyKeylessScripts = []ScriptTest{
28312850
Expected: []sql.Row{{types.NewOkResult(0)}},
28322851
},
28332852
{
2834-
Query: "INSERT IGNORE INTO keyless VALUES (1, 3)",
2835-
Expected: []sql.Row{{types.NewOkResult(0)}},
2836-
ExpectedWarning: mysql.ERDupEntry,
2853+
Query: "INSERT IGNORE INTO keyless VALUES (1, 3)",
2854+
Expected: []sql.Row{{types.NewOkResult(0)}},
2855+
ExpectedWarningsCount: 1,
2856+
ExpectedWarning: mysql.ERDupEntry,
28372857
},
28382858
},
28392859
},
@@ -2857,27 +2877,28 @@ var IgnoreWithDuplicateUniqueKeyKeylessScripts = []ScriptTest{
28572877
ExpectedErr: sql.ErrUniqueKeyViolation,
28582878
},
28592879
{
2860-
Query: "UPDATE IGNORE keyless SET val = 1 where pk = 1",
2861-
Expected: []sql.Row{{newUpdateResult(1, 1)}},
2862-
ExpectedWarning: mysql.ERDupEntry,
2880+
Query: "UPDATE IGNORE keyless SET val = 1 where pk = 1",
2881+
Expected: []sql.Row{{newUpdateResult(1, 1)}},
28632882
},
28642883
{
28652884
Query: "ALTER TABLE keyless ADD CONSTRAINT c UNIQUE(val)",
28662885
Expected: []sql.Row{{types.NewOkResult(0)}},
28672886
},
28682887
{
2869-
Query: "UPDATE IGNORE keyless SET val = 3 where pk = 1",
2870-
Expected: []sql.Row{{newUpdateResult(1, 0)}},
2871-
ExpectedWarning: mysql.ERDupEntry,
2888+
Query: "UPDATE IGNORE keyless SET val = 3 where pk = 1",
2889+
Expected: []sql.Row{{newUpdateResult(1, 0)}},
2890+
ExpectedWarningsCount: 1,
2891+
ExpectedWarning: mysql.ERDupEntry,
28722892
},
28732893
{
28742894
Query: "SELECT * FROM keyless ORDER BY pk",
28752895
Expected: []sql.Row{{1, 1}, {2, 2}, {3, 3}},
28762896
},
28772897
{
2878-
Query: "UPDATE IGNORE keyless SET val = val + 1 ORDER BY pk",
2879-
Expected: []sql.Row{{newUpdateResult(3, 1)}},
2880-
ExpectedWarning: mysql.ERDupEntry,
2898+
Query: "UPDATE IGNORE keyless SET val = val + 1 ORDER BY pk",
2899+
Expected: []sql.Row{{newUpdateResult(3, 1)}},
2900+
ExpectedWarningsCount: 2,
2901+
ExpectedWarning: mysql.ERDupEntry,
28812902
},
28822903
{
28832904
Query: "SELECT * FROM keyless ORDER BY pk",
@@ -2890,7 +2911,8 @@ var IgnoreWithDuplicateUniqueKeyKeylessScripts = []ScriptTest{
28902911
var InsertBrokenScripts = []ScriptTest{
28912912
// TODO: Condense all of our casting logic into a single error.
28922913
{
2893-
Name: "Test that INSERT IGNORE assigns the closest dataype correctly",
2914+
Name: "Test that INSERT IGNORE assigns the closest dataype correctly",
2915+
Dialect: "mysql",
28942916
SetUpScript: []string{
28952917
"CREATE TABLE x (pk int primary key, c1 varchar(20) NOT NULL);",
28962918
`INSERT IGNORE INTO x VALUES (1, "one"), (2, TRUE), (3, "three")`,
@@ -2915,7 +2937,8 @@ var InsertBrokenScripts = []ScriptTest{
29152937
Expected: []sql.Row{
29162938
{types.OkResult{RowsAffected: 1}},
29172939
},
2918-
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
2940+
ExpectedWarningsCount: 1,
2941+
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
29192942
},
29202943
},
29212944
},

enginetest/queries/update_queries.go

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -623,18 +623,20 @@ var UpdateIgnoreScripts = []ScriptTest{
623623
},
624624
Assertions: []ScriptTestAssertion{
625625
{
626-
Query: "UPDATE IGNORE pkTable set pk = pk + 1, val = val + 1",
627-
Expected: []sql.Row{{newUpdateResult(3, 1)}},
628-
ExpectedWarning: mysql.ERDupEntry,
626+
Query: "UPDATE IGNORE pkTable set pk = pk + 1, val = val + 1",
627+
Expected: []sql.Row{{newUpdateResult(3, 1)}},
628+
ExpectedWarningsCount: 2,
629+
ExpectedWarning: mysql.ERDupEntry,
629630
},
630631
{
631632
Query: "SELECT * FROM pkTable order by pk",
632633
Expected: []sql.Row{{1, 1}, {2, 2}, {4, 4}},
633634
},
634635
{
635-
Query: "UPDATE IGNORE idxTable set val = val + 1",
636-
Expected: []sql.Row{{newUpdateResult(3, 1)}},
637-
ExpectedWarning: mysql.ERDupEntry,
636+
Query: "UPDATE IGNORE idxTable set val = val + 1",
637+
Expected: []sql.Row{{newUpdateResult(3, 1)}},
638+
ExpectedWarningsCount: 2,
639+
ExpectedWarning: mysql.ERDupEntry,
638640
},
639641
{
640642
Query: "SELECT * FROM idxTable order by pk",
@@ -649,9 +651,10 @@ var UpdateIgnoreScripts = []ScriptTest{
649651
Expected: []sql.Row{{1, 1}, {2, 3}, {4, 4}},
650652
},
651653
{
652-
Query: "UPDATE IGNORE pkTable SET pk = NULL",
653-
Expected: []sql.Row{{newUpdateResult(3, 3)}},
654-
ExpectedWarning: mysql.ERBadNullError,
654+
Query: "UPDATE IGNORE pkTable SET pk = NULL",
655+
Expected: []sql.Row{{newUpdateResult(3, 3)}},
656+
ExpectedWarningsCount: 3,
657+
ExpectedWarning: mysql.ERBadNullError,
655658
},
656659
{
657660
Query: "SELECT * FROM pkTable order by pk",
@@ -666,9 +669,10 @@ var UpdateIgnoreScripts = []ScriptTest{
666669
Expected: []sql.Row{{0, 0}, {0, 3}, {0, 4}},
667670
},
668671
{
669-
Query: "UPDATE IGNORE idxTable set pk = pk + 1, val = val + 1", // two bad updates
670-
Expected: []sql.Row{{newUpdateResult(3, 1)}},
671-
ExpectedWarning: mysql.ERDupEntry,
672+
Query: "UPDATE IGNORE idxTable set pk = pk + 1, val = val + 1", // two bad updates
673+
Expected: []sql.Row{{newUpdateResult(3, 1)}},
674+
ExpectedWarningsCount: 2,
675+
ExpectedWarning: mysql.ERDupEntry,
672676
},
673677
{
674678
Query: "SELECT * FROM idxTable order by pk",
@@ -684,18 +688,20 @@ var UpdateIgnoreScripts = []ScriptTest{
684688
},
685689
Assertions: []ScriptTestAssertion{
686690
{
687-
Query: "UPDATE IGNORE t1 SET v1 = 'dsddads'",
688-
Expected: []sql.Row{{newUpdateResult(1, 1)}},
689-
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
691+
Query: "UPDATE IGNORE t1 SET v1 = 'dsddads'",
692+
Expected: []sql.Row{{newUpdateResult(1, 1)}},
693+
ExpectedWarningsCount: 1,
694+
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
690695
},
691696
{
692697
Query: "SELECT * FROM t1",
693698
Expected: []sql.Row{{1, 0, 1}},
694699
},
695700
{
696-
Query: "UPDATE IGNORE t1 SET pk = 'dasda', v2 = 'dsddads'",
697-
Expected: []sql.Row{{newUpdateResult(1, 1)}},
698-
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
701+
Query: "UPDATE IGNORE t1 SET pk = 'dasda', v2 = 'dsddads'",
702+
Expected: []sql.Row{{newUpdateResult(1, 1)}},
703+
ExpectedWarningsCount: 2,
704+
ExpectedWarning: mysql.ERTruncatedWrongValueForField,
699705
},
700706
{
701707
Query: "SELECT * FROM t1",
@@ -713,9 +719,10 @@ var UpdateIgnoreScripts = []ScriptTest{
713719
},
714720
Assertions: []ScriptTestAssertion{
715721
{
716-
Query: "UPDATE IGNORE objects SET color = 'orange' where id = 2",
717-
Expected: []sql.Row{{newUpdateResult(1, 0)}},
718-
ExpectedWarning: mysql.ErNoReferencedRow2,
722+
Query: "UPDATE IGNORE objects SET color = 'orange' where id = 2",
723+
Expected: []sql.Row{{newUpdateResult(1, 0)}},
724+
ExpectedWarningsCount: 1,
725+
ExpectedWarning: mysql.ErNoReferencedRow2,
719726
},
720727
{
721728
Query: "SELECT * FROM objects ORDER BY id",
@@ -732,9 +739,10 @@ var UpdateIgnoreScripts = []ScriptTest{
732739
},
733740
Assertions: []ScriptTestAssertion{
734741
{
735-
Query: "UPDATE IGNORE checksTable SET pk = pk + 1 where pk = 4",
736-
Expected: []sql.Row{{newUpdateResult(1, 0)}},
737-
ExpectedWarning: mysql.ERUnknownError,
742+
Query: "UPDATE IGNORE checksTable SET pk = pk + 1 where pk = 4",
743+
Expected: []sql.Row{{newUpdateResult(1, 0)}},
744+
ExpectedWarningsCount: 1,
745+
ExpectedWarning: mysql.ERUnknownError,
738746
},
739747
{
740748
Query: "SELECT * from checksTable ORDER BY pk",

0 commit comments

Comments
 (0)