page_module_test.go 11 KB

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