page_module_test.go 12 KB

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