mod_wui_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package mod_wui
  2. import (
  3. "net/http"
  4. "net/url"
  5. "os"
  6. "strings"
  7. "testing"
  8. "time"
  9. "gitp78su.ipnodns.ru/svi/kern/krn/kctx"
  10. "gitp78su.ipnodns.ru/svi/kern/wui/wbutton"
  11. "gitp78su.ipnodns.ru/svi/kern/wui/wlabel"
  12. "gitp78su.ipnodns.ru/svi/kern/krn/kmonolit"
  13. "gitp78su.ipnodns.ru/svi/kern/krn/kserv_http"
  14. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  15. "gitp78su.ipnodns.ru/svi/kern/mock/mock_env"
  16. )
  17. type tester struct {
  18. t *testing.T
  19. ctx IKernelCtx
  20. serv IKernelServerHttp
  21. mod IKernelModule
  22. }
  23. func TestModKernelCtx(t *testing.T) {
  24. sf := &tester{
  25. t: t,
  26. ctx: kctx.GetKernelCtx(),
  27. }
  28. sf.ctx.Set("monolitName", "test_monolit", "test")
  29. sf.new()
  30. sf.click()
  31. sf.done()
  32. }
  33. // Кто-то кликнул в сети на кнопку
  34. func (sf *tester) click() {
  35. sf.t.Log("click")
  36. sf.clickBad1()
  37. sf.clickBad2()
  38. sf.clickGood1()
  39. sf.clickGood2()
  40. sf.clickBad3()
  41. }
  42. // С кривой POST-формой
  43. func (sf *tester) clickBad3() {
  44. sf.t.Log("clickBad3")
  45. btn := wbutton.NewWuiButton("test_btn", sf.fnClick)
  46. fiberApp := sf.serv.Fiber()
  47. // Данные формы
  48. reader := strings.NewReader("tra-ta-ta")
  49. req, err := http.NewRequest("POST", "/wui/click/"+btn.Id(), reader)
  50. if err != nil {
  51. sf.t.Fatalf("clickBad3(): in net request, err=%v", err)
  52. }
  53. req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  54. req.Header.Add("Token-1", "123;original-1")
  55. req.Header.Add("Token-2", "")
  56. resp, err := fiberApp.Test(req)
  57. if err != nil {
  58. sf.t.Fatalf("clickBad3(): in make POST, err=%v", err)
  59. }
  60. if resp.StatusCode != 200 {
  61. sf.t.Fatalf("clickBad3(): status(%v)!=200", resp.StatusCode)
  62. }
  63. }
  64. // С POST-формой
  65. func (sf *tester) clickGood2() {
  66. sf.t.Log("clickGood2")
  67. btn := wbutton.NewWuiButton("test_btn", sf.fnClick)
  68. fiberApp := sf.serv.Fiber()
  69. // Данные формы
  70. formData := url.Values{
  71. "username": {"john_doe"},
  72. "email": {"john.doe@example.com"},
  73. "password": {"s3cr3t", "valid"},
  74. }
  75. reader := strings.NewReader(formData.Encode())
  76. req, err := http.NewRequest("POST", "/wui/click/"+btn.Id(), reader)
  77. if err != nil {
  78. sf.t.Fatalf("clickGood2(): in net request, err=%v", err)
  79. }
  80. req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  81. req.Header.Add("Token-1", "123;original-1")
  82. req.Header.Add("Token-2", "")
  83. req.Header.Clone().Add("Token-1", "555;original-2")
  84. resp, err := fiberApp.Test(req)
  85. if err != nil {
  86. sf.t.Fatalf("clickGood2(): in make POST, err=%v", err)
  87. }
  88. if resp.StatusCode != 200 {
  89. sf.t.Fatalf("clickGood2(): status(%v)!=200", resp.StatusCode)
  90. }
  91. }
  92. // Без POST-формы
  93. func (sf *tester) clickGood1() {
  94. sf.t.Log("clickGood1")
  95. btn := wbutton.NewWuiButton("test_btn", sf.fnClick)
  96. fiberApp := sf.serv.Fiber()
  97. req, err := http.NewRequest("POST", "/wui/click/"+btn.Id(), nil)
  98. if err != nil {
  99. sf.t.Fatalf("clickGood1(): in net request, err=%v", err)
  100. }
  101. resp, err := fiberApp.Test(req)
  102. if err != nil {
  103. sf.t.Fatalf("clickGood1(): in make POST, err=%v", err)
  104. }
  105. if resp.StatusCode != 200 {
  106. sf.t.Fatalf("clickGood1(): status(%v)!=200", resp.StatusCode)
  107. }
  108. }
  109. // Обратный вызов клика
  110. func (sf *tester) fnClick(dict map[string]string) string {
  111. sf.t.Log("fnClick")
  112. return "test_click"
  113. }
  114. // Неправильный тип объекта
  115. func (sf *tester) clickBad2() {
  116. sf.t.Log("clickBad2")
  117. lbl := wlabel.NewWuiLabel("test_lbl")
  118. fiberApp := sf.serv.Fiber()
  119. req, err := http.NewRequest("POST", "/wui/click/"+lbl.Id(), nil)
  120. if err != nil {
  121. sf.t.Fatalf("clickBad2(): in net request, err=%v", err)
  122. }
  123. resp, err := fiberApp.Test(req)
  124. if err != nil {
  125. sf.t.Fatalf("clickBad2(): in make POST, err=%v", err)
  126. }
  127. if resp.StatusCode != 200 {
  128. sf.t.Fatalf("clickBad2(): status(%v)!=200", resp.StatusCode)
  129. }
  130. }
  131. // Нет такой кнопки
  132. func (sf *tester) clickBad1() {
  133. sf.t.Log("clickBad1")
  134. fiberApp := sf.serv.Fiber()
  135. req, err := http.NewRequest("POST", "/wui/click/ert", nil)
  136. if err != nil {
  137. sf.t.Fatalf("clickBad1(): in net request, err=%v", err)
  138. }
  139. resp, err := fiberApp.Test(req)
  140. if err != nil {
  141. sf.t.Fatalf("clickBad1(): in make POST, err=%v", err)
  142. }
  143. if resp.StatusCode != 200 {
  144. sf.t.Fatalf("clickBad1(): status(%v)!=200", resp.StatusCode)
  145. }
  146. }
  147. // Завершение работы
  148. func (sf *tester) done() {
  149. sf.t.Log("done")
  150. if log := sf.mod.Log(); log != sf.mod.(*ModuleWui).log {
  151. sf.t.Fatalf("done(): log is bad")
  152. }
  153. sf.ctx.Cancel()
  154. sf.ctx.Wg().Wait()
  155. if isWork := sf.mod.IsWork(); isWork {
  156. sf.t.Fatalf("done(): isWork==true")
  157. }
  158. }
  159. // Создание нового модуля HTTP-сервера
  160. func (sf *tester) new() {
  161. sf.t.Log("new")
  162. sf.newBad1()
  163. sf.newGood1()
  164. }
  165. func (sf *tester) newGood1() {
  166. sf.t.Log("newGood1")
  167. _ = mock_env.MakeEnv()
  168. _ = os.Unsetenv("LOCAL_HTTP_URL")
  169. os.Setenv("LOCAL_HTTP_URL", "http://localhost:18330/")
  170. sf.mod = GetModuleWui()
  171. kCtx := kctx.GetKernelCtx()
  172. kCtx.Set("isLocal", true, "type msg bus")
  173. _ = kmonolit.GetMonolit("test_monolit")
  174. sf.serv = kserv_http.GetKernelServHttp()
  175. _ = GetModuleWui()
  176. if sf.mod == nil {
  177. sf.t.Fatalf("newGood1(): mod==nil")
  178. }
  179. go sf.mod.Run()
  180. for {
  181. time.Sleep(time.Millisecond * 1)
  182. if sf.mod.IsWork() {
  183. break
  184. }
  185. }
  186. go sf.serv.Run()
  187. }
  188. // нет ничего для создания модуля
  189. func (sf *tester) newBad1() {
  190. sf.t.Log("newBad1")
  191. defer func() {
  192. if _panic := recover(); _panic == nil {
  193. sf.t.Fatalf("newBad1(): panic==nil")
  194. }
  195. }()
  196. _ = GetModuleWui()
  197. }