local_ctx_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package local_ctx
  2. import (
  3. "context"
  4. "testing"
  5. )
  6. type tester struct {
  7. t *testing.T
  8. ctx *LocalCtx
  9. }
  10. func TestLocalCtx(t *testing.T) {
  11. sf := &tester{
  12. t: t,
  13. }
  14. sf.new()
  15. sf.set()
  16. sf.get()
  17. sf.del()
  18. sf.done()
  19. }
  20. // Ожидает отмены контекста.
  21. func (sf *tester) done() {
  22. sf.t.Log("done")
  23. _ = sf.ctx.Size()
  24. go sf.ctx.Cancel()
  25. sf.ctx.Wait()
  26. }
  27. // Удаляет несуществующий ключ из локального контекста.
  28. func (sf *tester) del() {
  29. sf.t.Log("del")
  30. sf.ctx.Del("123")
  31. sf.ctx.Del("count")
  32. }
  33. // Возвращает хранимое значение.
  34. func (sf *tester) get() {
  35. sf.t.Log("get")
  36. optRes := sf.ctx.Get("count")
  37. ctxVal := optRes.Hassert("get()")
  38. count := ctxVal.Val().(int)
  39. if count == 15 {
  40. return
  41. }
  42. }
  43. // Устанавливает значение.
  44. func (sf *tester) set() {
  45. sf.t.Log("set")
  46. sf.ctx.Set("count", 5, "test_val").Hassert("set()")
  47. sf.ctx.Set("count", 15, "test_val1").Hassert("set()")
  48. }
  49. // Создание нового локального контекста.
  50. func (sf *tester) new() {
  51. sf.t.Log("new")
  52. sf.newBad1()
  53. sf.newGood1()
  54. }
  55. func (sf *tester) newGood1() {
  56. sf.t.Log("newGood1")
  57. ctx := context.Background()
  58. sf.ctx = NewLocalCtx(ctx).Hassert("newGood1()")
  59. _ = sf.ctx.Log()
  60. if lst := sf.ctx.SortedList(); lst == nil {
  61. sf.t.Fatalf("newGood1(): lst==nil")
  62. }
  63. if ctx := sf.ctx.Ctx(); ctx == nil {
  64. sf.t.Fatalf("newGood1(): ctx==nil")
  65. }
  66. }
  67. // Нет контекста ядра.
  68. func (sf *tester) newBad1() {
  69. sf.t.Log("newBad1")
  70. defer func() {
  71. if _panic := recover(); _panic == nil {
  72. sf.t.Fatalf("newBad1(): panic==nil")
  73. }
  74. }()
  75. var ctx context.Context
  76. sf.ctx = NewLocalCtx(ctx).Hassert("newBad1()")
  77. }