kserv_http_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package kserv_http
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/d1/mock_env"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kern_ctx"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kspec"
  10. )
  11. const (
  12. baseUrl = "http://localhost:18400/"
  13. )
  14. type tester struct {
  15. t *testing.T
  16. kCtx *kern_ctx.KernCtx
  17. wg kspec.IKernelWg
  18. me *mock_env.MockEnv
  19. owner *d0.LOwner
  20. }
  21. func TestKernelServHttp(t *testing.T) {
  22. kCtx := kern_ctx.GetKernCtx()
  23. owner := d0.LetOwner(1, "test_kernel_serv_http")
  24. sf := &tester{
  25. t: t,
  26. kCtx: kCtx,
  27. wg: kCtx.Wg(),
  28. owner: owner,
  29. }
  30. sf.new()
  31. sf.close()
  32. }
  33. // Закрытие HTTP-сервера.
  34. func (sf *tester) close() {
  35. sf.t.Log("close")
  36. sf.kCtx.Cancel()
  37. sf.wg.Wait()
  38. kernServHttp.close()
  39. if kernServHttp.IsWork() {
  40. sf.t.Fatalf("close(): isWork==true")
  41. }
  42. kernServHttp.Run()
  43. chErr := make(chan *d0.LErr, 2)
  44. chErr <- d0.LetErr("test err")
  45. close(chErr)
  46. kernServHttp.fnChErr(chErr)
  47. }
  48. // Создание сервера HTTP.
  49. func (sf *tester) new() {
  50. sf.t.Log("new()")
  51. sf.newBad1()
  52. sf.newBad2()
  53. sf.newGood1()
  54. sf.newBad3()
  55. }
  56. // Повторный запуск сервера на том же порту.
  57. func (sf *tester) newBad3() {
  58. sf.t.Log("newBad3()")
  59. serv := GetKernelServHttp()
  60. go serv.Run()
  61. count := 0
  62. for count < 20 {
  63. time.Sleep(time.Millisecond * 1)
  64. count++
  65. }
  66. }
  67. func (sf *tester) newGood1() {
  68. sf.t.Log("newGood1()")
  69. defer func() {
  70. if _panic := recover(); _panic != nil {
  71. sf.t.Fatalf("newGood1(): panic=%v", _panic)
  72. }
  73. }()
  74. sf.me = mock_env.MakeEnv(sf.owner)
  75. _ = os.Unsetenv("LOCAL_HTTP_URL")
  76. _ = os.Setenv("LOCAL_HTTP_URL", baseUrl)
  77. sf.kCtx.Set(d0.LetTxt("monolitName"), "test_monolit", "comment")
  78. serv := GetKernelServHttp().(*kServHttp)
  79. if serv != kernServHttp {
  80. sf.t.Fatalf("newGood1(): bad IKernelServHttp")
  81. }
  82. if webFiber := serv.Fiber(); webFiber != kernServHttp.fiberApp {
  83. sf.t.Fatalf("newGood1(): webFiber==serv.appFiber")
  84. }
  85. if log := serv.Log(); log == nil {
  86. sf.t.Fatalf("newGood1(): log==nil")
  87. }
  88. // go serv.Run()
  89. // count := 0
  90. // for count < 50 {
  91. // SleepMs()
  92. // count++
  93. // }
  94. serv.Run()
  95. }
  96. // Не указана SERVER_HTTP_PORT.
  97. func (sf *tester) newBad2() {
  98. sf.t.Log("newBad2()")
  99. _ = GetKernelServHttp()
  100. }
  101. // Нет контекста ядра.
  102. func (sf *tester) newBad1() {
  103. sf.t.Log("newBad1()")
  104. _ = GetKernelServHttp()
  105. }