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 }