page_module_test.go 11 KB

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