github.com/zhongdalu/gf@v1.0.0/g/database/gdb/gdb_unit_init_test.go (about) 1 // Copyright 2019 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/zhongdalu/gf. 6 7 package gdb_test 8 9 import ( 10 "fmt" 11 "os" 12 13 "github.com/zhongdalu/gf/g" 14 "github.com/zhongdalu/gf/g/container/garray" 15 16 "github.com/zhongdalu/gf/g/database/gdb" 17 "github.com/zhongdalu/gf/g/os/gtime" 18 "github.com/zhongdalu/gf/g/test/gtest" 19 ) 20 21 const ( 22 INIT_DATA_SIZE = 10 // 初始化表数据量 23 TABLE = "user" // 测试数据表 24 SCHEMA1 = "test1" // 测试数据库1 25 SCHEMA2 = "test2" // 测试数据库2 26 ) 27 28 var ( 29 // 测试包变量,ORM对象 30 db gdb.DB 31 ) 32 33 // 初始化连接参数。 34 // 测试前需要修改连接参数。 35 func init() { 36 node := gdb.ConfigNode{ 37 Host: "127.0.0.1", 38 Port: "3306", 39 User: "root", 40 Pass: "", 41 Name: "", 42 Type: "mysql", 43 Role: "master", 44 Charset: "utf8", 45 Weight: 1, 46 } 47 // 作者本地测试hack 48 if hostname, _ := os.Hostname(); hostname == "ijohn" { 49 node.Pass = "12345678" 50 } 51 gdb.AddConfigNode("test", node) 52 gdb.AddConfigNode(gdb.DEFAULT_GROUP_NAME, node) 53 if r, err := gdb.New(); err != nil { 54 gtest.Error(err) 55 } else { 56 db = r 57 } 58 // 准备测试数据结构:数据库 59 schemaTemplate := "CREATE DATABASE IF NOT EXISTS `%s` CHARACTER SET UTF8" 60 if _, err := db.Exec(fmt.Sprintf(schemaTemplate, SCHEMA1)); err != nil { 61 gtest.Error(err) 62 } 63 // 多个数据库,用于测试数据库切换 64 if _, err := db.Exec(fmt.Sprintf(schemaTemplate, SCHEMA2)); err != nil { 65 gtest.Error(err) 66 } 67 // 设置默认操作数据库 68 db.SetSchema(SCHEMA1) 69 // 创建默认用户表 70 createTable(TABLE) 71 } 72 73 // 创建指定名称的user测试表,当table为空时,创建随机的表名。 74 // 创建的测试表默认没有任何数据。 75 // 执行完成后返回该表名。 76 func createTable(table ...string) (name string) { 77 if len(table) > 0 { 78 name = table[0] 79 } else { 80 name = fmt.Sprintf(`%s_%d`, TABLE, gtime.Nanosecond()) 81 } 82 dropTable(name) 83 if _, err := db.Exec(fmt.Sprintf(` 84 CREATE TABLE %s ( 85 id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', 86 passport varchar(45) NOT NULL COMMENT '账号', 87 password char(32) NOT NULL COMMENT '密码', 88 nickname varchar(45) NOT NULL COMMENT '昵称', 89 create_time timestamp NOT NULL COMMENT '创建时间/注册时间', 90 PRIMARY KEY (id) 91 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 92 `, name)); err != nil { 93 gtest.Error(err) 94 } 95 return 96 } 97 98 // 创建测试表,并初始化默认数据。 99 func createInitTable(table ...string) (name string) { 100 name = createTable(table...) 101 array := garray.New(true) 102 for i := 1; i <= INIT_DATA_SIZE; i++ { 103 array.Append(g.Map{ 104 "id": i, 105 "passport": fmt.Sprintf(`user_%d`, i), 106 "password": fmt.Sprintf(`pass_%d`, i), 107 "nickname": fmt.Sprintf(`name_%d`, i), 108 "create_time": gtime.NewFromStr("2018-10-24 10:00:00").String(), 109 }) 110 } 111 result, err := db.Table(name).Data(array.Slice()).Insert() 112 gtest.Assert(err, nil) 113 114 n, e := result.RowsAffected() 115 gtest.Assert(e, nil) 116 gtest.Assert(n, INIT_DATA_SIZE) 117 return 118 } 119 120 // 删除指定表. 121 func dropTable(table string) { 122 if _, err := db.Exec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`", table)); err != nil { 123 gtest.Error(err) 124 } 125 }