page_monolit_test.go 4.0 KB

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