page_module_test.go 10 KB

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