page_monolit_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package page_monolit
  2. import (
  3. "net/http"
  4. "os"
  5. "testing"
  6. "time"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
  11. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
  13. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
  14. )
  15. type tester struct {
  16. t *testing.T
  17. ctx kspec.IKernelCtx
  18. serv kspec.IKernelServerHttp
  19. page *PageMonolit
  20. }
  21. func TestPageMonolit(t *testing.T) {
  22. sf := &tester{
  23. t: t,
  24. ctx: kctx.GetKernelCtx(),
  25. }
  26. sf.new()
  27. sf.getMonolit()
  28. sf.postMonolitState()
  29. sf.postMonolitCtx()
  30. sf.postMonolitLog()
  31. sf.done()
  32. }
  33. // Возвращает состояние лога монолита.
  34. func (sf *tester) postMonolitLog() {
  35. sf.t.Log("postMonolitCtx")
  36. mon := sf.ctx.Get(defs.TxtFix("monolit")).
  37. Hassert("postMonolitLog()").
  38. Val().(mod_spec.IKernelMonolit)
  39. log := mon.Log()
  40. log.Debug(defs.TxtFix("test msg"))
  41. fiberApp := sf.serv.Fiber()
  42. req, err := http.NewRequest(http.MethodPost, "/monolit_log", nil)
  43. if err != nil {
  44. sf.t.Fatalf("postMonolitLog(): in net request, err=%v", err)
  45. }
  46. resp, err := fiberApp.Test(req)
  47. if err != nil {
  48. sf.t.Fatalf("postMonolitLog(): in make POST, err=%v", err)
  49. }
  50. defer func() {
  51. _ = resp.Body.Close()
  52. }()
  53. if resp.StatusCode != http.StatusOK {
  54. sf.t.Fatalf("postMonolitLog(): status(%v)!=200", resp.StatusCode)
  55. }
  56. }
  57. // Возвращает состояние контекста монолита.
  58. func (sf *tester) postMonolitCtx() {
  59. sf.t.Log("postMonolitCtx")
  60. fiberApp := sf.serv.Fiber()
  61. req, err := http.NewRequest(http.MethodPost, "/monolit_ctx", nil)
  62. if err != nil {
  63. sf.t.Fatalf("postMonolitCtx(): in net request, err=%v", err)
  64. }
  65. resp, err := fiberApp.Test(req)
  66. if err != nil {
  67. sf.t.Fatalf("postMonolitCtx(): in make POST, err=%v", err)
  68. }
  69. defer func() {
  70. _ = resp.Body.Close()
  71. }()
  72. if resp.StatusCode != http.StatusOK {
  73. sf.t.Fatalf("postMonolitCtx(): status(%v)!=200", resp.StatusCode)
  74. }
  75. }
  76. // Возвращает состояние монолита.
  77. func (sf *tester) postMonolitState() {
  78. sf.t.Log("postMonolitState")
  79. fiberApp := sf.serv.Fiber()
  80. req, err := http.NewRequest("http.MethodPost", "/monolit_state", nil)
  81. if err != nil {
  82. sf.t.Fatalf("postMonolitState(): in net request, err=%v", err)
  83. }
  84. resp, err := fiberApp.Test(req)
  85. if err != nil {
  86. sf.t.Fatalf("postMonolitState(): in make POST, err=%v", err)
  87. }
  88. defer func() {
  89. _ = resp.Body.Close()
  90. }()
  91. if resp.StatusCode != http.StatusOK {
  92. sf.t.Fatalf("postMonolitState(): status(%v)!=200", resp.StatusCode)
  93. }
  94. }
  95. // Возвращает главную страницу монолита.
  96. func (sf *tester) getMonolit() {
  97. sf.t.Log("getMonolit")
  98. fiberApp := sf.serv.Fiber()
  99. req, err := http.NewRequest(http.MethodGet, "/monolit", nil)
  100. if err != nil {
  101. sf.t.Fatalf("getMonolit(): in net request, err=%v", err)
  102. }
  103. resp, err := fiberApp.Test(req)
  104. if err != nil {
  105. sf.t.Fatalf("getMonolit(): in make GET, err=%v", err)
  106. }
  107. defer func() {
  108. _ = resp.Body.Close()
  109. }()
  110. if resp.StatusCode != http.StatusOK {
  111. sf.t.Fatalf("getMonolit(): status(%v)!=200", resp.StatusCode)
  112. }
  113. }
  114. // Освобождает ресурсы.
  115. func (sf *tester) done() {
  116. sf.t.Log("done")
  117. sf.page.clickMonolit()
  118. sf.ctx.Cancel()
  119. sf.ctx.Wg().Wait()
  120. }
  121. // Создаёт новую страницу монолита.
  122. func (sf *tester) new() {
  123. sf.t.Log("new")
  124. _ = mock_env.MakeEnv()
  125. _ = os.Unsetenv("LOCAL_HTTP_URL")
  126. _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18310/")
  127. strLocal := defs.TxtFix("isLocal")
  128. sf.ctx.Set(strLocal, true, defs.TxtFix("testing"))
  129. for {
  130. time.Sleep(time.Millisecond * 1)
  131. if sf.ctx.Get(strLocal) != nil {
  132. break
  133. }
  134. }
  135. _ = kmonolit.GetMonolit("test_monolit")
  136. sf.serv = kserv_http.GetKernelServHttp()
  137. sf.page = GetPageMonolit()
  138. if sf.page == nil {
  139. sf.t.Fatalf("new(): page==nil")
  140. }
  141. _ = GetPageMonolit()
  142. go sf.serv.Run()
  143. }