vitess.io/vitess@v0.16.2/go/test/endtoend/docker/vttestserver_test.go (about) 1 /* 2 Copyright 2021 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 docker 18 19 import ( 20 "context" 21 "fmt" 22 "os" 23 "testing" 24 25 "vitess.io/vitess/go/test/endtoend/utils" 26 27 "vitess.io/vitess/go/mysql" 28 29 "github.com/stretchr/testify/require" 30 ) 31 32 func TestMain(m *testing.M) { 33 exitCode := func() int { 34 err := makeVttestserverDockerImages() 35 if err != nil { 36 return 1 37 } 38 return m.Run() 39 }() 40 os.Exit(exitCode) 41 } 42 43 func TestUnsharded(t *testing.T) { 44 dockerImages := []string{vttestserverMysql57image, vttestserverMysql80image} 45 for _, image := range dockerImages { 46 t.Run(image, func(t *testing.T) { 47 vtest := newVttestserver(image, []string{"unsharded_ks"}, []int{1}, 1000, 33577) 48 err := vtest.startDockerImage() 49 require.NoError(t, err) 50 defer vtest.teardown() 51 52 // wait for the docker to be setup 53 err = vtest.waitUntilDockerHealthy(10) 54 require.NoError(t, err) 55 56 ctx := context.Background() 57 vttestParams := mysql.ConnParams{ 58 Host: "localhost", 59 Port: vtest.port, 60 } 61 conn, err := mysql.Connect(ctx, &vttestParams) 62 require.NoError(t, err) 63 defer conn.Close() 64 utils.AssertMatches(t, conn, "show databases", `[[VARCHAR("unsharded_ks")] [VARCHAR("information_schema")] [VARCHAR("mysql")] [VARCHAR("sys")] [VARCHAR("performance_schema")]]`) 65 utils.Exec(t, conn, "create table unsharded_ks.t1(id int)") 66 utils.Exec(t, conn, "insert into unsharded_ks.t1(id) values (10),(20),(30)") 67 utils.AssertMatches(t, conn, "select * from unsharded_ks.t1", `[[INT32(10)] [INT32(20)] [INT32(30)]]`) 68 }) 69 } 70 } 71 72 func TestSharded(t *testing.T) { 73 dockerImages := []string{vttestserverMysql57image, vttestserverMysql80image} 74 for _, image := range dockerImages { 75 t.Run(image, func(t *testing.T) { 76 vtest := newVttestserver(image, []string{"ks"}, []int{2}, 1000, 33577) 77 err := vtest.startDockerImage() 78 require.NoError(t, err) 79 defer vtest.teardown() 80 81 // wait for the docker to be setup 82 err = vtest.waitUntilDockerHealthy(10) 83 require.NoError(t, err) 84 85 ctx := context.Background() 86 vttestParams := mysql.ConnParams{ 87 Host: "localhost", 88 Port: vtest.port, 89 } 90 conn, err := mysql.Connect(ctx, &vttestParams) 91 require.NoError(t, err) 92 defer conn.Close() 93 utils.AssertMatches(t, conn, "show databases", `[[VARCHAR("ks")] [VARCHAR("information_schema")] [VARCHAR("mysql")] [VARCHAR("sys")] [VARCHAR("performance_schema")]]`) 94 utils.Exec(t, conn, "create table ks.t1(id int)") 95 utils.Exec(t, conn, "alter vschema on ks.t1 add vindex `binary_md5`(id) using `binary_md5`") 96 utils.Exec(t, conn, "insert into ks.t1(id) values (10),(20),(30)") 97 utils.AssertMatches(t, conn, "select id from ks.t1 order by id", `[[INT32(10)] [INT32(20)] [INT32(30)]]`) 98 }) 99 } 100 } 101 102 func TestMysqlMaxCons(t *testing.T) { 103 dockerImages := []string{vttestserverMysql57image, vttestserverMysql80image} 104 for _, image := range dockerImages { 105 t.Run(image, func(t *testing.T) { 106 vtest := newVttestserver(image, []string{"ks"}, []int{2}, 100000, 33577) 107 err := vtest.startDockerImage() 108 require.NoError(t, err) 109 defer vtest.teardown() 110 111 // wait for the docker to be setup 112 err = vtest.waitUntilDockerHealthy(10) 113 require.NoError(t, err) 114 115 ctx := context.Background() 116 vttestParams := mysql.ConnParams{ 117 Host: "localhost", 118 Port: vtest.port, 119 } 120 conn, err := mysql.Connect(ctx, &vttestParams) 121 require.NoError(t, err) 122 defer conn.Close() 123 utils.AssertMatches(t, conn, "select @@max_connections", `[[UINT64(100000)]]`) 124 }) 125 } 126 } 127 128 func TestLargeNumberOfKeyspaces(t *testing.T) { 129 dockerImages := []string{vttestserverMysql57image, vttestserverMysql80image} 130 for _, image := range dockerImages { 131 t.Run(image, func(t *testing.T) { 132 var keyspaces []string 133 var numShards []int 134 for i := 0; i < 100; i++ { 135 keyspaces = append(keyspaces, fmt.Sprintf("unsharded_ks%d", i)) 136 numShards = append(numShards, 1) 137 } 138 139 vtest := newVttestserver(image, keyspaces, numShards, 100000, 33577) 140 err := vtest.startDockerImage() 141 require.NoError(t, err) 142 defer vtest.teardown() 143 144 // wait for the docker to be setup 145 err = vtest.waitUntilDockerHealthy(15) 146 require.NoError(t, err) 147 148 ctx := context.Background() 149 vttestParams := mysql.ConnParams{ 150 Host: "localhost", 151 Port: vtest.port, 152 } 153 conn, err := mysql.Connect(ctx, &vttestParams) 154 require.NoError(t, err) 155 defer conn.Close() 156 157 // assert that all the keyspaces are correctly setup 158 for _, keyspace := range keyspaces { 159 utils.Exec(t, conn, "create table "+keyspace+".t1(id int)") 160 utils.Exec(t, conn, "insert into "+keyspace+".t1(id) values (10),(20),(30)") 161 utils.AssertMatches(t, conn, "select * from "+keyspace+".t1", `[[INT32(10)] [INT32(20)] [INT32(30)]]`) 162 } 163 }) 164 } 165 }