vitess.io/vitess@v0.16.2/go/vt/binlog/eventtoken/compare_test.go (about) 1 /* 2 Copyright 2019 The Vitess Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package eventtoken 18 19 import ( 20 "testing" 21 22 querypb "vitess.io/vitess/go/vt/proto/query" 23 ) 24 25 func TestFresher(t *testing.T) { 26 testcases := []struct { 27 ev1 *querypb.EventToken 28 ev2 *querypb.EventToken 29 expected int 30 }{{ 31 // Test cases with no shards. 32 ev1: nil, 33 ev2: nil, 34 expected: -1, 35 }, { 36 ev1: &querypb.EventToken{ 37 Timestamp: 123, 38 }, 39 ev2: nil, 40 expected: -1, 41 }, { 42 ev1: nil, 43 ev2: &querypb.EventToken{ 44 Timestamp: 123, 45 }, 46 expected: -1, 47 }, { 48 ev1: &querypb.EventToken{ 49 Timestamp: 123, 50 }, 51 ev2: &querypb.EventToken{ 52 Timestamp: 123, 53 }, 54 expected: -1, 55 }, { 56 ev1: &querypb.EventToken{ 57 Timestamp: 200, 58 }, 59 ev2: &querypb.EventToken{ 60 Timestamp: 100, 61 }, 62 expected: 100, 63 }, { 64 ev1: &querypb.EventToken{ 65 Timestamp: 100, 66 }, 67 ev2: &querypb.EventToken{ 68 Timestamp: 200, 69 }, 70 expected: -100, 71 }, { 72 // Test cases with not enough information to compare. 73 ev1: &querypb.EventToken{ 74 Timestamp: 100, 75 }, 76 ev2: &querypb.EventToken{ 77 Timestamp: 100, 78 }, 79 expected: -1, 80 }, { 81 ev1: &querypb.EventToken{ 82 Timestamp: 100, 83 Shard: "s1", 84 }, 85 ev2: &querypb.EventToken{ 86 Timestamp: 100, 87 Shard: "s2", 88 }, 89 expected: -1, 90 }, { 91 ev1: &querypb.EventToken{ 92 Timestamp: 100, 93 Shard: "s1", 94 }, 95 ev2: &querypb.EventToken{ 96 Timestamp: 100, 97 Shard: "s1", 98 }, 99 expected: -1, 100 }, { 101 ev1: &querypb.EventToken{ 102 Timestamp: 100, 103 Shard: "s1", 104 Position: "pos1", 105 }, 106 ev2: &querypb.EventToken{ 107 Timestamp: 100, 108 Shard: "s1", 109 }, 110 expected: -1, 111 }, { 112 ev1: &querypb.EventToken{ 113 Timestamp: 100, 114 Shard: "s1", 115 }, 116 ev2: &querypb.EventToken{ 117 Timestamp: 100, 118 Shard: "s1", 119 Position: "pos2", 120 }, 121 expected: -1, 122 }, { 123 ev1: &querypb.EventToken{ 124 Timestamp: 100, 125 Shard: "s1", 126 Position: "pos1", // invalid on purpose 127 }, 128 ev2: &querypb.EventToken{ 129 Timestamp: 100, 130 Shard: "s1", 131 Position: "pos2", // invalid on purpose 132 }, 133 expected: -1, 134 }, { 135 ev1: &querypb.EventToken{ 136 Timestamp: 100, 137 Shard: "s1", 138 Position: "MariaDB/0-1-123", // valid but different 139 }, 140 ev2: &querypb.EventToken{ 141 Timestamp: 100, 142 Shard: "s1", 143 Position: "MySQL56/33333333-3333-3333-3333-333333333333:456-789", 144 }, 145 expected: -1, 146 }, { 147 // MariaDB test cases. 148 ev1: &querypb.EventToken{ 149 Timestamp: 100, 150 Shard: "s1", 151 Position: "MariaDB/0-1-200", 152 }, 153 ev2: &querypb.EventToken{ 154 Timestamp: 100, 155 Shard: "s1", 156 Position: "MariaDB/0-1-100", 157 }, 158 expected: 1, 159 }, { 160 ev1: &querypb.EventToken{ 161 Timestamp: 100, 162 Shard: "s1", 163 Position: "MariaDB/0-1-100", 164 }, 165 ev2: &querypb.EventToken{ 166 Timestamp: 100, 167 Shard: "s1", 168 Position: "MariaDB/0-1-200", 169 }, 170 expected: -1, 171 }, { 172 ev1: &querypb.EventToken{ 173 Timestamp: 100, 174 Shard: "s1", 175 Position: "MariaDB/0-1-100", 176 }, 177 ev2: &querypb.EventToken{ 178 Timestamp: 100, 179 Shard: "s1", 180 Position: "MariaDB/0-1-100", 181 }, 182 expected: 0, 183 }, { 184 // MySQL56 test cases. 185 ev1: &querypb.EventToken{ 186 Timestamp: 100, 187 Shard: "s1", 188 Position: "MySQL56/33333333-3333-3333-3333-333333333333:1-200", 189 }, 190 ev2: &querypb.EventToken{ 191 Timestamp: 100, 192 Shard: "s1", 193 Position: "MySQL56/33333333-3333-3333-3333-333333333333:1-100", 194 }, 195 expected: 1, 196 }, { 197 ev1: &querypb.EventToken{ 198 Timestamp: 100, 199 Shard: "s1", 200 Position: "MySQL56/33333333-3333-3333-3333-333333333333:1-100", 201 }, 202 ev2: &querypb.EventToken{ 203 Timestamp: 100, 204 Shard: "s1", 205 Position: "MySQL56/33333333-3333-3333-3333-333333333333:1-200", 206 }, 207 expected: -1, 208 }, { 209 ev1: &querypb.EventToken{ 210 Timestamp: 100, 211 Shard: "s1", 212 Position: "MySQL56/33333333-3333-3333-3333-333333333333:1-100", 213 }, 214 ev2: &querypb.EventToken{ 215 Timestamp: 100, 216 Shard: "s1", 217 Position: "MySQL56/33333333-3333-3333-3333-333333333333:1-100", 218 }, 219 expected: 0, 220 }} 221 222 for _, tcase := range testcases { 223 got := Fresher(tcase.ev1, tcase.ev2) 224 if got != tcase.expected { 225 t.Errorf("got %v but expected %v for Fresher(%v, %v)", got, tcase.expected, tcase.ev1, tcase.ev2) 226 } 227 } 228 }