github.com/lingyao2333/mo-zero@v1.4.1/core/stores/monc/cachedmodel_test.go (about) 1 package monc 2 3 import ( 4 "context" 5 "errors" 6 "sync/atomic" 7 "testing" 8 9 "github.com/alicebob/miniredis/v2" 10 "github.com/lingyao2333/mo-zero/core/stores/cache" 11 "github.com/lingyao2333/mo-zero/core/stores/mon" 12 "github.com/lingyao2333/mo-zero/core/stores/redis" 13 "github.com/stretchr/testify/assert" 14 "go.mongodb.org/mongo-driver/bson" 15 "go.mongodb.org/mongo-driver/mongo/integration/mtest" 16 ) 17 18 func TestNewModel(t *testing.T) { 19 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 20 defer mt.Close() 21 22 mt.Run("test", func(mt *mtest.T) { 23 _, err := newModel("foo", mt.DB.Name(), mt.Coll.Name(), nil) 24 assert.NotNil(mt, err) 25 }) 26 } 27 28 func TestModel_DelCache(t *testing.T) { 29 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 30 defer mt.Close() 31 32 mt.Run("test", func(mt *mtest.T) { 33 m := createModel(t, mt) 34 assert.Nil(t, m.cache.Set("foo", "bar")) 35 assert.Nil(t, m.cache.Set("bar", "baz")) 36 assert.Nil(t, m.DelCache(context.Background(), "foo", "bar")) 37 var v string 38 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 39 assert.True(t, m.cache.IsNotFound(m.cache.Get("bar", &v))) 40 }) 41 } 42 43 func TestModel_DeleteOne(t *testing.T) { 44 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 45 defer mt.Close() 46 47 mt.Run("test", func(mt *mtest.T) { 48 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{{Key: "n", Value: 1}}...)) 49 m := createModel(t, mt) 50 assert.Nil(t, m.cache.Set("foo", "bar")) 51 val, err := m.DeleteOne(context.Background(), "foo", bson.D{{Key: "foo", Value: "bar"}}) 52 assert.Nil(t, err) 53 assert.Equal(t, int64(1), val) 54 var v string 55 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 56 _, err = m.DeleteOne(context.Background(), "foo", bson.D{{Key: "foo", Value: "bar"}}) 57 assert.NotNil(t, err) 58 59 m.cache = mockedCache{m.cache} 60 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{{Key: "n", Value: 1}}...)) 61 _, err = m.DeleteOne(context.Background(), "foo", bson.D{{Key: "foo", Value: "bar"}}) 62 assert.Equal(t, errMocked, err) 63 }) 64 } 65 66 func TestModel_DeleteOneNoCache(t *testing.T) { 67 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 68 defer mt.Close() 69 70 mt.Run("test", func(mt *mtest.T) { 71 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{{Key: "n", Value: 1}}...)) 72 m := createModel(t, mt) 73 assert.Nil(t, m.cache.Set("foo", "bar")) 74 val, err := m.DeleteOneNoCache(context.Background(), bson.D{{Key: "foo", Value: "bar"}}) 75 assert.Nil(t, err) 76 assert.Equal(t, int64(1), val) 77 var v string 78 assert.Nil(t, m.cache.Get("foo", &v)) 79 }) 80 } 81 82 func TestModel_FindOne(t *testing.T) { 83 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 84 defer mt.Close() 85 86 mt.Run("test", func(mt *mtest.T) { 87 resp := mtest.CreateCursorResponse( 88 1, 89 "DBName.CollectionName", 90 mtest.FirstBatch, 91 bson.D{ 92 {Key: "foo", Value: "bar"}, 93 }) 94 mt.AddMockResponses(resp) 95 m := createModel(t, mt) 96 var v struct { 97 Foo string `bson:"foo"` 98 } 99 assert.Nil(t, m.FindOne(context.Background(), "foo", &v, bson.D{})) 100 assert.Equal(t, "bar", v.Foo) 101 assert.Nil(t, m.cache.Set("foo", "bar")) 102 }) 103 } 104 105 func TestModel_FindOneNoCache(t *testing.T) { 106 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 107 defer mt.Close() 108 109 mt.Run("test", func(mt *mtest.T) { 110 resp := mtest.CreateCursorResponse( 111 1, 112 "DBName.CollectionName", 113 mtest.FirstBatch, 114 bson.D{ 115 {Key: "foo", Value: "bar"}, 116 }) 117 mt.AddMockResponses(resp) 118 m := createModel(t, mt) 119 v := struct { 120 Foo string `bson:"foo"` 121 }{} 122 assert.Nil(t, m.FindOneNoCache(context.Background(), &v, bson.D{})) 123 assert.Equal(t, "bar", v.Foo) 124 }) 125 } 126 127 func TestModel_FindOneAndDelete(t *testing.T) { 128 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 129 defer mt.Close() 130 131 mt.Run("test", func(mt *mtest.T) { 132 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 133 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 134 }...)) 135 m := createModel(t, mt) 136 assert.Nil(t, m.cache.Set("foo", "bar")) 137 v := struct { 138 Foo string `bson:"foo"` 139 }{} 140 assert.Nil(t, m.FindOneAndDelete(context.Background(), "foo", &v, bson.D{})) 141 assert.Equal(t, "bar", v.Foo) 142 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 143 assert.NotNil(t, m.FindOneAndDelete(context.Background(), "foo", &v, bson.D{})) 144 145 m.cache = mockedCache{m.cache} 146 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 147 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 148 }...)) 149 assert.Equal(t, errMocked, m.FindOneAndDelete(context.Background(), "foo", &v, bson.D{})) 150 }) 151 } 152 153 func TestModel_FindOneAndDeleteNoCache(t *testing.T) { 154 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 155 defer mt.Close() 156 157 mt.Run("test", func(mt *mtest.T) { 158 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 159 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 160 }...)) 161 m := createModel(t, mt) 162 v := struct { 163 Foo string `bson:"foo"` 164 }{} 165 assert.Nil(t, m.FindOneAndDeleteNoCache(context.Background(), &v, bson.D{})) 166 assert.Equal(t, "bar", v.Foo) 167 }) 168 } 169 170 func TestModel_FindOneAndReplace(t *testing.T) { 171 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 172 defer mt.Close() 173 174 mt.Run("test", func(mt *mtest.T) { 175 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 176 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 177 }...)) 178 m := createModel(t, mt) 179 assert.Nil(t, m.cache.Set("foo", "bar")) 180 v := struct { 181 Foo string `bson:"foo"` 182 }{} 183 assert.Nil(t, m.FindOneAndReplace(context.Background(), "foo", &v, bson.D{}, bson.D{ 184 {Key: "name", Value: "Mary"}, 185 })) 186 assert.Equal(t, "bar", v.Foo) 187 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 188 assert.NotNil(t, m.FindOneAndReplace(context.Background(), "foo", &v, bson.D{}, bson.D{ 189 {Key: "name", Value: "Mary"}, 190 })) 191 192 m.cache = mockedCache{m.cache} 193 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 194 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 195 }...)) 196 assert.Equal(t, errMocked, m.FindOneAndReplace(context.Background(), "foo", &v, bson.D{}, bson.D{ 197 {Key: "name", Value: "Mary"}, 198 })) 199 }) 200 } 201 202 func TestModel_FindOneAndReplaceNoCache(t *testing.T) { 203 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 204 defer mt.Close() 205 206 mt.Run("test", func(mt *mtest.T) { 207 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 208 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 209 }...)) 210 m := createModel(t, mt) 211 v := struct { 212 Foo string `bson:"foo"` 213 }{} 214 assert.Nil(t, m.FindOneAndReplaceNoCache(context.Background(), &v, bson.D{}, bson.D{ 215 {Key: "name", Value: "Mary"}, 216 })) 217 assert.Equal(t, "bar", v.Foo) 218 }) 219 } 220 221 func TestModel_FindOneAndUpdate(t *testing.T) { 222 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 223 defer mt.Close() 224 225 mt.Run("test", func(mt *mtest.T) { 226 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 227 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 228 }...)) 229 m := createModel(t, mt) 230 assert.Nil(t, m.cache.Set("foo", "bar")) 231 v := struct { 232 Foo string `bson:"foo"` 233 }{} 234 assert.Nil(t, m.FindOneAndUpdate(context.Background(), "foo", &v, bson.D{}, bson.D{ 235 {Key: "$set", Value: bson.D{{Key: "name", Value: "Mary"}}}, 236 })) 237 assert.Equal(t, "bar", v.Foo) 238 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 239 assert.NotNil(t, m.FindOneAndUpdate(context.Background(), "foo", &v, bson.D{}, bson.D{ 240 {Key: "$set", Value: bson.D{{Key: "name", Value: "Mary"}}}, 241 })) 242 243 m.cache = mockedCache{m.cache} 244 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 245 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 246 }...)) 247 assert.Equal(t, errMocked, m.FindOneAndUpdate(context.Background(), "foo", &v, bson.D{}, bson.D{ 248 {Key: "$set", Value: bson.D{{Key: "name", Value: "Mary"}}}, 249 })) 250 }) 251 } 252 253 func TestModel_FindOneAndUpdateNoCache(t *testing.T) { 254 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 255 defer mt.Close() 256 257 mt.Run("test", func(mt *mtest.T) { 258 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 259 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 260 }...)) 261 m := createModel(t, mt) 262 v := struct { 263 Foo string `bson:"foo"` 264 }{} 265 assert.Nil(t, m.FindOneAndUpdateNoCache(context.Background(), &v, bson.D{}, bson.D{ 266 {Key: "$set", Value: bson.D{{Key: "name", Value: "Mary"}}}, 267 })) 268 assert.Equal(t, "bar", v.Foo) 269 }) 270 } 271 272 func TestModel_GetCache(t *testing.T) { 273 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 274 defer mt.Close() 275 276 mt.Run("test", func(mt *mtest.T) { 277 m := createModel(t, mt) 278 assert.NotNil(t, m.cache) 279 assert.Nil(t, m.cache.Set("foo", "bar")) 280 var s string 281 assert.Nil(t, m.cache.Get("foo", &s)) 282 assert.Equal(t, "bar", s) 283 }) 284 } 285 286 func TestModel_InsertOne(t *testing.T) { 287 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 288 defer mt.Close() 289 290 mt.Run("test", func(mt *mtest.T) { 291 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 292 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 293 }...)) 294 m := createModel(t, mt) 295 assert.Nil(t, m.cache.Set("foo", "bar")) 296 resp, err := m.InsertOne(context.Background(), "foo", bson.D{ 297 {Key: "name", Value: "Mary"}, 298 }) 299 assert.Nil(t, err) 300 assert.NotNil(t, resp) 301 var v string 302 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 303 _, err = m.InsertOne(context.Background(), "foo", bson.D{ 304 {Key: "name", Value: "Mary"}, 305 }) 306 assert.NotNil(t, err) 307 308 m.cache = mockedCache{m.cache} 309 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 310 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 311 }...)) 312 _, err = m.InsertOne(context.Background(), "foo", bson.D{ 313 {Key: "name", Value: "Mary"}, 314 }) 315 assert.Equal(t, errMocked, err) 316 }) 317 } 318 319 func TestModel_InsertOneNoCache(t *testing.T) { 320 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 321 defer mt.Close() 322 323 mt.Run("test", func(mt *mtest.T) { 324 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 325 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 326 }...)) 327 m := createModel(t, mt) 328 resp, err := m.InsertOneNoCache(context.Background(), bson.D{ 329 {Key: "name", Value: "Mary"}, 330 }) 331 assert.Nil(t, err) 332 assert.NotNil(t, resp) 333 }) 334 } 335 336 func TestModel_ReplaceOne(t *testing.T) { 337 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 338 defer mt.Close() 339 340 mt.Run("test", func(mt *mtest.T) { 341 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 342 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 343 }...)) 344 m := createModel(t, mt) 345 assert.Nil(t, m.cache.Set("foo", "bar")) 346 resp, err := m.ReplaceOne(context.Background(), "foo", bson.D{}, bson.D{ 347 {Key: "foo", Value: "baz"}, 348 }) 349 assert.Nil(t, err) 350 assert.NotNil(t, resp) 351 var v string 352 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 353 _, err = m.ReplaceOne(context.Background(), "foo", bson.D{}, bson.D{ 354 {Key: "foo", Value: "baz"}, 355 }) 356 assert.NotNil(t, err) 357 358 m.cache = mockedCache{m.cache} 359 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 360 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 361 }...)) 362 _, err = m.ReplaceOne(context.Background(), "foo", bson.D{}, bson.D{ 363 {Key: "foo", Value: "baz"}, 364 }) 365 assert.Equal(t, errMocked, err) 366 }) 367 } 368 369 func TestModel_ReplaceOneNoCache(t *testing.T) { 370 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 371 defer mt.Close() 372 373 mt.Run("test", func(mt *mtest.T) { 374 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 375 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 376 }...)) 377 m := createModel(t, mt) 378 resp, err := m.ReplaceOneNoCache(context.Background(), bson.D{}, bson.D{ 379 {Key: "foo", Value: "baz"}, 380 }) 381 assert.Nil(t, err) 382 assert.NotNil(t, resp) 383 }) 384 } 385 386 func TestModel_SetCache(t *testing.T) { 387 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 388 defer mt.Close() 389 390 mt.Run("test", func(mt *mtest.T) { 391 m := createModel(t, mt) 392 assert.Nil(t, m.SetCache("foo", "bar")) 393 var v string 394 assert.Nil(t, m.GetCache("foo", &v)) 395 assert.Equal(t, "bar", v) 396 }) 397 } 398 399 func TestModel_UpdateByID(t *testing.T) { 400 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 401 defer mt.Close() 402 403 mt.Run("test", func(mt *mtest.T) { 404 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 405 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 406 }...)) 407 m := createModel(t, mt) 408 assert.Nil(t, m.cache.Set("foo", "bar")) 409 resp, err := m.UpdateByID(context.Background(), "foo", bson.D{}, bson.D{ 410 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 411 }) 412 assert.Nil(t, err) 413 assert.NotNil(t, resp) 414 var v string 415 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 416 _, err = m.UpdateByID(context.Background(), "foo", bson.D{}, bson.D{ 417 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 418 }) 419 assert.NotNil(t, err) 420 421 m.cache = mockedCache{m.cache} 422 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 423 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 424 }...)) 425 _, err = m.UpdateByID(context.Background(), "foo", bson.D{}, bson.D{ 426 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 427 }) 428 assert.Equal(t, errMocked, err) 429 }) 430 } 431 432 func TestModel_UpdateByIDNoCache(t *testing.T) { 433 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 434 defer mt.Close() 435 436 mt.Run("test", func(mt *mtest.T) { 437 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 438 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 439 }...)) 440 m := createModel(t, mt) 441 resp, err := m.UpdateByIDNoCache(context.Background(), bson.D{}, bson.D{ 442 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 443 }) 444 assert.Nil(t, err) 445 assert.NotNil(t, resp) 446 }) 447 } 448 449 func TestModel_UpdateMany(t *testing.T) { 450 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 451 defer mt.Close() 452 453 mt.Run("test", func(mt *mtest.T) { 454 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 455 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 456 }...)) 457 m := createModel(t, mt) 458 assert.Nil(t, m.cache.Set("foo", "bar")) 459 assert.Nil(t, m.cache.Set("bar", "baz")) 460 resp, err := m.UpdateMany(context.Background(), []string{"foo", "bar"}, bson.D{}, bson.D{ 461 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 462 }) 463 assert.Nil(t, err) 464 assert.NotNil(t, resp) 465 var v string 466 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 467 assert.True(t, m.cache.IsNotFound(m.cache.Get("bar", &v))) 468 _, err = m.UpdateMany(context.Background(), []string{"foo", "bar"}, bson.D{}, bson.D{ 469 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 470 }) 471 assert.NotNil(t, err) 472 473 m.cache = mockedCache{m.cache} 474 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 475 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 476 }...)) 477 _, err = m.UpdateMany(context.Background(), []string{"foo", "bar"}, bson.D{}, bson.D{ 478 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 479 }) 480 assert.Equal(t, errMocked, err) 481 }) 482 } 483 484 func TestModel_UpdateManyNoCache(t *testing.T) { 485 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 486 defer mt.Close() 487 488 mt.Run("test", func(mt *mtest.T) { 489 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 490 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 491 }...)) 492 m := createModel(t, mt) 493 resp, err := m.UpdateManyNoCache(context.Background(), bson.D{}, bson.D{ 494 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 495 }) 496 assert.Nil(t, err) 497 assert.NotNil(t, resp) 498 }) 499 } 500 501 func TestModel_UpdateOne(t *testing.T) { 502 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 503 defer mt.Close() 504 505 mt.Run("test", func(mt *mtest.T) { 506 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 507 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 508 }...)) 509 m := createModel(t, mt) 510 assert.Nil(t, m.cache.Set("foo", "bar")) 511 resp, err := m.UpdateOne(context.Background(), "foo", bson.D{}, bson.D{ 512 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 513 }) 514 assert.Nil(t, err) 515 assert.NotNil(t, resp) 516 var v string 517 assert.True(t, m.cache.IsNotFound(m.cache.Get("foo", &v))) 518 _, err = m.UpdateOne(context.Background(), "foo", bson.D{}, bson.D{ 519 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 520 }) 521 assert.NotNil(t, err) 522 523 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 524 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 525 }...)) 526 m.cache = mockedCache{m.cache} 527 _, err = m.UpdateOne(context.Background(), "foo", bson.D{}, bson.D{ 528 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 529 }) 530 assert.Equal(t, errMocked, err) 531 }) 532 } 533 534 func TestModel_UpdateOneNoCache(t *testing.T) { 535 mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock)) 536 defer mt.Close() 537 538 mt.Run("test", func(mt *mtest.T) { 539 mt.AddMockResponses(mtest.CreateSuccessResponse(bson.D{ 540 {Key: "value", Value: bson.D{{Key: "foo", Value: "bar"}}}, 541 }...)) 542 m := createModel(t, mt) 543 resp, err := m.UpdateOneNoCache(context.Background(), bson.D{}, bson.D{ 544 {Key: "$set", Value: bson.D{{Key: "foo", Value: "baz"}}}, 545 }) 546 assert.Nil(t, err) 547 assert.NotNil(t, resp) 548 }) 549 } 550 551 func createModel(t *testing.T, mt *mtest.T) *Model { 552 s, err := miniredis.Run() 553 assert.Nil(t, err) 554 mon.Inject(mt.Name(), mt.Client) 555 if atomic.AddInt32(&index, 1)%2 == 0 { 556 return MustNewNodeModel(mt.Name(), mt.DB.Name(), mt.Coll.Name(), redis.New(s.Addr())) 557 } else { 558 return MustNewModel(mt.Name(), mt.DB.Name(), mt.Coll.Name(), cache.CacheConf{ 559 cache.NodeConf{ 560 RedisConf: redis.RedisConf{ 561 Host: s.Addr(), 562 Type: redis.NodeType, 563 }, 564 Weight: 100, 565 }, 566 }) 567 } 568 } 569 570 var ( 571 errMocked = errors.New("mocked error") 572 index int32 573 ) 574 575 type mockedCache struct { 576 cache.Cache 577 } 578 579 func (m mockedCache) DelCtx(_ context.Context, _ ...string) error { 580 return errMocked 581 }