github.com/gogf/gf@v1.16.9/database/gredis/gredis_z_unit_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). 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/gogf/gf. 6 7 package gredis_test 8 9 import ( 10 "github.com/gogf/gf/container/gvar" 11 "github.com/gogf/gf/frame/g" 12 "github.com/gogf/gf/util/guid" 13 "github.com/gogf/gf/util/gutil" 14 "testing" 15 "time" 16 17 "github.com/gogf/gf/os/gtime" 18 "github.com/gogf/gf/util/gconv" 19 20 "github.com/gogf/gf/database/gredis" 21 "github.com/gogf/gf/test/gtest" 22 ) 23 24 var ( 25 config = &gredis.Config{ 26 Host: "127.0.0.1", 27 Port: 6379, 28 Db: 1, 29 } 30 ) 31 32 func Test_NewClose(t *testing.T) { 33 gtest.C(t, func(t *gtest.T) { 34 redis := gredis.New(config) 35 t.AssertNE(redis, nil) 36 err := redis.Close() 37 t.Assert(err, nil) 38 }) 39 } 40 41 func Test_Do(t *testing.T) { 42 gtest.C(t, func(t *gtest.T) { 43 redis := gredis.New(config) 44 defer redis.Close() 45 _, err := redis.Do("SET", "k", "v") 46 t.Assert(err, nil) 47 48 r, err := redis.Do("GET", "k") 49 t.Assert(err, nil) 50 t.Assert(r, []byte("v")) 51 52 _, err = redis.Do("DEL", "k") 53 t.Assert(err, nil) 54 r, err = redis.Do("GET", "k") 55 t.Assert(err, nil) 56 t.Assert(r, nil) 57 }) 58 } 59 60 func Test_Stats(t *testing.T) { 61 gtest.C(t, func(t *gtest.T) { 62 redis := gredis.New(config) 63 defer redis.Close() 64 redis.SetMaxIdle(2) 65 redis.SetMaxActive(100) 66 redis.SetIdleTimeout(500 * time.Millisecond) 67 redis.SetMaxConnLifetime(500 * time.Millisecond) 68 69 array := make([]*gredis.Conn, 0) 70 for i := 0; i < 10; i++ { 71 array = append(array, redis.Conn()) 72 } 73 stats := redis.Stats() 74 t.Assert(stats.ActiveCount, 10) 75 t.Assert(stats.IdleCount, 0) 76 for i := 0; i < 10; i++ { 77 array[i].Close() 78 } 79 stats = redis.Stats() 80 t.Assert(stats.ActiveCount, 2) 81 t.Assert(stats.IdleCount, 2) 82 //time.Sleep(3000*time.Millisecond) 83 //stats = redis.Stats() 84 //fmt.Println(stats) 85 //t.Assert(stats.ActiveCount, 0) 86 //t.Assert(stats.IdleCount, 0) 87 }) 88 } 89 90 func Test_Conn(t *testing.T) { 91 gtest.C(t, func(t *gtest.T) { 92 redis := gredis.New(config) 93 defer redis.Close() 94 conn := redis.Conn() 95 defer conn.Close() 96 97 key := gconv.String(gtime.TimestampNano()) 98 value := []byte("v") 99 r, err := conn.Do("SET", key, value) 100 t.Assert(err, nil) 101 102 r, err = conn.Do("GET", key) 103 t.Assert(err, nil) 104 t.Assert(r, value) 105 106 _, err = conn.Do("DEL", key) 107 t.Assert(err, nil) 108 r, err = conn.Do("GET", key) 109 t.Assert(err, nil) 110 t.Assert(r, nil) 111 }) 112 } 113 114 func Test_Instance(t *testing.T) { 115 gtest.C(t, func(t *gtest.T) { 116 group := "my-test" 117 gredis.SetConfig(config, group) 118 defer gredis.RemoveConfig(group) 119 redis := gredis.Instance(group) 120 defer redis.Close() 121 122 conn := redis.Conn() 123 defer conn.Close() 124 125 _, err := conn.Do("SET", "k", "v") 126 t.Assert(err, nil) 127 128 r, err := conn.Do("GET", "k") 129 t.Assert(err, nil) 130 t.Assert(r, []byte("v")) 131 132 _, err = conn.Do("DEL", "k") 133 t.Assert(err, nil) 134 r, err = conn.Do("GET", "k") 135 t.Assert(err, nil) 136 t.Assert(r, nil) 137 }) 138 } 139 140 func Test_Error(t *testing.T) { 141 gtest.C(t, func(t *gtest.T) { 142 config1 := &gredis.Config{ 143 Host: "192.111.0.2", 144 Port: 6379, 145 Db: 1, 146 ConnectTimeout: time.Second, 147 } 148 redis := gredis.New(config1) 149 _, err := redis.Do("info") 150 t.AssertNE(err, nil) 151 152 config1 = &gredis.Config{ 153 Host: "127.0.0.1", 154 Port: 6379, 155 Db: 100, 156 } 157 redis = gredis.New(config1) 158 _, err = redis.Do("info") 159 t.AssertNE(err, nil) 160 161 redis = gredis.Instance("gf") 162 t.Assert(redis == nil, true) 163 gredis.ClearConfig() 164 165 redis = gredis.New(config) 166 defer redis.Close() 167 _, err = redis.DoVar("SET", "k", "v") 168 t.Assert(err, nil) 169 170 v, err := redis.DoVar("GET", "k") 171 t.Assert(err, nil) 172 t.Assert(v.String(), "v") 173 174 conn := redis.Conn() 175 defer conn.Close() 176 _, err = conn.DoVar("SET", "k", "v") 177 t.Assert(err, nil) 178 179 _, err = conn.DoVar("Subscribe", "gf") 180 t.Assert(err, nil) 181 182 _, err = redis.DoVar("PUBLISH", "gf", "test") 183 t.Assert(err, nil) 184 185 v, _ = conn.ReceiveVar() 186 t.Assert(len(v.Strings()), 3) 187 t.Assert(v.Strings()[2], "test") 188 189 time.Sleep(time.Second) 190 }) 191 } 192 193 func Test_Bool(t *testing.T) { 194 gtest.C(t, func(t *gtest.T) { 195 redis := gredis.New(config) 196 defer func() { 197 redis.Do("DEL", "key-true") 198 redis.Do("DEL", "key-false") 199 }() 200 201 _, err := redis.Do("SET", "key-true", true) 202 t.Assert(err, nil) 203 204 _, err = redis.Do("SET", "key-false", false) 205 t.Assert(err, nil) 206 207 r, err := redis.DoVar("GET", "key-true") 208 t.Assert(err, nil) 209 t.Assert(r.Bool(), true) 210 211 r, err = redis.DoVar("GET", "key-false") 212 t.Assert(err, nil) 213 t.Assert(r.Bool(), false) 214 }) 215 } 216 217 func Test_Int(t *testing.T) { 218 gtest.C(t, func(t *gtest.T) { 219 redis := gredis.New(config) 220 key := guid.S() 221 defer redis.Do("DEL", key) 222 223 _, err := redis.Do("SET", key, 1) 224 t.Assert(err, nil) 225 226 r, err := redis.DoVar("GET", key) 227 t.Assert(err, nil) 228 t.Assert(r.Int(), 1) 229 }) 230 } 231 232 func Test_HSet(t *testing.T) { 233 gtest.C(t, func(t *gtest.T) { 234 redis := gredis.New(config) 235 key := guid.S() 236 defer redis.Do("DEL", key) 237 238 _, err := redis.Do("HSET", key, "name", "john") 239 t.Assert(err, nil) 240 241 r, err := redis.DoVar("HGETALL", key) 242 t.Assert(err, nil) 243 t.Assert(r.Strings(), g.ArrayStr{"name", "john"}) 244 }) 245 } 246 247 func Test_HGetAll1(t *testing.T) { 248 gtest.C(t, func(t *gtest.T) { 249 var ( 250 err error 251 key = guid.S() 252 redis = gredis.New(config) 253 ) 254 defer redis.Do("DEL", key) 255 256 _, err = redis.Do("HSET", key, "id", 100) 257 t.Assert(err, nil) 258 _, err = redis.Do("HSET", key, "name", "john") 259 t.Assert(err, nil) 260 261 r, err := redis.DoVar("HGETALL", key) 262 t.Assert(err, nil) 263 t.Assert(r.Map(), g.MapStrAny{ 264 "id": 100, 265 "name": "john", 266 }) 267 }) 268 } 269 270 func Test_HGetAll2(t *testing.T) { 271 gtest.C(t, func(t *gtest.T) { 272 var ( 273 err error 274 key = guid.S() 275 redis = gredis.New(config) 276 ) 277 defer redis.Do("DEL", key) 278 279 _, err = redis.Do("HSET", key, "id", 100) 280 t.Assert(err, nil) 281 _, err = redis.Do("HSET", key, "name", "john") 282 t.Assert(err, nil) 283 284 result, err := redis.DoVar("HGETALL", key) 285 t.Assert(err, nil) 286 287 t.Assert(gconv.Uint(result.MapStrVar()["id"]), 100) 288 t.Assert(result.MapStrVar()["id"].Uint(), 100) 289 }) 290 } 291 292 func Test_HMSet(t *testing.T) { 293 // map 294 gtest.C(t, func(t *gtest.T) { 295 var ( 296 err error 297 key = guid.S() 298 redis = gredis.New(config) 299 data = g.Map{ 300 "name": "gf", 301 "sex": 0, 302 "score": 100, 303 } 304 ) 305 defer redis.Do("DEL", key) 306 307 _, err = redis.Do("HMSET", append(g.Slice{key}, gutil.MapToSlice(data)...)...) 308 t.Assert(err, nil) 309 v, err := redis.DoVar("HMGET", key, "name") 310 t.Assert(err, nil) 311 t.Assert(v.Slice(), g.Slice{data["name"]}) 312 }) 313 // struct 314 gtest.C(t, func(t *gtest.T) { 315 type User struct { 316 Name string `json:"name"` 317 Sex int `json:"sex"` 318 Score int `json:"score"` 319 } 320 var ( 321 err error 322 key = guid.S() 323 redis = gredis.New(config) 324 data = &User{ 325 Name: "gf", 326 Sex: 0, 327 Score: 100, 328 } 329 ) 330 defer redis.Do("DEL", key) 331 332 _, err = redis.Do("HMSET", append(g.Slice{key}, gutil.StructToSlice(data)...)...) 333 t.Assert(err, nil) 334 v, err := redis.DoVar("HMGET", key, "name") 335 t.Assert(err, nil) 336 t.Assert(v.Slice(), g.Slice{data.Name}) 337 }) 338 } 339 340 func Test_Auto_Marshal(t *testing.T) { 341 var ( 342 err error 343 redis = gredis.New(config) 344 key = guid.S() 345 ) 346 defer redis.Do("DEL", key) 347 348 type User struct { 349 Id int 350 Name string 351 } 352 353 gtest.C(t, func(t *gtest.T) { 354 user := &User{ 355 Id: 10000, 356 Name: "john", 357 } 358 359 _, err = redis.Do("SET", key, user) 360 t.Assert(err, nil) 361 362 r, err := redis.DoVar("GET", key) 363 t.Assert(err, nil) 364 t.Assert(r.Map(), g.MapStrAny{ 365 "Id": user.Id, 366 "Name": user.Name, 367 }) 368 369 var user2 *User 370 t.Assert(r.Struct(&user2), nil) 371 t.Assert(user2.Id, user.Id) 372 t.Assert(user2.Name, user.Name) 373 }) 374 } 375 376 func Test_Auto_MarshalSlice(t *testing.T) { 377 var ( 378 err error 379 redis = gredis.New(config) 380 key = guid.S() 381 ) 382 defer redis.Do("DEL", key) 383 384 type User struct { 385 Id int 386 Name string 387 } 388 389 gtest.C(t, func(t *gtest.T) { 390 var ( 391 result *gvar.Var 392 key = "user-slice" 393 users1 = []User{ 394 { 395 Id: 1, 396 Name: "john1", 397 }, 398 { 399 Id: 2, 400 Name: "john2", 401 }, 402 } 403 ) 404 405 _, err = redis.Do("SET", key, users1) 406 t.Assert(err, nil) 407 408 result, err = redis.DoVar("GET", key) 409 t.Assert(err, nil) 410 411 var users2 []User 412 err = result.Structs(&users2) 413 t.Assert(err, nil) 414 t.Assert(users2, users1) 415 }) 416 }