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

     1  package inst
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestNewOracleGtidSetEntry(t *testing.T) {
    10  	{
    11  		uuidSet := "00020194-3333-3333-3333-333333333333:1-7"
    12  		entry, err := NewOracleGtidSetEntry(uuidSet)
    13  		require.NoError(t, err)
    14  		require.Equal(t, entry.UUID, "00020194-3333-3333-3333-333333333333")
    15  		require.Equal(t, entry.Ranges, "1-7")
    16  	}
    17  	{
    18  		uuidSet := "00020194-3333-3333-3333-333333333333:1-7:10-20"
    19  		entry, err := NewOracleGtidSetEntry(uuidSet)
    20  		require.NoError(t, err)
    21  		require.Equal(t, entry.UUID, "00020194-3333-3333-3333-333333333333")
    22  		require.Equal(t, entry.Ranges, "1-7:10-20")
    23  	}
    24  	{
    25  		uuidSet := "00020194-3333-3333-3333-333333333333"
    26  		_, err := NewOracleGtidSetEntry(uuidSet)
    27  		require.Error(t, err)
    28  	}
    29  }
    30  
    31  func TestExplode(t *testing.T) {
    32  	{
    33  		uuidSet := "00020194-3333-3333-3333-333333333333:7"
    34  		entry, err := NewOracleGtidSetEntry(uuidSet)
    35  		require.NoError(t, err)
    36  
    37  		exploded := entry.Explode()
    38  		require.Equal(t, len(exploded), 1)
    39  		require.Equal(t, exploded[0].String(), "00020194-3333-3333-3333-333333333333:7")
    40  	}
    41  	{
    42  		uuidSet := "00020194-3333-3333-3333-333333333333:1-3"
    43  		entry, err := NewOracleGtidSetEntry(uuidSet)
    44  		require.NoError(t, err)
    45  
    46  		exploded := entry.Explode()
    47  		require.Equal(t, len(exploded), 3)
    48  		require.Equal(t, exploded[0].String(), "00020194-3333-3333-3333-333333333333:1")
    49  		require.Equal(t, exploded[1].String(), "00020194-3333-3333-3333-333333333333:2")
    50  		require.Equal(t, exploded[2].String(), "00020194-3333-3333-3333-333333333333:3")
    51  	}
    52  	{
    53  		uuidSet := "00020194-3333-3333-3333-333333333333:1-3:6-7"
    54  		entry, err := NewOracleGtidSetEntry(uuidSet)
    55  		require.NoError(t, err)
    56  
    57  		exploded := entry.Explode()
    58  		require.Equal(t, len(exploded), 5)
    59  		require.Equal(t, exploded[0].String(), "00020194-3333-3333-3333-333333333333:1")
    60  		require.Equal(t, exploded[1].String(), "00020194-3333-3333-3333-333333333333:2")
    61  		require.Equal(t, exploded[2].String(), "00020194-3333-3333-3333-333333333333:3")
    62  		require.Equal(t, exploded[3].String(), "00020194-3333-3333-3333-333333333333:6")
    63  		require.Equal(t, exploded[4].String(), "00020194-3333-3333-3333-333333333333:7")
    64  	}
    65  	{
    66  		gtidSetVal := "00020192-1111-1111-1111-111111111111:29-30, 00020194-3333-3333-3333-333333333333:7-8"
    67  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
    68  		require.NoError(t, err)
    69  
    70  		exploded := gtidSet.Explode()
    71  		require.Equal(t, len(exploded), 4)
    72  		require.Equal(t, exploded[0].String(), "00020192-1111-1111-1111-111111111111:29")
    73  		require.Equal(t, exploded[1].String(), "00020192-1111-1111-1111-111111111111:30")
    74  		require.Equal(t, exploded[2].String(), "00020194-3333-3333-3333-333333333333:7")
    75  		require.Equal(t, exploded[3].String(), "00020194-3333-3333-3333-333333333333:8")
    76  	}
    77  }
    78  
    79  func TestNewOracleGtidSet(t *testing.T) {
    80  	{
    81  		gtidSetVal := "00020192-1111-1111-1111-111111111111:20-30, 00020194-3333-3333-3333-333333333333:7-8"
    82  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
    83  		require.NoError(t, err)
    84  
    85  		require.Equal(t, len(gtidSet.GtidEntries), 2)
    86  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020192-1111-1111-1111-111111111111:20-30")
    87  		require.Equal(t, gtidSet.GtidEntries[1].String(), "00020194-3333-3333-3333-333333333333:7-8")
    88  	}
    89  	{
    90  		gtidSetVal := "   ,,, , , 00020192-1111-1111-1111-111111111111:20-30,,,, 00020194-3333-3333-3333-333333333333:7-8,,  ,,"
    91  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
    92  		require.NoError(t, err)
    93  
    94  		require.Equal(t, len(gtidSet.GtidEntries), 2)
    95  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020192-1111-1111-1111-111111111111:20-30")
    96  		require.Equal(t, gtidSet.GtidEntries[1].String(), "00020194-3333-3333-3333-333333333333:7-8")
    97  	}
    98  	{
    99  		gtidSetVal := "   ,,, , ,,  ,,"
   100  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
   101  		require.NoError(t, err)
   102  
   103  		require.Equal(t, len(gtidSet.GtidEntries), 0)
   104  		require.True(t, gtidSet.IsEmpty())
   105  	}
   106  }
   107  
   108  func TestRemoveUUID(t *testing.T) {
   109  	gtidSetVal := "00020192-1111-1111-1111-111111111111:20-30, 00020194-3333-3333-3333-333333333333:7-8"
   110  	{
   111  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
   112  		require.NoError(t, err)
   113  
   114  		require.Equal(t, len(gtidSet.GtidEntries), 2)
   115  		gtidSet.RemoveUUID("00020194-3333-3333-3333-333333333333")
   116  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   117  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020192-1111-1111-1111-111111111111:20-30")
   118  
   119  		removed := gtidSet.RemoveUUID(`230ea8ea-81e3-11e4-972a-e25ec4bd140a`)
   120  		require.False(t, removed)
   121  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   122  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020192-1111-1111-1111-111111111111:20-30")
   123  	}
   124  	{
   125  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
   126  		require.NoError(t, err)
   127  
   128  		require.Equal(t, len(gtidSet.GtidEntries), 2)
   129  
   130  		gtidSet.RemoveUUID("00020192-1111-1111-1111-111111111111")
   131  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   132  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020194-3333-3333-3333-333333333333:7-8")
   133  
   134  		gtidSet.RemoveUUID("00020194-3333-3333-3333-333333333333")
   135  		require.True(t, gtidSet.IsEmpty())
   136  	}
   137  }
   138  
   139  func TestRetainUUID(t *testing.T) {
   140  	gtidSetVal := "00020192-1111-1111-1111-111111111111:20-30, 00020194-3333-3333-3333-333333333333:7-8"
   141  	{
   142  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
   143  		require.NoError(t, err)
   144  
   145  		require.Equal(t, len(gtidSet.GtidEntries), 2)
   146  		removed := gtidSet.RetainUUID("00020194-3333-3333-3333-333333333333")
   147  		require.True(t, removed)
   148  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   149  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020194-3333-3333-3333-333333333333:7-8")
   150  
   151  		removed = gtidSet.RetainUUID("00020194-3333-3333-3333-333333333333")
   152  		require.False(t, removed)
   153  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   154  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020194-3333-3333-3333-333333333333:7-8")
   155  
   156  		removed = gtidSet.RetainUUID("230ea8ea-81e3-11e4-972a-e25ec4bd140a")
   157  		require.True(t, removed)
   158  		require.Equal(t, len(gtidSet.GtidEntries), 0)
   159  	}
   160  }
   161  
   162  func TestRetainUUIDs(t *testing.T) {
   163  	gtidSetVal := "00020192-1111-1111-1111-111111111111:20-30, 00020194-3333-3333-3333-333333333333:7-8"
   164  	{
   165  		gtidSet, err := NewOracleGtidSet(gtidSetVal)
   166  		require.NoError(t, err)
   167  
   168  		require.Equal(t, len(gtidSet.GtidEntries), 2)
   169  		removed := gtidSet.RetainUUIDs([]string{"00020194-3333-3333-3333-333333333333", "00020194-5555-5555-5555-333333333333"})
   170  		require.True(t, removed)
   171  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   172  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020194-3333-3333-3333-333333333333:7-8")
   173  
   174  		removed = gtidSet.RetainUUIDs([]string{"00020194-3333-3333-3333-333333333333", "00020194-5555-5555-5555-333333333333"})
   175  		require.False(t, removed)
   176  		require.Equal(t, len(gtidSet.GtidEntries), 1)
   177  		require.Equal(t, gtidSet.GtidEntries[0].String(), "00020194-3333-3333-3333-333333333333:7-8")
   178  
   179  		removed = gtidSet.RetainUUIDs([]string{"230ea8ea-81e3-11e4-972a-e25ec4bd140a"})
   180  		require.True(t, removed)
   181  		require.Equal(t, len(gtidSet.GtidEntries), 0)
   182  	}
   183  }
   184  
   185  func TestSharedUUIDs(t *testing.T) {
   186  	gtidSetVal := "00020192-1111-1111-1111-111111111111:20-30, 00020194-3333-3333-3333-333333333333:7-8"
   187  	gtidSet, err := NewOracleGtidSet(gtidSetVal)
   188  	require.NoError(t, err)
   189  	{
   190  		otherSet, err := NewOracleGtidSet("00020194-3333-3333-3333-333333333333:7-8,230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-2")
   191  		require.NoError(t, err)
   192  		{
   193  			shared := gtidSet.SharedUUIDs(otherSet)
   194  			require.Equal(t, len(shared), 1)
   195  			require.Equal(t, shared[0], "00020194-3333-3333-3333-333333333333")
   196  		}
   197  		{
   198  			shared := otherSet.SharedUUIDs(gtidSet)
   199  			require.Equal(t, len(shared), 1)
   200  			require.Equal(t, shared[0], "00020194-3333-3333-3333-333333333333")
   201  		}
   202  	}
   203  	{
   204  		otherSet, err := NewOracleGtidSet("00020194-4444-4444-4444-333333333333:7-8,230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-2")
   205  		require.NoError(t, err)
   206  		{
   207  			shared := gtidSet.SharedUUIDs(otherSet)
   208  			require.Equal(t, len(shared), 0)
   209  		}
   210  		{
   211  			shared := otherSet.SharedUUIDs(gtidSet)
   212  			require.Equal(t, len(shared), 0)
   213  		}
   214  	}
   215  	{
   216  		otherSet, err := NewOracleGtidSet("00020194-3333-3333-3333-333333333333:7-8,00020192-1111-1111-1111-111111111111:1-2")
   217  		require.NoError(t, err)
   218  		{
   219  			shared := gtidSet.SharedUUIDs(otherSet)
   220  			require.Equal(t, len(shared), 2)
   221  		}
   222  		{
   223  			shared := otherSet.SharedUUIDs(gtidSet)
   224  			require.Equal(t, len(shared), 2)
   225  		}
   226  	}
   227  }