vitess.io/vitess@v0.16.2/go/vt/vttablet/endtoend/connkilling/main_test.go (about) 1 /* 2 Copyright 2019 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 connkilling 18 19 import ( 20 "errors" 21 "flag" 22 "fmt" 23 "os" 24 "testing" 25 26 "vitess.io/vitess/go/mysql" 27 "vitess.io/vitess/go/vt/tableacl" 28 "vitess.io/vitess/go/vt/tableacl/simpleacl" 29 "vitess.io/vitess/go/vt/vttablet/endtoend/framework" 30 "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" 31 "vitess.io/vitess/go/vt/vttest" 32 33 vttestpb "vitess.io/vitess/go/vt/proto/vttest" 34 ) 35 36 var ( 37 connParams mysql.ConnParams 38 connAppDebugParams mysql.ConnParams 39 ) 40 41 func TestMain(m *testing.M) { 42 flag.Parse() // Do not remove this comment, import into google3 depends on it 43 tabletenv.Init() 44 45 exitCode := func() int { 46 // Launch MySQL. 47 // We need a Keyspace in the topology, so the DbName is set. 48 // We need a Shard too, so the database 'vttest' is created. 49 cfg := vttest.Config{ 50 Topology: &vttestpb.VTTestTopology{ 51 Keyspaces: []*vttestpb.Keyspace{ 52 { 53 Name: "vttest", 54 Shards: []*vttestpb.Shard{ 55 { 56 Name: "0", 57 DbNameOverride: "vttest", 58 }, 59 }, 60 }, 61 }, 62 }, 63 OnlyMySQL: true, 64 Charset: "utf8mb4_general_ci", 65 } 66 if err := cfg.InitSchemas("vttest", testSchema, nil); err != nil { 67 fmt.Fprintf(os.Stderr, "InitSchemas failed: %v\n", err) 68 return 1 69 } 70 defer os.RemoveAll(cfg.SchemaDir) 71 cluster := vttest.LocalCluster{ 72 Config: cfg, 73 } 74 if err := cluster.Setup(); err != nil { 75 fmt.Fprintf(os.Stderr, "could not launch mysql: %v\n", err) 76 return 1 77 } 78 defer cluster.TearDown() 79 80 connParams = cluster.MySQLConnParams() 81 connAppDebugParams = cluster.MySQLAppDebugConnParams() 82 config := tabletenv.NewDefaultConfig() 83 config.Oltp.TxTimeoutSeconds = tabletenv.Seconds(3) 84 err := framework.StartCustomServer(connParams, connAppDebugParams, cluster.DbName(), config) 85 if err != nil { 86 fmt.Fprintf(os.Stderr, "%v", err) 87 return 1 88 } 89 defer framework.StopServer() 90 91 err = initTableACL() 92 if err != nil { 93 fmt.Fprintf(os.Stderr, "%v", err) 94 return 1 95 } 96 97 return m.Run() 98 }() 99 os.Exit(exitCode) 100 } 101 102 func initTableACL() error { 103 file, err := os.CreateTemp("", "tableacl.json") 104 if err != nil { 105 return err 106 } 107 defer os.Remove(file.Name()) 108 109 n, err := file.WriteString(tableACLConfig) 110 if err != nil { 111 return err 112 } 113 if n != len(tableACLConfig) { 114 return errors.New("table acl: short write") 115 } 116 file.Close() 117 tableacl.Register("simpleacl", &simpleacl.Factory{}) 118 tableacl.Init(file.Name(), func() { framework.Server.ClearQueryPlanCache() }) 119 return nil 120 } 121 122 var testSchema = `create table vitess_test(intval int default 0, floatval float default null, charval varchar(10) default null, binval varbinary(256) default null, primary key(intval)); 123 create table vitess_test_debuguser(intval int default 0, floatval float default null, charval varchar(256) default null, binval varbinary(256) default null, primary key(intval)); 124 grant select, show databases, process on *.* to 'vt_appdebug'@'localhost'; 125 revoke select on *.* from 'vt_appdebug'@'localhost'; 126 insert into vitess_test_debuguser values(1, 1.12345, 0xC2A2, 0x00FF), (2, null, '', null), (3, null, null, null); 127 insert into vitess_test values(1, 1.12345, 0xC2A2, 0x00FF), (2, null, '', null), (3, null, null, null); 128 129 create table vitess_a(eid bigint default 0, id int default 1, name varchar(128) default null, foo varbinary(128) default null, primary key(eid, id)); 130 create table vitess_b(eid bigint default 0, id int default 0, primary key(eid, id)); 131 create table vitess_c(eid bigint default 0, name varchar(128) default 'name', foo varbinary(128) default null, primary key(eid, name)); 132 create table vitess_d(eid bigint default null, id int default null); 133 create table vitess_e(eid bigint auto_increment, id int default 1, name varchar(128) default 'name', foo varchar(128) default null, primary key(eid, id, name)); 134 create table vitess_f(vb varbinary(16) default 'ab', id int default null, primary key(vb)); 135 create table upsert_test(id1 int default 0, id2 int default null, primary key (id1)); 136 create unique index id2_idx on upsert_test(id2); 137 insert into vitess_a(eid, id, name, foo) values(1, 1, 'abcd', 'efgh'), (1, 2, 'bcde', 'fghi'); 138 insert into vitess_b(eid, id) values(1, 1), (1, 2); 139 insert into vitess_c(eid, name, foo) values(10, 'abcd', '20'), (11, 'bcde', '30'); 140 create table vitess_mixed_case(Col1 int default 0, COL2 int default null, primary key(col1)); 141 142 CREATE TABLE vitess_autoinc_seq ( 143 id bigint(20) unsigned NOT NULL AUTO_INCREMENT, 144 name varchar(255) NOT NULL, 145 sequence bigint(20) unsigned NOT NULL DEFAULT '0', 146 PRIMARY KEY (id), 147 UNIQUE KEY name (name) 148 ); 149 150 create table vitess_big(id int default 0, string1 varchar(128) default null, string2 varchar(100) default null, string3 char(1) default null, string4 varchar(50) default null, string5 varchar(50) default null, string6 varchar(16) default null, string7 varchar(120) default null, bigint1 bigint(20) default null, bigint2 bigint(20) default null, integer1 int default null, tinyint1 tinyint(4) default null, primary key(id)); 151 152 create table vitess_ints(tiny tinyint default 0, tinyu tinyint unsigned default null, small smallint default null, smallu smallint unsigned default null, medium mediumint default null, mediumu mediumint unsigned default null, normal int default null, normalu int unsigned default null, big bigint default null, bigu bigint unsigned default null, y year default null, primary key(tiny)); 153 create table vitess_fracts(id int default 0, deci decimal(5,2) default null, num numeric(5,2) default null, f float default null, d double default null, primary key(id)); 154 create table vitess_strings(vb varbinary(16) default 'vb', c char(16) default null, vc varchar(16) default null, b binary(4) default null, tb tinyblob default null, bl blob default null, ttx tinytext default null, tx text default null, en enum('a','b') default null, s set('a','b') default null, primary key(vb)); 155 create table vitess_misc(id int default 0, b bit(8) default null, d date default null, dt datetime default null, t time default null, g geometry default null, primary key(id)); 156 create table vitess_bit_default(id bit(8) default b'101', primary key(id)); 157 158 create table vitess_bool(auto int auto_increment, bval tinyint(1) default 0, sval varchar(16) default '', ival int default null, primary key (auto)); 159 160 create table vitess_seq(id int default 0, next_id bigint default null, cache bigint default null, increment bigint default null, primary key(id)) comment 'vitess_sequence'; 161 insert into vitess_seq(id, next_id, cache) values(0, 1, 3); 162 163 create table vitess_reset_seq(id int default 0, next_id bigint default null, cache bigint default null, increment bigint default null, primary key(id)) comment 'vitess_sequence'; 164 insert into vitess_reset_seq(id, next_id, cache) values(0, 1, 3); 165 166 create table vitess_part(id int, data varchar(16), primary key(id)); 167 alter table vitess_part partition by range (id) (partition p0 values less than (10), partition p1 values less than (maxvalue)); 168 169 create table vitess_acl_no_access(key1 bigint default 0, key2 bigint default null, primary key(key1)); 170 create table vitess_acl_read_only(key1 bigint default 0, key2 bigint default null, primary key(key1)); 171 create table vitess_acl_read_write(key1 bigint default 0, key2 bigint default null, primary key(key1)); 172 create table vitess_acl_admin(key1 bigint default 0, key2 bigint default null, primary key(key1)); 173 create table vitess_acl_unmatched(key1 bigint default 0, key2 bigint default null, primary key(key1)); 174 create table vitess_acl_all_user_read_only(key1 bigint default 0, key2 bigint default null, primary key(key1));` 175 176 var tableACLConfig = `{ 177 "table_groups": [ 178 { 179 "name": "mysql", 180 "table_names_or_prefixes": [""], 181 "readers": ["dev"], 182 "writers": ["dev"], 183 "admins": ["dev"] 184 }, 185 { 186 "name": "vitess_cached", 187 "table_names_or_prefixes": ["vitess_nocache", "vitess_cached%"], 188 "readers": ["dev"], 189 "writers": ["dev"], 190 "admins": ["dev"] 191 }, 192 { 193 "name": "vitess_renamed", 194 "table_names_or_prefixes": ["vitess_renamed%"], 195 "readers": ["dev"], 196 "writers": ["dev"], 197 "admins": ["dev"] 198 }, 199 { 200 "name": "vitess_part", 201 "table_names_or_prefixes": ["vitess_part%"], 202 "readers": ["dev"], 203 "writers": ["dev"], 204 "admins": ["dev"] 205 }, 206 { 207 "name": "vitess", 208 "table_names_or_prefixes": ["vitess_a", "vitess_b", "vitess_c", "dual", "vitess_d", "vitess_temp", "vitess_e", "vitess_f", "vitess_mixed_case", "upsert_test", "vitess_strings", "vitess_fracts", "vitess_ints", "vitess_misc", "vitess_bit_default", "vitess_big", "vitess_view", "vitess_json", "vitess_bool", "vitess_autoinc_seq"], 209 "readers": ["dev"], 210 "writers": ["dev"], 211 "admins": ["dev"] 212 }, 213 { 214 "name": "vitess_test", 215 "table_names_or_prefixes": ["vitess_test"], 216 "readers": ["dev"], 217 "writers": ["dev"], 218 "admins": ["dev"] 219 }, 220 { 221 "name": "vitess_test_ddl", 222 "table_names_or_prefixes": ["vitess_test_ddl"], 223 "readers": ["dev"], 224 "writers": ["dev"], 225 "admins": ["dev"] 226 }, 227 { 228 "name": "vitess_seq", 229 "table_names_or_prefixes": ["vitess_seq"], 230 "readers": ["dev"], 231 "writers": ["dev"], 232 "admins": ["dev"] 233 }, 234 { 235 "name": "vitess_reset_seq", 236 "table_names_or_prefixes": ["vitess_reset_seq"], 237 "readers": ["dev"], 238 "writers": ["dev"], 239 "admins": ["dev"] 240 }, 241 { 242 "name": "vitess_acl_unmatched", 243 "table_names_or_prefixes": ["vitess_acl_unmatched"], 244 "readers": ["dev"], 245 "writers": ["dev"], 246 "admins": ["dev"] 247 }, 248 { 249 "name": "vitess_acl_no_access", 250 "table_names_or_prefixes": ["vitess_acl_no_access"] 251 }, 252 { 253 "name": "vitess_acl_read_only", 254 "table_names_or_prefixes": ["vitess_acl_read_only"], 255 "readers": ["dev"] 256 }, 257 { 258 "name": "vitess_acl_read_write", 259 "table_names_or_prefixes": ["vitess_acl_read_write"], 260 "readers": ["dev"], 261 "writers": ["dev"] 262 }, 263 { 264 "name": "vitess_acl_admin", 265 "table_names_or_prefixes": ["vitess_acl_admin"], 266 "readers": ["dev"], 267 "writers": ["dev"], 268 "admins": ["dev"] 269 }, 270 { 271 "name": "vitess_acl_all_user_read_only", 272 "table_names_or_prefixes": ["vitess_acl_all_user_read_only"], 273 "readers": ["dev"] 274 }, 275 { 276 "name": "vitess_acl_appdebug", 277 "table_names_or_prefixes": ["vitess_test_debuguser"], 278 "readers": ["dev", "vt_appdebug"], 279 "writers": ["dev", "vt_appdebug"] 280 }, 281 { 282 "name": "version", 283 "table_names_or_prefixes": ["vitess_version"], 284 "readers": ["dev"], 285 "writers": ["dev"], 286 "admins": ["dev"] 287 }, 288 { 289 "name": "schema_version", 290 "table_names_or_prefixes": ["schema_version"], 291 "readers": ["dev"], 292 "writers": ["dev"], 293 "admins": ["dev"] 294 }, 295 { 296 "name": "historian_test1", 297 "table_names_or_prefixes": ["historian_test1"], 298 "readers": ["dev"], 299 "writers": ["dev"], 300 "admins": ["dev"] 301 } 302 ] 303 }`