page_module_test.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. package page_module
  2. import (
  3. "net/http"
  4. "os"
  5. "testing"
  6. "time"
  7. "github.com/gofiber/fiber/v2"
  8. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
  11. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
  13. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
  14. )
  15. type tester struct {
  16. t *testing.T
  17. ctx IKernelCtx
  18. serv IKernelServerHttp
  19. page *PageModule
  20. }
  21. func TestPageMonolit(t *testing.T) {
  22. sf := &tester{
  23. t: t,
  24. ctx: kctx.GetKernelCtx().Hassert("TestPageMonolit()"),
  25. }
  26. sf.new()
  27. sf.postModule()
  28. sf.postMonolitCtx()
  29. sf.postModuleLog()
  30. sf.postModule1()
  31. sf.postMonolitCtx()
  32. sf.postModuleLog()
  33. sf.postModuleState()
  34. sf.postModuleStateBad()
  35. sf.postSvgSecGood1()
  36. sf.postSvgSecBad1()
  37. sf.postSvgMinGood1()
  38. sf.postSvgMinBad1()
  39. sf.postSvgDayGood1()
  40. sf.postSvgDayBad1()
  41. sf.done()
  42. }
  43. // Получение SVG, модуля 20 не существует.
  44. func (sf *tester) postSvgDayBad1() {
  45. sf.t.Log("postSvgDayBad1")
  46. // mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgDayBad1()")
  47. // ctxMon := mon.Ctx()
  48. // module := kmodule.NewKernelModule("kCtx").Hassert("postSvgDayBad1()")
  49. // module.Log().Debug("test msg")
  50. // ctxMod := module.Ctx()
  51. // ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postSvgDayBad1()")
  52. // time.Sleep(time.Millisecond * 20)
  53. // ctxMon.Set("module_1", module, "test_module").Hassert("postSvgDayBad1()")
  54. // fiberApp := sf.serv.Fiber()
  55. fiberApp := sf.comSvgPost()
  56. req, err := http.NewRequest(http.MethodPost, "/module_svg_day/svg_day_20.svg", nil)
  57. if err != nil {
  58. sf.t.Fatalf("postSvgDayBad1(): in net request, err=%v", err)
  59. }
  60. resp, err := fiberApp.Test(req)
  61. if err != nil {
  62. sf.t.Fatalf("postSvgDayBad1(): in make POST, err=%v", err)
  63. }
  64. defer func() {
  65. _ = resp.Body.Close()
  66. }()
  67. if resp.StatusCode != http.StatusOK {
  68. sf.t.Fatalf("postSvgDayBad1(): status(%v)!=200", resp.StatusCode)
  69. }
  70. }
  71. // Получение SVG.
  72. func (sf *tester) postSvgDayGood1() {
  73. sf.t.Log("postSvgDayGood1")
  74. fiberApp := sf.comSvgPost()
  75. // mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgDayGood1()")
  76. // ctxMon := mon.Ctx()
  77. // module := kmodule.NewKernelModule("kCtx").Hassert("postSvgDayGood1()")
  78. // module.Log().Debug("test msg")
  79. // ctxMod := module.Ctx()
  80. // ctxMod.Set("demo_key", "demo value", "for demo comment").
  81. // Hassert("postSvgDayGood1()")
  82. // time.Sleep(time.Millisecond * 20)
  83. // ctxMon.Set("module_1", module, "test_module").Hassert("postSvgDayGood1()")
  84. // fiberApp := sf.serv.Fiber()
  85. req, err := http.NewRequest(http.MethodPost, "/module_svg_day/svg_day_1.svg", nil)
  86. if err != nil {
  87. sf.t.Fatalf("postSvgDayGood1(): in net request, err=%v", err)
  88. }
  89. resp, err := fiberApp.Test(req)
  90. if err != nil {
  91. sf.t.Fatalf("postSvgDayGood1(): in make POST, err=%v", err)
  92. }
  93. defer func() {
  94. _ = resp.Body.Close()
  95. }()
  96. if resp.StatusCode != http.StatusOK {
  97. sf.t.Fatalf("postSvgDayGood1(): status(%v)!=200", resp.StatusCode)
  98. }
  99. }
  100. func (sf *tester) comSvgPost() *fiber.App {
  101. sf.t.Log("comSvgPost")
  102. mon := kmonolit.GetMonolit("test_monolit").Hassert("comSvgPost()")
  103. ctxMon := mon.Ctx()
  104. module := kmodule.NewKernelModule("kCtx").Hassert("comSvgPost()")
  105. module.Log().Debug("test msg")
  106. ctxMod := module.Ctx()
  107. ctxMod.Set("demo_key", "demo value", "for demo comment").
  108. Hassert("postSvgDayGood1()")
  109. time.Sleep(time.Millisecond * 20)
  110. ctxMon.Set("module_1", module, "test_module").Hassert("comSvgPost()")
  111. fiberApp := sf.serv.Fiber()
  112. return fiberApp
  113. }
  114. // Получение SVG, модуля 20 не существует.
  115. func (sf *tester) postSvgMinBad1() {
  116. sf.t.Log("postSvgMinBad1")
  117. sf.comSvgPost()
  118. mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgMinBad1()")
  119. ctxMon := mon.Ctx()
  120. module := kmodule.NewKernelModule("kCtx").Hassert("postSvgMinBad1()")
  121. module.Log().Debug("test msg")
  122. ctxMod := module.Ctx()
  123. ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postSvgMinBad1()")
  124. time.Sleep(time.Millisecond * 20)
  125. ctxMon.Set("module_1", module, "test_module").Hassert("postSvgMinBad1()")
  126. fiberApp := sf.serv.Fiber()
  127. req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_20.svg", nil)
  128. if err != nil {
  129. sf.t.Fatalf("postSvgMinBad1(): in net request, err=%v", err)
  130. }
  131. resp, err := fiberApp.Test(req)
  132. if err != nil {
  133. sf.t.Fatalf("postSvgMinBad1(): in make POST, err=%v", err)
  134. }
  135. defer func() {
  136. _ = resp.Body.Close()
  137. }()
  138. if resp.StatusCode != http.StatusOK {
  139. sf.t.Fatalf("postSvgMinBad1(): status(%v)!=200", resp.StatusCode)
  140. }
  141. }
  142. // Получение SVG.
  143. func (sf *tester) postSvgMinGood1() {
  144. sf.t.Log("postSvgMinGood1")
  145. fiberApp := sf.comSvgPost()
  146. req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_1.svg", nil)
  147. if err != nil {
  148. sf.t.Fatalf("postSvgMinGood1(): in net request, err=%v", err)
  149. }
  150. resp, err := fiberApp.Test(req)
  151. if err != nil {
  152. sf.t.Fatalf("postSvgMinGood1(): in make POST, err=%v", err)
  153. }
  154. defer func() {
  155. _ = resp.Body.Close()
  156. }()
  157. if resp.StatusCode != http.StatusOK {
  158. sf.t.Fatalf("postSvgMinGood1(): status(%v)!=200", resp.StatusCode)
  159. }
  160. }
  161. // Получение SVG, модуля 20 не существует.
  162. func (sf *tester) postSvgSecBad1() {
  163. sf.t.Log("postSvgSecBad1")
  164. fiberApp := sf.comSvgPost()
  165. req, err := http.NewRequest(http.MethodPost, "/module_svg_sec/svg_sec_20.svg", nil)
  166. if err != nil {
  167. sf.t.Fatalf("postSvgSecBad1(): in net request, err=%v", err)
  168. }
  169. resp, err := fiberApp.Test(req)
  170. if err != nil {
  171. sf.t.Fatalf("postSvgSecBad1(): in make POST, err=%v", err)
  172. }
  173. defer func() {
  174. _ = resp.Body.Close()
  175. }()
  176. if resp.StatusCode != http.StatusOK {
  177. sf.t.Fatalf("postSvgSecBad1(): status(%v)!=200", resp.StatusCode)
  178. }
  179. }
  180. // Получение SVG.
  181. func (sf *tester) postSvgSecGood1() {
  182. sf.t.Log("postSvgSecGood1")
  183. fiberApp := sf.comSvgPost()
  184. req, err := http.NewRequest(http.MethodPost, "/module_svg_sec/svg_sec_1.svg", nil)
  185. if err != nil {
  186. sf.t.Fatalf("postSvgSecGood1(): in net request, err=%v", err)
  187. }
  188. resp, err := fiberApp.Test(req)
  189. if err != nil {
  190. sf.t.Fatalf("postSvgSecGood1(): in make POST, err=%v", err)
  191. }
  192. defer func() {
  193. _ = resp.Body.Close()
  194. }()
  195. if resp.StatusCode != http.StatusOK {
  196. sf.t.Fatalf("postSvgSecGood1(): status(%v)!=200", resp.StatusCode)
  197. }
  198. }
  199. // Модуля 20 не существует.
  200. func (sf *tester) postModuleStateBad() {
  201. sf.t.Log("postModuleStateBad")
  202. fiberApp := sf.comSvgPost()
  203. req, err := http.NewRequest(http.MethodPost, "/module_state/20", nil)
  204. if err != nil {
  205. sf.t.Fatalf("postModuleStateBad(): in net request, err=%v", err)
  206. }
  207. resp, err := fiberApp.Test(req)
  208. if err != nil {
  209. sf.t.Fatalf("postModuleStateBad(): in make POST, err=%v", err)
  210. }
  211. defer func() {
  212. _ = resp.Body.Close()
  213. }()
  214. if resp.StatusCode != http.StatusOK {
  215. sf.t.Fatalf("postModuleStateBad(): status(%v)!=200", resp.StatusCode)
  216. }
  217. }
  218. // Возвращает состояние модуля 1 (теперь добавлен).
  219. func (sf *tester) postModuleState() {
  220. sf.t.Log("postModuleState")
  221. fiberApp := sf.comSvgPost()
  222. req, err := http.NewRequest(http.MethodPost, "/module_state/1", nil)
  223. if err != nil {
  224. sf.t.Fatalf("postModuleState(): in net request, err=%v", err)
  225. }
  226. resp, err := fiberApp.Test(req)
  227. if err != nil {
  228. sf.t.Fatalf("postModuleState(): in make POST, err=%v", err)
  229. }
  230. defer func() {
  231. _ = resp.Body.Close()
  232. }()
  233. if resp.StatusCode != http.StatusOK {
  234. sf.t.Fatalf("postModuleState(): status(%v)!=200", resp.StatusCode)
  235. }
  236. }
  237. // Возвращает состояние модуля 1 (теперь добавлен).
  238. func (sf *tester) postModule1() {
  239. sf.t.Log("postModule1")
  240. mon := kmonolit.GetMonolit("test_monolit").Hassert("postModule1()")
  241. ctxMon := mon.Ctx()
  242. module := kmodule.NewKernelModule("kCtx").Hassert("postModule1()")
  243. module.Log().Debug("test msg")
  244. module.Log().Debug("test msg")
  245. ctxMod := module.Ctx()
  246. ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postModule1()")
  247. time.Sleep(time.Millisecond * 20)
  248. ctxMon.Set("module_1", module, "test_module").Hassert("postModule1()")
  249. fiberApp := sf.serv.Fiber()
  250. req, err := http.NewRequest(http.MethodPost, "/module/1", nil)
  251. if err != nil {
  252. sf.t.Fatalf("postModule1(): in net request, err=%v", err)
  253. }
  254. resp, err := fiberApp.Test(req)
  255. if err != nil {
  256. sf.t.Fatalf("postModule1(): in make POST, err=%v", err)
  257. }
  258. defer func() {
  259. _ = resp.Body.Close()
  260. }()
  261. if resp.StatusCode != http.StatusOK {
  262. sf.t.Fatalf("postModule1(): status(%v)!=200", resp.StatusCode)
  263. }
  264. }
  265. // Возвращает состояние лога модуля.
  266. func (sf *tester) postModuleLog() {
  267. sf.t.Log("postModuleLog")
  268. monCtx := sf.ctx.Get("monolit").Hassert("postModuleLog()")
  269. mon := monCtx.Val().(IKernelMonolit)
  270. log := mon.Log()
  271. log.Debug("test msg")
  272. fiberApp := sf.serv.Fiber()
  273. req, err := http.NewRequest(http.MethodPost, "/module_log/1", nil)
  274. if err != nil {
  275. sf.t.Fatalf("postModuleLog(): in net request, err=%v", err)
  276. }
  277. resp, err := fiberApp.Test(req)
  278. if err != nil {
  279. sf.t.Fatalf("postModuleLog(): in make POST, err=%v", err)
  280. }
  281. defer func() {
  282. _ = resp.Body.Close()
  283. }()
  284. if resp.StatusCode != http.StatusOK {
  285. sf.t.Fatalf("postModuleLog(): status(%v)!=200", resp.StatusCode)
  286. }
  287. }
  288. // Возвращает состояние контекста модуля.
  289. func (sf *tester) postMonolitCtx() {
  290. sf.t.Log("postMonolitCtx")
  291. fiberApp := sf.serv.Fiber()
  292. req, err := http.NewRequest(http.MethodPost, "/module_ctx/1", nil)
  293. if err != nil {
  294. sf.t.Fatalf("postMonolitCtx(): in net request, err=%v", err)
  295. }
  296. resp, err := fiberApp.Test(req)
  297. if err != nil {
  298. sf.t.Fatalf("postMonolitCtx(): in make POST, err=%v", err)
  299. }
  300. defer func() {
  301. _ = resp.Body.Close()
  302. }()
  303. if resp.StatusCode != http.StatusOK {
  304. sf.t.Fatalf("postMonolitCtx(): status(%v)!=200", resp.StatusCode)
  305. }
  306. }
  307. // Возвращает состояние модуля.
  308. func (sf *tester) postModule() {
  309. sf.t.Log("postModule")
  310. fiberApp := sf.serv.Fiber()
  311. req, err := http.NewRequest(http.MethodPost, "/module/1", nil)
  312. if err != nil {
  313. sf.t.Fatalf("postModule(): in net request, err=%v", err)
  314. }
  315. resp, err := fiberApp.Test(req)
  316. if err != nil {
  317. sf.t.Fatalf("postModule(): in make POST, err=%v", err)
  318. }
  319. defer func() {
  320. _ = resp.Body.Close()
  321. }()
  322. if resp.StatusCode != http.StatusOK {
  323. sf.t.Fatalf("postModule(): status(%v)!=200", resp.StatusCode)
  324. }
  325. }
  326. // Освобождает ресурсы.
  327. func (sf *tester) done() {
  328. sf.t.Log("done")
  329. sf.ctx.Cancel()
  330. sf.ctx.Wg().Wait()
  331. }
  332. // Создаёт новую страницу модуля.
  333. func (sf *tester) new() {
  334. sf.t.Log("new")
  335. _ = mock_env.MakeEnv()
  336. _ = os.Unsetenv("LOCAL_HTTP_URL")
  337. _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18322/")
  338. sf.ctx.Set("isLocal", true, "testing").Hassert("new()")
  339. _ = kmonolit.GetMonolit("test_monolit")
  340. sf.serv = kserv_http.GetKernelServHttp().Hassert("new()")
  341. sf.page = GetPageModule().Hassert("new()")
  342. if sf.page == nil {
  343. sf.t.Fatalf("new(): page==nil")
  344. }
  345. _ = GetPageModule()
  346. go sf.serv.Run()
  347. }