vitess.io/vitess@v0.16.2/go/vt/vtorc/inst/binlog_test.go (about)

     1  package inst
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"vitess.io/vitess/go/vt/vtorc/config"
     9  )
    10  
    11  var testCoordinates = BinlogCoordinates{LogFile: "mysql-bin.000010", LogPos: 108}
    12  
    13  func init() {
    14  	config.MarkConfigurationLoaded()
    15  }
    16  
    17  func TestDetach(t *testing.T) {
    18  	detachedCoordinates := testCoordinates.Detach()
    19  	require.Equal(t, detachedCoordinates.LogFile, "//mysql-bin.000010:108")
    20  	require.Equal(t, detachedCoordinates.LogPos, testCoordinates.LogPos)
    21  }
    22  
    23  func TestDetachedCoordinates(t *testing.T) {
    24  	isDetached, detachedCoordinates := testCoordinates.ExtractDetachedCoordinates()
    25  	require.False(t, isDetached)
    26  	require.Equal(t, detachedCoordinates.LogFile, testCoordinates.LogFile)
    27  	require.Equal(t, detachedCoordinates.LogPos, testCoordinates.LogPos)
    28  }
    29  
    30  func TestDetachedCoordinates2(t *testing.T) {
    31  	detached := testCoordinates.Detach()
    32  	isDetached, coordinates := detached.ExtractDetachedCoordinates()
    33  
    34  	require.True(t, isDetached)
    35  	require.Equal(t, coordinates.LogFile, testCoordinates.LogFile)
    36  	require.Equal(t, coordinates.LogPos, testCoordinates.LogPos)
    37  }
    38  
    39  func TestPreviousFileCoordinates(t *testing.T) {
    40  	previous, err := testCoordinates.PreviousFileCoordinates()
    41  
    42  	require.NoError(t, err)
    43  	require.Equal(t, previous.LogFile, "mysql-bin.000009")
    44  	require.Equal(t, previous.LogPos, int64(0))
    45  }
    46  
    47  func TestNextFileCoordinates(t *testing.T) {
    48  	next, err := testCoordinates.NextFileCoordinates()
    49  
    50  	require.NoError(t, err)
    51  	require.Equal(t, next.LogFile, "mysql-bin.000011")
    52  	require.Equal(t, next.LogPos, int64(0))
    53  }
    54  
    55  func TestBinlogCoordinates(t *testing.T) {
    56  	c1 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
    57  	c2 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
    58  	c3 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 5000}
    59  	c4 := BinlogCoordinates{LogFile: "mysql-bin.00112", LogPos: 104}
    60  
    61  	require.True(t, c1.Equals(&c2))
    62  	require.False(t, c1.Equals(&c3))
    63  	require.False(t, c1.Equals(&c4))
    64  	require.False(t, c1.SmallerThan(&c2))
    65  	require.True(t, c1.SmallerThan(&c3))
    66  	require.True(t, c1.SmallerThan(&c4))
    67  	require.True(t, c3.SmallerThan(&c4))
    68  	require.False(t, c3.SmallerThan(&c2))
    69  	require.False(t, c4.SmallerThan(&c2))
    70  	require.False(t, c4.SmallerThan(&c3))
    71  
    72  	require.True(t, c1.SmallerThanOrEquals(&c2))
    73  	require.True(t, c1.SmallerThanOrEquals(&c3))
    74  }
    75  
    76  func TestBinlogPrevious(t *testing.T) {
    77  	c1 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
    78  	cres, err := c1.PreviousFileCoordinates()
    79  
    80  	require.NoError(t, err)
    81  	require.Equal(t, c1.Type, cres.Type)
    82  	require.Equal(t, cres.LogFile, "mysql-bin.00016")
    83  
    84  	c2 := BinlogCoordinates{LogFile: "mysql-bin.00100", LogPos: 104}
    85  	cres, err = c2.PreviousFileCoordinates()
    86  
    87  	require.NoError(t, err)
    88  	require.Equal(t, c1.Type, cres.Type)
    89  	require.Equal(t, cres.LogFile, "mysql-bin.00099")
    90  
    91  	c3 := BinlogCoordinates{LogFile: "mysql.00.prod.com.00100", LogPos: 104}
    92  	cres, err = c3.PreviousFileCoordinates()
    93  
    94  	require.NoError(t, err)
    95  	require.Equal(t, c1.Type, cres.Type)
    96  	require.Equal(t, cres.LogFile, "mysql.00.prod.com.00099")
    97  
    98  	c4 := BinlogCoordinates{LogFile: "mysql.00.prod.com.00000", LogPos: 104}
    99  	_, err = c4.PreviousFileCoordinates()
   100  
   101  	require.Error(t, err)
   102  }
   103  
   104  func TestBinlogCoordinatesAsKey(t *testing.T) {
   105  	m := make(map[BinlogCoordinates]bool)
   106  
   107  	c1 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
   108  	c2 := BinlogCoordinates{LogFile: "mysql-bin.00022", LogPos: 104}
   109  	c3 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
   110  	c4 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 222}
   111  
   112  	m[c1] = true
   113  	m[c2] = true
   114  	m[c3] = true
   115  	m[c4] = true
   116  
   117  	require.Equal(t, len(m), 3)
   118  }
   119  
   120  func TestFileNumberDistance(t *testing.T) {
   121  	c1 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
   122  	c2 := BinlogCoordinates{LogFile: "mysql-bin.00022", LogPos: 104}
   123  
   124  	require.Equal(t, c1.FileNumberDistance(&c1), 0)
   125  	require.Equal(t, c1.FileNumberDistance(&c2), 5)
   126  	require.Equal(t, c2.FileNumberDistance(&c1), -5)
   127  }
   128  
   129  func TestFileNumber(t *testing.T) {
   130  	c1 := BinlogCoordinates{LogFile: "mysql-bin.00017", LogPos: 104}
   131  	fileNum, numLen := c1.FileNumber()
   132  
   133  	require.Equal(t, fileNum, 17)
   134  	require.Equal(t, numLen, 5)
   135  }