vitess.io/vitess@v0.16.2/go/mysql/mariadb_gtid_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 mysql 18 19 import ( 20 "strings" 21 "testing" 22 23 "github.com/stretchr/testify/assert" 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestParseMariaGTID(t *testing.T) { 28 input := "12-345-6789" 29 want := MariadbGTID{Domain: 12, Server: 345, Sequence: 6789} 30 31 got, err := parseMariadbGTID(input) 32 assert.NoError(t, err, "%v", err) 33 assert.Equal(t, want, got.(MariadbGTID), "parseMariadbGTID(%v) = %v, want %v", input, got, want) 34 35 } 36 37 func TestParseInvalidMariaGTID(t *testing.T) { 38 input := "12345" 39 want := "invalid MariaDB GTID" 40 41 _, err := parseMariadbGTID(input) 42 assert.Error(t, err, "expected error for invalid input (%v)", input) 43 assert.True(t, strings.HasPrefix(err.Error(), want), "wrong error message, got '%v', want '%v'", err, want) 44 45 } 46 47 func TestParseMariaGTIDInvalidDomain(t *testing.T) { 48 input := "1x-33-142" 49 want := "invalid MariaDB GTID Domain ID" 50 51 _, err := parseMariadbGTID(input) 52 assert.Error(t, err, "expected error for invalid input (%v)", input) 53 assert.True(t, strings.HasPrefix(err.Error(), want), "wrong error message, got '%v', want '%v'", err, want) 54 55 } 56 57 func TestParseMariaGTIDInvalidServer(t *testing.T) { 58 input := "1-2c3-142" 59 want := "invalid MariaDB GTID Server ID" 60 61 _, err := parseMariadbGTID(input) 62 assert.Error(t, err, "expected error for invalid input (%v)", input) 63 assert.True(t, strings.HasPrefix(err.Error(), want), "wrong error message, got '%v', want '%v'", err, want) 64 65 } 66 67 func TestParseMariaGTIDInvalidSequence(t *testing.T) { 68 input := "1-33-a142" 69 want := "invalid MariaDB GTID Sequence number" 70 71 _, err := parseMariadbGTID(input) 72 assert.Error(t, err, "expected error for invalid input (%v)", input) 73 assert.True(t, strings.HasPrefix(err.Error(), want), "wrong error message, got '%v', want '%v'", err, want) 74 75 } 76 77 func TestParseMariaGTIDSet(t *testing.T) { 78 input := "12-34-5678,11-22-3333" 79 want := MariadbGTIDSet{ 80 12: MariadbGTID{Domain: 12, Server: 34, Sequence: 5678}, 81 11: MariadbGTID{Domain: 11, Server: 22, Sequence: 3333}, 82 } 83 84 got, err := parseMariadbGTIDSet(input) 85 assert.NoError(t, err, "%v", err) 86 assert.True(t, got.Equal(want), "parseMariadbGTIDSet(%#v) = %#v, want %#v", input, got, want) 87 88 } 89 90 func TestParseInvalidMariaGTIDSet(t *testing.T) { 91 input := "12-34-5678,11-22-33e33" 92 want := "invalid MariaDB GTID Sequence number" 93 94 _, err := parseMariadbGTIDSet(input) 95 if err == nil { 96 t.Errorf("expected error for invalid input (%#v)", input) 97 return 98 } 99 if got := err.Error(); !strings.HasPrefix(got, want) { 100 t.Errorf("parseMariadbGTIDSet(%#v) error = %#v, want %#v", input, got, want) 101 } 102 } 103 104 func TestMariaGTIDString(t *testing.T) { 105 input := MariadbGTID{Domain: 5, Server: 4727, Sequence: 1737373} 106 want := "5-4727-1737373" 107 108 got := input.String() 109 assert.Equal(t, want, got, "%#v.String() = '%v', want '%v'", input, got, want) 110 111 } 112 113 func TestMariaGTIDFlavor(t *testing.T) { 114 input := MariadbGTID{Domain: 1, Server: 2, Sequence: 123} 115 want := "MariaDB" 116 117 got := input.Flavor() 118 assert.Equal(t, want, got, "%#v.Flavor() = '%v', want '%v'", input, got, want) 119 120 } 121 122 func TestMariaGTIDSequenceDomain(t *testing.T) { 123 input := MariadbGTID{Domain: 12, Server: 345, Sequence: 6789} 124 want := any(uint32(12)) 125 126 got := input.SequenceDomain() 127 assert.Equal(t, want, got, "%#v.SequenceDomain() = %#v, want %#v", input, got, want) 128 129 } 130 131 func TestMariaGTIDSourceServer(t *testing.T) { 132 input := MariadbGTID{Domain: 12, Server: 345, Sequence: 6789} 133 want := any(uint32(345)) 134 135 got := input.SourceServer() 136 assert.Equal(t, want, got, "%#v.SourceServer() = %#v, want %#v", input, got, want) 137 138 } 139 140 func TestMariaGTIDSequenceNumber(t *testing.T) { 141 input := MariadbGTID{Domain: 12, Server: 345, Sequence: 6789} 142 want := any(uint64(6789)) 143 144 got := input.SequenceNumber() 145 assert.Equal(t, want, got, "%#v.SequenceNumber() = %#v, want %#v", input, got, want) 146 147 } 148 149 func TestMariaGTIDGTIDSet(t *testing.T) { 150 input := MariadbGTID{Domain: 12, Server: 345, Sequence: 6789} 151 want := MariadbGTIDSet{12: input} 152 153 got := input.GTIDSet() 154 assert.True(t, got.Equal(want), "%#v.GTIDSet() = %#v, want %#v", input, got, want) 155 156 } 157 158 func TestMariaGTIDSetString(t *testing.T) { 159 input := MariadbGTIDSet{ 160 5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1737373}, 161 3: MariadbGTID{Domain: 3, Server: 4321, Sequence: 9876}, 162 1: MariadbGTID{Domain: 1, Server: 1234, Sequence: 5678}, 163 } 164 want := "1-1234-5678,3-4321-9876,5-4727-1737373" 165 166 got := input.String() 167 assert.Equal(t, want, got, "%#v.String() = '%v', want '%v'", input, got, want) 168 169 } 170 171 func TestMariaGTIDSetContainsLess(t *testing.T) { 172 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 300}} 173 input2 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 700}} 174 want := false 175 176 if got := input1.Contains(input2); got != want { 177 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 178 } 179 } 180 181 func TestMariaGTIDSetContainsGreater(t *testing.T) { 182 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 9000}} 183 input2 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 5555, Sequence: 100}} 184 want := true 185 186 if got := input1.Contains(input2); got != want { 187 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 188 } 189 } 190 191 func TestMariaGTIDSetContainsEqual(t *testing.T) { 192 input1 := MariadbGTIDSet{ 193 1: MariadbGTID{Domain: 1, Server: 4321, Sequence: 100}, 194 5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234}, 195 } 196 input2 := MariadbGTIDSet{ 197 1: MariadbGTID{Domain: 1, Server: 4321, Sequence: 100}, 198 5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234}, 199 } 200 want := true 201 202 if got := input1.Contains(input2); got != want { 203 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 204 } 205 } 206 207 func TestMariaGTIDSetMultipleContainsLess(t *testing.T) { 208 input1 := MariadbGTIDSet{ 209 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 123}, 210 5: MariadbGTID{Domain: 5, Server: 5, Sequence: 24601}, 211 } 212 input2 := MariadbGTIDSet{ 213 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 124}, 214 } 215 want := false 216 217 if got := input1.Contains(input2); got != want { 218 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 219 } 220 } 221 222 func TestMariaGTIDSetMultipleContainsGreater(t *testing.T) { 223 input1 := MariadbGTIDSet{ 224 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 123}, 225 5: MariadbGTID{Domain: 5, Server: 5, Sequence: 24601}, 226 } 227 input2 := MariadbGTIDSet{ 228 4: MariadbGTID{Domain: 4, Server: 2, Sequence: 122}, 229 } 230 want := true 231 232 if got := input1.Contains(input2); got != want { 233 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 234 } 235 } 236 237 func TestMariaGTIDSetMultipleContainsMultipleGreater(t *testing.T) { 238 input1 := MariadbGTIDSet{ 239 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 123}, 240 5: MariadbGTID{Domain: 5, Server: 5, Sequence: 24601}, 241 } 242 input2 := MariadbGTIDSet{ 243 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 122}, 244 5: MariadbGTID{Domain: 5, Server: 4, Sequence: 1999}, 245 } 246 want := true 247 248 if got := input1.Contains(input2); got != want { 249 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 250 } 251 } 252 253 func TestMariaGTIDSetMultipleContainsOneLess(t *testing.T) { 254 input1 := MariadbGTIDSet{ 255 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 123}, 256 5: MariadbGTID{Domain: 5, Server: 5, Sequence: 24601}, 257 } 258 input2 := MariadbGTIDSet{ 259 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 122}, 260 5: MariadbGTID{Domain: 5, Server: 4, Sequence: 24602}, 261 } 262 want := false 263 264 if got := input1.Contains(input2); got != want { 265 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 266 } 267 } 268 269 func TestMariaGTIDSetSingleContainsMultiple(t *testing.T) { 270 input1 := MariadbGTIDSet{ 271 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 123}, 272 } 273 input2 := MariadbGTIDSet{ 274 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 122}, 275 5: MariadbGTID{Domain: 5, Server: 4, Sequence: 24602}, 276 } 277 want := false 278 279 if got := input1.Contains(input2); got != want { 280 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 281 } 282 } 283 284 func TestMariaGTIDSetContainsConcreteNil(t *testing.T) { 285 input1 := MariadbGTIDSet{1: MariadbGTID{Domain: 1, Server: 2, Sequence: 123}} 286 input2 := MariadbGTIDSet(nil) 287 want := true 288 289 if got := input1.Contains(input2); got != want { 290 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 291 } 292 } 293 294 func TestMariaGTIDSetFailsNil(t *testing.T) { 295 input1 := MariadbGTIDSet{6: MariadbGTID{Domain: 23, Server: 1, Sequence: 456}} 296 input2 := GTIDSet(nil) 297 want := false 298 299 if got := input1.Contains(input2); got != want { 300 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 301 } 302 } 303 304 func TestMariaGTIDSetContainsWrongType(t *testing.T) { 305 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234}} 306 input2 := fakeGTID{} 307 want := false 308 309 if got := input1.Contains(input2); got != want { 310 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 311 } 312 } 313 314 func TestMariaGTIDSetContainsDifferentDomain(t *testing.T) { 315 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 4727, Sequence: 1235}} 316 input2 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234}} 317 want := false 318 319 if got := input1.Contains(input2); got != want { 320 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 321 } 322 } 323 324 func TestMariaGTIDSetContainsDifferentServer(t *testing.T) { 325 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 4727, Sequence: 1235}} 326 input2 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 327 want := true 328 329 if got := input1.Contains(input2); got != want { 330 t.Errorf("%#v.Contains(%#v) = %v, want %v", input1, input2, got, want) 331 } 332 } 333 334 func TestMariaGTIDSetContainsGTIDLess(t *testing.T) { 335 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 300}} 336 input2 := MariadbGTID{Domain: 5, Server: 4727, Sequence: 700} 337 want := false 338 339 if got := input1.ContainsGTID(input2); got != want { 340 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 341 } 342 } 343 344 func TestMariaGTIDSetContainsGTIDGreater(t *testing.T) { 345 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 9000}} 346 input2 := MariadbGTID{Domain: 5, Server: 4727, Sequence: 100} 347 want := true 348 349 if got := input1.ContainsGTID(input2); got != want { 350 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 351 } 352 } 353 354 func TestMariaGTIDSetContainsGTIDEqual(t *testing.T) { 355 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234}} 356 input2 := MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234} 357 want := true 358 359 if got := input1.ContainsGTID(input2); got != want { 360 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 361 } 362 } 363 364 func TestMariaGTIDSetContainsGTIDNil(t *testing.T) { 365 input1 := MariadbGTIDSet{1: MariadbGTID{Domain: 1, Server: 2, Sequence: 123}} 366 input2 := GTID(nil) 367 want := true 368 369 if got := input1.ContainsGTID(input2); got != want { 370 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 371 } 372 } 373 374 func TestMariaGTIDSetContainsGTIDWrongType(t *testing.T) { 375 input1 := MariadbGTIDSet{5: MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234}} 376 input2 := fakeGTID{} 377 want := false 378 379 if got := input1.ContainsGTID(input2); got != want { 380 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 381 } 382 } 383 384 func TestMariaGTIDSetContainsGTIDDifferentDomain(t *testing.T) { 385 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 4727, Sequence: 1235}} 386 input2 := MariadbGTID{Domain: 5, Server: 4727, Sequence: 1234} 387 want := false 388 389 if got := input1.ContainsGTID(input2); got != want { 390 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 391 } 392 } 393 394 func TestMariaGTIDSetContainsGTIDDifferentServer(t *testing.T) { 395 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 4727, Sequence: 1235}} 396 input2 := MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234} 397 want := true 398 399 if got := input1.ContainsGTID(input2); got != want { 400 t.Errorf("%#v.ContainsGTID(%#v) = %v, want %v", input1, input2, got, want) 401 } 402 } 403 404 func TestMariaGTIDSetEqual(t *testing.T) { 405 input1 := MariadbGTIDSet{ 406 1: MariadbGTID{Domain: 1, Server: 1234, Sequence: 5678}, 407 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 408 } 409 input2 := MariadbGTIDSet{ 410 1: MariadbGTID{Domain: 1, Server: 1234, Sequence: 5678}, 411 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 412 } 413 want := true 414 415 if got := input1.Equal(input2); got != want { 416 t.Errorf("%#v.Equal(%#v) = %v, want %v", input1, input2, got, want) 417 } 418 } 419 420 func TestMariaGTIDSetNotEqual(t *testing.T) { 421 input1 := MariadbGTIDSet{ 422 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 423 4: MariadbGTID{Domain: 4, Server: 4555, Sequence: 1234}, 424 } 425 input2 := MariadbGTIDSet{ 426 3: MariadbGTID{Domain: 3, Server: 4555, Sequence: 1234}, 427 4: MariadbGTID{Domain: 4, Server: 4555, Sequence: 1234}, 428 } 429 want := false 430 431 if got := input1.Equal(input2); got != want { 432 t.Errorf("%#v.Equal(%#v) = %v, want %v", input1, input2, got, want) 433 } 434 } 435 436 func TestMariaGTIDSetNotEqualDifferentDomain(t *testing.T) { 437 input1 := MariadbGTIDSet{ 438 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 439 4: MariadbGTID{Domain: 4, Server: 4555, Sequence: 1234}, 440 } 441 input2 := MariadbGTIDSet{ 442 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 443 5: MariadbGTID{Domain: 5, Server: 4555, Sequence: 1234}, 444 } 445 want := false 446 447 if got := input1.Equal(input2); got != want { 448 t.Errorf("%#v.Equal(%#v) = %v, want %v", input1, input2, got, want) 449 } 450 } 451 452 func TestMariaGTIDSetNotEqualExtraDomain(t *testing.T) { 453 input1 := MariadbGTIDSet{ 454 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 455 } 456 input2 := MariadbGTIDSet{ 457 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 458 4: MariadbGTID{Domain: 4, Server: 4555, Sequence: 1234}, 459 } 460 want := false 461 462 if got := input1.Equal(input2); got != want { 463 t.Errorf("%#v.Equal(%#v) = %v, want %v", input1, input2, got, want) 464 } 465 } 466 467 func TestMariaGTIDSetEqualWrongType(t *testing.T) { 468 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 469 input2 := fakeGTID{} 470 want := false 471 472 if got := input1.Equal(input2); got != want { 473 t.Errorf("%#v.Equal(%#v) = %v, want %v", input1, input2, got, want) 474 } 475 } 476 477 func TestMariaGTIDSetEqualNil(t *testing.T) { 478 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 479 input2 := GTIDSet(nil) 480 want := false 481 482 if got := input1.Equal(input2); got != want { 483 t.Errorf("%#v.Equal(%#v) = %v, want %v", input1, input2, got, want) 484 } 485 } 486 487 func TestMariaGTIDSetAddGTIDEqual(t *testing.T) { 488 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 489 input2 := MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234} 490 want := input1 491 492 if got := input1.AddGTID(input2); !got.Equal(want) { 493 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 494 } 495 } 496 497 func TestMariaGTIDSetAddGTIDGreater(t *testing.T) { 498 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 5234}} 499 input2 := MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234} 500 want := input1 501 502 if got := input1.AddGTID(input2); !got.Equal(want) { 503 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 504 } 505 } 506 507 func TestMariaGTIDSetAddGTIDLess(t *testing.T) { 508 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 509 input2 := MariadbGTID{Domain: 3, Server: 5555, Sequence: 5234} 510 want := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 5234}} 511 512 if got := input1.AddGTID(input2); !got.Equal(want) { 513 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 514 } 515 } 516 517 func TestMariaGTIDSetAddGTIDWrongType(t *testing.T) { 518 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 519 input2 := fakeGTID{} 520 want := input1 521 522 if got := input1.AddGTID(input2); !got.Equal(want) { 523 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 524 } 525 } 526 527 func TestMariaGTIDSetAddGTIDNil(t *testing.T) { 528 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 529 input2 := GTID(nil) 530 want := input1 531 532 if got := input1.AddGTID(input2); !got.Equal(want) { 533 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 534 } 535 } 536 537 func TestMariaGTIDSetAddGTIDDifferentServer(t *testing.T) { 538 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 539 input2 := MariadbGTID{Domain: 3, Server: 4444, Sequence: 5234} 540 want := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 4444, Sequence: 5234}} 541 542 if got := input1.AddGTID(input2); !got.Equal(want) { 543 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 544 } 545 } 546 547 func TestMariaGTIDSetAddGTIDDifferentDomain(t *testing.T) { 548 input1 := MariadbGTIDSet{3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}} 549 input2 := MariadbGTID{Domain: 5, Server: 5555, Sequence: 5234} 550 want := MariadbGTIDSet{ 551 3: MariadbGTID{Domain: 3, Server: 5555, Sequence: 1234}, 552 5: MariadbGTID{Domain: 5, Server: 5555, Sequence: 5234}, 553 } 554 555 if got := input1.AddGTID(input2); !got.Equal(want) { 556 t.Errorf("%#v.AddGTID(%#v) = %v, want %v", input1, input2, got, want) 557 } 558 } 559 560 func TestMariaGTIDSetUnion(t *testing.T) { 561 set1 := MariadbGTIDSet{ 562 3: MariadbGTID{Domain: 3, Server: 1, Sequence: 1}, 563 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 2}, 564 5: MariadbGTID{Domain: 5, Server: 1, Sequence: 3}, 565 } 566 set2 := MariadbGTIDSet{ 567 3: MariadbGTID{Domain: 3, Server: 1, Sequence: 2}, 568 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 1}, 569 5: MariadbGTID{Domain: 5, Server: 1, Sequence: 4}, 570 } 571 572 got := set1.Union(set2) 573 574 want := MariadbGTIDSet{ 575 3: MariadbGTID{Domain: 3, Server: 1, Sequence: 2}, 576 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 2}, 577 5: MariadbGTID{Domain: 5, Server: 1, Sequence: 4}, 578 } 579 assert.True(t, got.Equal(want), "set1: %#v, set1.Union(%#v) = %#v, want %#v", set1, set2, got, want) 580 581 } 582 583 func TestMariaGTIDSetUnionNewDomain(t *testing.T) { 584 set1 := MariadbGTIDSet{ 585 3: MariadbGTID{Domain: 3, Server: 1, Sequence: 1}, 586 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 2}, 587 5: MariadbGTID{Domain: 5, Server: 1, Sequence: 3}, 588 } 589 set2 := MariadbGTIDSet{ 590 3: MariadbGTID{Domain: 3, Server: 1, Sequence: 2}, 591 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 1}, 592 5: MariadbGTID{Domain: 5, Server: 1, Sequence: 4}, 593 6: MariadbGTID{Domain: 6, Server: 1, Sequence: 7}, 594 } 595 596 got := set1.Union(set2) 597 598 want := MariadbGTIDSet{ 599 3: MariadbGTID{Domain: 3, Server: 1, Sequence: 2}, 600 4: MariadbGTID{Domain: 4, Server: 1, Sequence: 2}, 601 5: MariadbGTID{Domain: 5, Server: 1, Sequence: 4}, 602 6: MariadbGTID{Domain: 6, Server: 1, Sequence: 7}, 603 } 604 assert.True(t, got.Equal(want), "set1: %#v, set1.Union(%#v) = %#v, want %#v", set1, set2, got, want) 605 606 switch g := got.(type) { 607 case MariadbGTIDSet: 608 // Enforce order of want. Results should be sorted by domain. 609 if g[0] != want[0] || g[1] != want[1] || g[2] != want[2] || g[3] != want[3] { 610 t.Error("Set was not sorted by domain when returned.") 611 } 612 default: 613 t.Error("Union result was not of type MariadbGTIDSet.") 614 } 615 } 616 617 func TestMariaGTIDSetLast(t *testing.T) { 618 619 testCases := map[string]string{ 620 "12-34-5678,11-22-3333,24-52-4523": "24-52-4523", 621 "12-34-5678": "12-34-5678", 622 } 623 for input, want := range testCases { 624 got, err := parseMariadbGTIDSet(input) 625 require.NoError(t, err) 626 assert.Equal(t, want, got.Last()) 627 } 628 }