page_module_test.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  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/alias"
  9. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  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().Hassert("TestPageMonolit()"),
  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").Hassert("comSvgPost()")
  104. ctxMon := mon.Ctx()
  105. modName := alias.NewAModuleName("kCtx")
  106. module := kmodule.NewKernelModule(modName).Hassert("comSvgPost()")
  107. module.Log().Debug("test msg")
  108. ctxMod := module.Ctx()
  109. ctxMod.Set("demo_key", "demo value", "for demo comment").
  110. Hassert("postSvgDayGood1()")
  111. time.Sleep(time.Millisecond * 20)
  112. ctxMon.Set("module_1", module, "test_module").Hassert("comSvgPost()")
  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").Hassert("postSvgMinBad1()")
  121. ctxMon := mon.Ctx()
  122. modName := alias.NewAModuleName("kCtx")
  123. module := kmodule.NewKernelModule(modName).Hassert("postSvgMinBad1()")
  124. module.Log().Debug("test msg")
  125. ctxMod := module.Ctx()
  126. ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postSvgMinBad1()")
  127. time.Sleep(time.Millisecond * 20)
  128. ctxMon.Set("module_1", module, "test_module").Hassert("postSvgMinBad1()")
  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. // Возвращает состояние модуля 1 (теперь добавлен).
  241. func (sf *tester) postModule1() {
  242. sf.t.Log("postModule1")
  243. mon := kmonolit.GetMonolit("test_monolit").Hassert("postModule1()")
  244. ctxMon := mon.Ctx()
  245. modName := alias.NewAModuleName("kCtx")
  246. module := kmodule.NewKernelModule(modName).Hassert("postModule1()")
  247. module.Log().Debug("test msg")
  248. module.Log().Debug("test msg")
  249. ctxMod := module.Ctx()
  250. ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postModule1()")
  251. time.Sleep(time.Millisecond * 20)
  252. ctxMon.Set("module_1", module, "test_module").Hassert("postModule1()")
  253. fiberApp := sf.serv.Fiber()
  254. req, err := http.NewRequest(http.MethodPost, "/module/1", nil)
  255. if err != nil {
  256. sf.t.Fatalf("postModule1(): in net request, err=%v", err)
  257. }
  258. resp, err := fiberApp.Test(req)
  259. if err != nil {
  260. sf.t.Fatalf("postModule1(): in make POST, err=%v", err)
  261. }
  262. defer func() {
  263. _ = resp.Body.Close()
  264. }()
  265. if resp.StatusCode != http.StatusOK {
  266. sf.t.Fatalf("postModule1(): status(%v)!=200", resp.StatusCode)
  267. }
  268. }
  269. // Возвращает состояние лога модуля.
  270. func (sf *tester) postModuleLog() {
  271. sf.t.Log("postModuleLog")
  272. monCtx := sf.ctx.Get("monolit").Hassert("postModuleLog()")
  273. mon := monCtx.Val().(IKernelMonolit)
  274. log := mon.Log()
  275. log.Debug("test msg")
  276. fiberApp := sf.serv.Fiber()
  277. req, err := http.NewRequest(http.MethodPost, "/module_log/1", nil)
  278. if err != nil {
  279. sf.t.Fatalf("postModuleLog(): in net request, err=%v", err)
  280. }
  281. resp, err := fiberApp.Test(req)
  282. if err != nil {
  283. sf.t.Fatalf("postModuleLog(): in make POST, err=%v", err)
  284. }
  285. defer func() {
  286. _ = resp.Body.Close()
  287. }()
  288. if resp.StatusCode != http.StatusOK {
  289. sf.t.Fatalf("postModuleLog(): status(%v)!=200", resp.StatusCode)
  290. }
  291. }
  292. // Возвращает состояние контекста модуля.
  293. func (sf *tester) postMonolitCtx() {
  294. sf.t.Log("postMonolitCtx")
  295. fiberApp := sf.serv.Fiber()
  296. req, err := http.NewRequest(http.MethodPost, "/module_ctx/1", nil)
  297. if err != nil {
  298. sf.t.Fatalf("postMonolitCtx(): in net request, err=%v", err)
  299. }
  300. resp, err := fiberApp.Test(req)
  301. if err != nil {
  302. sf.t.Fatalf("postMonolitCtx(): in make POST, err=%v", err)
  303. }
  304. defer func() {
  305. _ = resp.Body.Close()
  306. }()
  307. if resp.StatusCode != http.StatusOK {
  308. sf.t.Fatalf("postMonolitCtx(): status(%v)!=200", resp.StatusCode)
  309. }
  310. }
  311. // Возвращает состояние модуля.
  312. func (sf *tester) postModule() {
  313. sf.t.Log("postModule")
  314. fiberApp := sf.serv.Fiber()
  315. req, err := http.NewRequest(http.MethodPost, "/module/1", nil)
  316. if err != nil {
  317. sf.t.Fatalf("postModule(): in net request, err=%v", err)
  318. }
  319. resp, err := fiberApp.Test(req)
  320. if err != nil {
  321. sf.t.Fatalf("postModule(): in make POST, err=%v", err)
  322. }
  323. defer func() {
  324. _ = resp.Body.Close()
  325. }()
  326. if resp.StatusCode != http.StatusOK {
  327. sf.t.Fatalf("postModule(): status(%v)!=200", resp.StatusCode)
  328. }
  329. }
  330. // Освобождает ресурсы.
  331. func (sf *tester) done() {
  332. sf.t.Log("done")
  333. sf.ctx.Cancel()
  334. sf.ctx.Wg().Wait()
  335. }
  336. // Создаёт новую страницу модуля.
  337. func (sf *tester) new() {
  338. sf.t.Log("new")
  339. _ = mock_env.MakeEnv()
  340. _ = os.Unsetenv("LOCAL_HTTP_URL")
  341. _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18322/")
  342. sf.ctx.Set("isLocal", true, "testing").Hassert("new()")
  343. _ = kmonolit.GetMonolit("test_monolit")
  344. sf.serv = kserv_http.GetKernelServHttp().Hassert("new()")
  345. sf.page = GetPageModule().Hassert("new()")
  346. if sf.page == nil {
  347. sf.t.Fatalf("new(): page==nil")
  348. }
  349. _ = GetPageModule()
  350. go sf.serv.Run()
  351. }