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

     1  /*
     2     Copyright 2014 Outbrain Inc.
     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 inst
    18  
    19  import (
    20  	"testing"
    21  
    22  	"github.com/stretchr/testify/require"
    23  
    24  	"vitess.io/vitess/go/vt/vtorc/config"
    25  )
    26  
    27  func init() {
    28  	config.MarkConfigurationLoaded()
    29  }
    30  
    31  var key1 = InstanceKey{Hostname: "host1", Port: 3306}
    32  var key2 = InstanceKey{Hostname: "host2", Port: 3306}
    33  var key3 = InstanceKey{Hostname: "host3", Port: 3306}
    34  
    35  func TestInstanceKeyEquals(t *testing.T) {
    36  	i1 := Instance{
    37  		Key: InstanceKey{
    38  			Hostname: "sql00.db",
    39  			Port:     3306,
    40  		},
    41  		Version: "5.6",
    42  	}
    43  	i2 := Instance{
    44  		Key: InstanceKey{
    45  			Hostname: "sql00.db",
    46  			Port:     3306,
    47  		},
    48  		Version: "5.5",
    49  	}
    50  
    51  	require.Equal(t, i1.Key, i2.Key)
    52  
    53  	i2.Key.Port = 3307
    54  	require.NotEqual(t, i1.Key, i2.Key)
    55  }
    56  
    57  func TestNewResolveInstanceKey(t *testing.T) {
    58  	{
    59  		i, err := NewResolveInstanceKey("127.0.0.1", 3308)
    60  		require.NoError(t, err)
    61  		require.Equal(t, i.Hostname, "127.0.0.1")
    62  		require.Equal(t, i.Port, 3308)
    63  	}
    64  	{
    65  		_, err := NewResolveInstanceKey("", 3309)
    66  		require.Error(t, err)
    67  	}
    68  	{
    69  		i, err := NewResolveInstanceKey("127.0.0.1", 0)
    70  		require.NoError(t, err)
    71  		require.False(t, i.IsValid())
    72  	}
    73  }
    74  
    75  func TestParseResolveInstanceKey(t *testing.T) {
    76  	{
    77  		key, err := ParseResolveInstanceKey("myhost:1234")
    78  		require.NoError(t, err)
    79  		require.Equal(t, key.Hostname, "myhost")
    80  		require.Equal(t, key.Port, 1234)
    81  	}
    82  	{
    83  		key, err := ParseResolveInstanceKey("myhost")
    84  		require.NoError(t, err)
    85  		require.Equal(t, key.Hostname, "myhost")
    86  		require.Equal(t, key.Port, 3306)
    87  	}
    88  	{
    89  		key, err := ParseResolveInstanceKey("10.0.0.3:3307")
    90  		require.NoError(t, err)
    91  		require.Equal(t, key.Hostname, "10.0.0.3")
    92  		require.Equal(t, key.Port, 3307)
    93  	}
    94  	{
    95  		key, err := ParseResolveInstanceKey("10.0.0.3")
    96  		require.NoError(t, err)
    97  		require.Equal(t, key.Hostname, "10.0.0.3")
    98  		require.Equal(t, key.Port, 3306)
    99  	}
   100  	{
   101  		key, err := ParseResolveInstanceKey("[2001:db8:1f70::999:de8:7648:6e8]:3308")
   102  		require.NoError(t, err)
   103  		require.Equal(t, key.Hostname, "2001:db8:1f70::999:de8:7648:6e8")
   104  		require.Equal(t, key.Port, 3308)
   105  	}
   106  	{
   107  		key, err := ParseResolveInstanceKey("::1")
   108  		require.NoError(t, err)
   109  		require.Equal(t, key.Hostname, "::1")
   110  		require.Equal(t, key.Port, 3306)
   111  	}
   112  	{
   113  		key, err := ParseResolveInstanceKey("0:0:0:0:0:0:0:0")
   114  		require.NoError(t, err)
   115  		require.Equal(t, key.Hostname, "0:0:0:0:0:0:0:0")
   116  		require.Equal(t, key.Port, 3306)
   117  	}
   118  	{
   119  		_, err := ParseResolveInstanceKey("[2001:xxxx:1f70::999:de8:7648:6e8]:3308")
   120  		require.Error(t, err)
   121  	}
   122  	{
   123  		_, err := ParseResolveInstanceKey("10.0.0.4:")
   124  		require.Error(t, err)
   125  	}
   126  	{
   127  		_, err := ParseResolveInstanceKey("10.0.0.4:5.6.7")
   128  		require.Error(t, err)
   129  	}
   130  }
   131  
   132  func TestNewResolveInstanceKeyStrings(t *testing.T) {
   133  	{
   134  		i, err := NewResolveInstanceKeyStrings("127.0.0.1", "3306")
   135  		require.NoError(t, err)
   136  		require.Equal(t, i.Hostname, "127.0.0.1")
   137  		require.Equal(t, i.Port, 3306)
   138  	}
   139  	{
   140  		_, err := NewResolveInstanceKeyStrings("127.0.0.1", "")
   141  		require.Error(t, err)
   142  	}
   143  	{
   144  		_, err := NewResolveInstanceKeyStrings("127.0.0.1", "3306x")
   145  		require.Error(t, err)
   146  	}
   147  }
   148  
   149  func TestInstanceKeyValid(t *testing.T) {
   150  	require.True(t, key1.IsValid())
   151  	i, err := ParseResolveInstanceKey("_:3306")
   152  	require.NoError(t, err)
   153  	require.False(t, i.IsValid())
   154  	i, err = ParseResolveInstanceKey("//myhost:3306")
   155  	require.NoError(t, err)
   156  	require.False(t, i.IsValid())
   157  }
   158  
   159  func TestInstanceKeyDetach(t *testing.T) {
   160  	require.False(t, key1.IsDetached())
   161  	detached1 := key1.DetachedKey()
   162  	require.True(t, detached1.IsDetached())
   163  	detached2 := key1.DetachedKey()
   164  	require.True(t, detached2.IsDetached())
   165  	require.True(t, detached1.Equals(detached2))
   166  
   167  	reattached1 := detached1.ReattachedKey()
   168  	require.False(t, reattached1.IsDetached())
   169  	require.True(t, reattached1.Equals(&key1))
   170  	reattached2 := reattached1.ReattachedKey()
   171  	require.False(t, reattached2.IsDetached())
   172  	require.True(t, reattached1.Equals(reattached2))
   173  }
   174  
   175  func TestIsIPv4(t *testing.T) {
   176  	require.False(t, key1.IsIPv4())
   177  	{
   178  		k, _ := ParseRawInstanceKey("mysql-server-1:3306")
   179  		require.False(t, k.IsIPv4())
   180  	}
   181  	{
   182  		k, _ := ParseRawInstanceKey("mysql-server-1")
   183  		require.False(t, k.IsIPv4())
   184  	}
   185  	{
   186  		k, _ := ParseRawInstanceKey("my.sql.server.1")
   187  		require.False(t, k.IsIPv4())
   188  	}
   189  	{
   190  		k, _ := ParseRawInstanceKey("mysql-server-1:3306")
   191  		require.False(t, k.IsIPv4())
   192  	}
   193  	{
   194  		k, _ := ParseRawInstanceKey("127.0.0:3306")
   195  		require.False(t, k.IsIPv4())
   196  	}
   197  	{
   198  		k, _ := ParseRawInstanceKey("127::0::0::1:3306")
   199  		require.False(t, k.IsIPv4())
   200  	}
   201  	{
   202  		k, _ := ParseRawInstanceKey("127.0.0.1:3306")
   203  		require.True(t, k.IsIPv4())
   204  	}
   205  	{
   206  		k, _ := ParseRawInstanceKey("127.0.0.1")
   207  		require.True(t, k.IsIPv4())
   208  	}
   209  }