page_module_test.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  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/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. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
  17. )
  18. type tester struct {
  19. t *testing.T
  20. ctx kspec.IKernelCtx
  21. serv kspec.IKernelServerHttp
  22. page *PageModule
  23. }
  24. func TestPageMonolit(t *testing.T) {
  25. sf := &tester{
  26. t: t,
  27. ctx: kctx.GetKernelCtx(),
  28. }
  29. sf.new()
  30. sf.postModule()
  31. sf.postMonolitCtx()
  32. sf.postModuleLog()
  33. sf.postModule1()
  34. sf.postMonolitCtx()
  35. sf.postModuleLog()
  36. sf.postModuleState()
  37. sf.postModuleStateBad()
  38. sf.postSvgSecGood1()
  39. sf.postSvgSecBad1()
  40. sf.postSvgMinGood1()
  41. sf.postSvgMinBad1()
  42. sf.postSvgDayGood1()
  43. sf.postSvgDayBad1()
  44. sf.done()
  45. }
  46. // Получение SVG, модуля 20 не существует.
  47. func (sf *tester) postSvgDayBad1() {
  48. sf.t.Log("postSvgDayBad1")
  49. // mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgDayBad1()")
  50. // ctxMon := mon.Ctx()
  51. // module := kmodule.NewKernelModule("kCtx").Hassert("postSvgDayBad1()")
  52. // module.Log().Debug("test msg")
  53. // ctxMod := module.Ctx()
  54. // ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postSvgDayBad1()")
  55. // time.Sleep(time.Millisecond * 20)
  56. // ctxMon.Set("module_1", module, "test_module").Hassert("postSvgDayBad1()")
  57. // fiberApp := sf.serv.Fiber()
  58. fiberApp := sf.comSvgPost()
  59. req, err := http.NewRequest(http.MethodPost, "/module_svg_day/svg_day_20.svg", nil)
  60. if err != nil {
  61. sf.t.Fatalf("postSvgDayBad1(): in net request, err=%v", err)
  62. }
  63. resp, err := fiberApp.Test(req)
  64. if err != nil {
  65. sf.t.Fatalf("postSvgDayBad1(): in make POST, err=%v", err)
  66. }
  67. defer func() {
  68. _ = resp.Body.Close()
  69. }()
  70. if resp.StatusCode != http.StatusOK {
  71. sf.t.Fatalf("postSvgDayBad1(): status(%v)!=200", resp.StatusCode)
  72. }
  73. }
  74. // Получение SVG.
  75. func (sf *tester) postSvgDayGood1() {
  76. sf.t.Log("postSvgDayGood1")
  77. fiberApp := sf.comSvgPost()
  78. // mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgDayGood1()")
  79. // ctxMon := mon.Ctx()
  80. // module := kmodule.NewKernelModule("kCtx").Hassert("postSvgDayGood1()")
  81. // module.Log().Debug("test msg")
  82. // ctxMod := module.Ctx()
  83. // ctxMod.Set("demo_key", "demo value", "for demo comment").
  84. // Hassert("postSvgDayGood1()")
  85. // time.Sleep(time.Millisecond * 20)
  86. // ctxMon.Set("module_1", module, "test_module").Hassert("postSvgDayGood1()")
  87. // fiberApp := sf.serv.Fiber()
  88. req, err := http.NewRequest(http.MethodPost, "/module_svg_day/svg_day_1.svg", nil)
  89. if err != nil {
  90. sf.t.Fatalf("postSvgDayGood1(): in net request, err=%v", err)
  91. }
  92. resp, err := fiberApp.Test(req)
  93. if err != nil {
  94. sf.t.Fatalf("postSvgDayGood1(): in make POST, err=%v", err)
  95. }
  96. defer func() {
  97. _ = resp.Body.Close()
  98. }()
  99. if resp.StatusCode != http.StatusOK {
  100. sf.t.Fatalf("postSvgDayGood1(): status(%v)!=200", resp.StatusCode)
  101. }
  102. }
  103. func (sf *tester) comSvgPost() *fiber.App {
  104. sf.t.Log("comSvgPost")
  105. mon := kmonolit.GetMonolit("test_monolit")
  106. ctxMon := mon.Ctx()
  107. modName := module_name.IModuleNameFix(module_name.NewModuleName("kCtx"))
  108. kMod := kmodule.NewKernelModule(modName)
  109. kMod.Log().Debug(defs.Txt("test msg"))
  110. ctxMod := kMod.Ctx()
  111. ctxMod.Set(defs.Txt("demo_key"), "demo value", defs.Txt("for demo comment"))
  112. time.Sleep(time.Millisecond * 20)
  113. ctxMon.Set(defs.Txt("module_1"), kMod, defs.Txt("test_module"))
  114. fiberApp := sf.serv.Fiber()
  115. return fiberApp
  116. }
  117. // Получение SVG, модуля 20 не существует.
  118. func (sf *tester) postSvgMinBad1() {
  119. sf.t.Log("postSvgMinBad1")
  120. sf.comSvgPost()
  121. mon := kmonolit.GetMonolit("test_monolit")
  122. ctxMon := mon.Ctx()
  123. modName := module_name.IModuleNameFix(module_name.NewModuleName("kCtx"))
  124. kMod := kmodule.NewKernelModule(modName)
  125. kMod.Log().Debug("test msg")
  126. ctxMod := kMod.Ctx()
  127. ctxMod.Set("demo_key", "demo value", "for demo comment")
  128. time.Sleep(time.Millisecond * 20)
  129. ctxMon.Set("module_1", kMod, "test_module")
  130. fiberApp := sf.serv.Fiber()
  131. req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_20.svg", nil)
  132. if err != nil {
  133. sf.t.Fatalf("postSvgMinBad1(): in net request, err=%v", err)
  134. }
  135. resp, err := fiberApp.Test(req)
  136. if err != nil {
  137. sf.t.Fatalf("postSvgMinBad1(): in make POST, err=%v", err)
  138. }
  139. defer func() {
  140. _ = resp.Body.Close()
  141. }()
  142. if resp.StatusCode != http.StatusOK {
  143. sf.t.Fatalf("postSvgMinBad1(): status(%v)!=200", resp.StatusCode)
  144. }
  145. }
  146. // Получение SVG.
  147. func (sf *tester) postSvgMinGood1() {
  148. sf.t.Log("postSvgMinGood1")
  149. fiberApp := sf.comSvgPost()
  150. req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_1.svg", nil)
  151. if err != nil {
  152. sf.t.Fatalf("postSvgMinGood1(): in net request, err=%v", err)
  153. }
  154. resp, err := fiberApp.Test(req)
  155. if err != nil {
  156. sf.t.Fatalf("postSvgMinGood1(): in make POST, err=%v", err)
  157. }
  158. defer func() {
  159. _ = resp.Body.Close()
  160. }()
  161. if resp.StatusCode != http.StatusOK {
  162. sf.t.Fatalf("postSvgMinGood1(): status(%v)!=200", resp.StatusCode)
  163. }
  164. }
  165. // Получение SVG, модуля 20 не существует.
  166. func (sf *tester) postSvgSecBad1() {
  167. sf.t.Log("postSvgSecBad1")
  168. fiberApp := sf.comSvgPost()
  169. req, err := http.NewRequest(http.MethodPost, "/module_svg_sec/svg_sec_20.svg", nil)
  170. if err != nil {
  171. sf.t.Fatalf("postSvgSecBad1(): in net request, err=%v", err)
  172. }
  173. resp, err := fiberApp.Test(req)
  174. if err != nil {
  175. sf.t.Fatalf("postSvgSecBad1(): in make POST, err=%v", err)
  176. }
  177. defer func() {
  178. _ = resp.Body.Close()
  179. }()
  180. if resp.StatusCode != http.StatusOK {
  181. sf.t.Fatalf("postSvgSecBad1(): status(%v)!=200", resp.StatusCode)
  182. }
  183. }
  184. // Получение SVG.
  185. func (sf *tester) postSvgSecGood1() {
  186. sf.t.Log("postSvgSecGood1")
  187. fiberApp := sf.comSvgPost()
  188. req, err := http.NewRequest(http.MethodPost, "/module_svg_sec/svg_sec_1.svg", nil)
  189. if err != nil {
  190. sf.t.Fatalf("postSvgSecGood1(): in net request, err=%v", err)
  191. }
  192. resp, err := fiberApp.Test(req)
  193. if err != nil {
  194. sf.t.Fatalf("postSvgSecGood1(): in make POST, err=%v", err)
  195. }
  196. defer func() {
  197. _ = resp.Body.Close()
  198. }()
  199. if resp.StatusCode != http.StatusOK {
  200. sf.t.Fatalf("postSvgSecGood1(): status(%v)!=200", resp.StatusCode)
  201. }
  202. }
  203. // Модуля 20 не существует.
  204. func (sf *tester) postModuleStateBad() {
  205. sf.t.Log("postModuleStateBad")
  206. fiberApp := sf.comSvgPost()
  207. req, err := http.NewRequest(http.MethodPost, "/module_state/20", nil)
  208. if err != nil {
  209. sf.t.Fatalf("postModuleStateBad(): in net request, err=%v", err)
  210. }
  211. resp, err := fiberApp.Test(req)
  212. if err != nil {
  213. sf.t.Fatalf("postModuleStateBad(): in make POST, err=%v", err)
  214. }
  215. defer func() {
  216. _ = resp.Body.Close()
  217. }()
  218. if resp.StatusCode != http.StatusOK {
  219. sf.t.Fatalf("postModuleStateBad(): status(%v)!=200", resp.StatusCode)
  220. }
  221. }
  222. // Возвращает состояние модуля 1 (теперь добавлен).
  223. func (sf *tester) postModuleState() {
  224. sf.t.Log("postModuleState")
  225. fiberApp := sf.comSvgPost()
  226. req, err := http.NewRequest(http.MethodPost, "/module_state/1", nil)
  227. if err != nil {
  228. sf.t.Fatalf("postModuleState(): in net request, err=%v", err)
  229. }
  230. resp, err := fiberApp.Test(req)
  231. if err != nil {
  232. sf.t.Fatalf("postModuleState(): in make POST, err=%v", err)
  233. }
  234. defer func() {
  235. _ = resp.Body.Close()
  236. }()
  237. if resp.StatusCode != http.StatusOK {
  238. sf.t.Fatalf("postModuleState(): status(%v)!=200", resp.StatusCode)
  239. }
  240. }
  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("test msg")
  249. module.Log().Debug("test msg")
  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("test msg")
  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. }