mod_wui_test.go 3.6 KB

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