page_module_test.go 11 KB

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