page_monolit_test.go 3.8 KB

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