mod_wui_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package mod_wui
  2. import (
  3. "net/http"
  4. "os"
  5. "testing"
  6. "time"
  7. "gitp78su.ipnodns.ru/svi/kern/krn/kctx"
  8. "gitp78su.ipnodns.ru/svi/kern/wui/wbutton"
  9. "gitp78su.ipnodns.ru/svi/kern/wui/wlabel"
  10. // "gitp78su.ipnodns.ru/svi/kern/krn/kmodule"
  11. "gitp78su.ipnodns.ru/svi/kern/krn/kmonolit"
  12. "gitp78su.ipnodns.ru/svi/kern/krn/kserv_http"
  13. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  14. "gitp78su.ipnodns.ru/svi/kern/mock/mock_env"
  15. )
  16. type tester struct {
  17. t *testing.T
  18. ctx IKernelCtx
  19. serv IKernelServerHttp
  20. mod IKernelModule
  21. }
  22. func TestModKernelCtx(t *testing.T) {
  23. sf := &tester{
  24. t: t,
  25. ctx: kctx.GetKernelCtx(),
  26. }
  27. sf.ctx.Set("monolitName", "test_monolit", "test")
  28. sf.new()
  29. sf.click()
  30. sf.done()
  31. }
  32. // Кто-то кликнул в сети на кнопку
  33. func (sf *tester) click() {
  34. sf.t.Log("click")
  35. sf.clickBad1()
  36. sf.clickBad2()
  37. sf.clickGood1()
  38. }
  39. func (sf *tester) clickGood1() {
  40. sf.t.Log("clickGood1")
  41. btn := wbutton.NewWuiButton("test_btn", sf.fnClick)
  42. fiberApp := sf.serv.Fiber()
  43. req, err := http.NewRequest("POST", "/wui/click/"+btn.Id(), nil)
  44. if err != nil {
  45. sf.t.Fatalf("clickGood1(): in net request, err=%v", err)
  46. }
  47. resp, err := fiberApp.Test(req)
  48. if err != nil {
  49. sf.t.Fatalf("clickGood1(): in make POST, err=%v", err)
  50. }
  51. if resp.StatusCode != 200 {
  52. sf.t.Fatalf("clickGood1(): status(%v)!=200", resp.StatusCode)
  53. }
  54. }
  55. // Обратный вызов клика
  56. func (sf *tester) fnClick() string {
  57. sf.t.Log("fnClick")
  58. return "test_click"
  59. }
  60. // Неправильный тип объекта
  61. func (sf *tester) clickBad2() {
  62. sf.t.Log("clickBad2")
  63. lbl := wlabel.NewWuiLabel("test_lbl")
  64. fiberApp := sf.serv.Fiber()
  65. req, err := http.NewRequest("POST", "/wui/click/"+lbl.Id(), nil)
  66. if err != nil {
  67. sf.t.Fatalf("clickBad2(): in net request, err=%v", err)
  68. }
  69. resp, err := fiberApp.Test(req)
  70. if err != nil {
  71. sf.t.Fatalf("clickBad2(): in make POST, err=%v", err)
  72. }
  73. if resp.StatusCode != 200 {
  74. sf.t.Fatalf("clickBad2(): status(%v)!=200", resp.StatusCode)
  75. }
  76. }
  77. // Нет такой кнопки
  78. func (sf *tester) clickBad1() {
  79. sf.t.Log("clickBad1")
  80. fiberApp := sf.serv.Fiber()
  81. req, err := http.NewRequest("POST", "/wui/click/ert", nil)
  82. if err != nil {
  83. sf.t.Fatalf("clickBad1(): in net request, err=%v", err)
  84. }
  85. resp, err := fiberApp.Test(req)
  86. if err != nil {
  87. sf.t.Fatalf("clickBad1(): in make POST, err=%v", err)
  88. }
  89. if resp.StatusCode != 200 {
  90. sf.t.Fatalf("clickBad1(): status(%v)!=200", resp.StatusCode)
  91. }
  92. }
  93. // Завершение работы
  94. func (sf *tester) done() {
  95. sf.t.Log("done")
  96. sf.ctx.Cancel()
  97. sf.ctx.Wg().Wait()
  98. if isWork := sf.mod.IsWork(); isWork {
  99. sf.t.Fatalf("newGood1(): isWork==true")
  100. }
  101. }
  102. // Создание нового модуля HTTP-сервера
  103. func (sf *tester) new() {
  104. sf.t.Log("new")
  105. sf.newBad1()
  106. sf.newGood1()
  107. }
  108. func (sf *tester) newGood1() {
  109. sf.t.Log("newGood1")
  110. _ = mock_env.MakeEnv()
  111. _ = os.Unsetenv("LOCAL_HTTP_URL")
  112. os.Setenv("LOCAL_HTTP_URL", "http://localhost:18330/")
  113. sf.mod = GetModuleWui()
  114. kCtx := kctx.GetKernelCtx()
  115. kCtx.Set("isLocal", true, "type msg bus")
  116. _ = kmonolit.GetMonolit("test_monolit")
  117. sf.serv = kserv_http.GetKernelServHttp()
  118. _ = GetModuleWui()
  119. if sf.mod == nil {
  120. sf.t.Fatalf("newGood1(): mod==nil")
  121. }
  122. go sf.mod.Run()
  123. for {
  124. time.Sleep(time.Millisecond * 1)
  125. if sf.mod.IsWork() {
  126. break
  127. }
  128. }
  129. go sf.serv.Run()
  130. }
  131. // нет ничего для создания модуля
  132. func (sf *tester) newBad1() {
  133. sf.t.Log("newBad1")
  134. defer func() {
  135. if _panic := recover(); _panic == nil {
  136. sf.t.Fatalf("newBad1(): panic==nil")
  137. }
  138. }()
  139. _ = GetModuleWui()
  140. }