package page_module import ( "net/http" "os" "testing" "time" "github.com/gofiber/fiber/v3" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/alias" . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes" "gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http" ) type tester struct { t *testing.T ctx IKernelCtx serv IKernelServerHttp page *PageModule } func TestPageMonolit(t *testing.T) { sf := &tester{ t: t, ctx: kctx.GetKernelCtx(), } sf.new() sf.postModule() sf.postMonolitCtx() sf.postModuleLog() sf.postModule1() sf.postMonolitCtx() sf.postModuleLog() sf.postModuleState() sf.postModuleStateBad() sf.postSvgSecGood1() sf.postSvgSecBad1() sf.postSvgMinGood1() sf.postSvgMinBad1() sf.postSvgDayGood1() sf.postSvgDayBad1() sf.done() } // Получение SVG, модуля 20 не существует. func (sf *tester) postSvgDayBad1() { sf.t.Log("postSvgDayBad1") // mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgDayBad1()") // ctxMon := mon.Ctx() // module := kmodule.NewKernelModule("kCtx").Hassert("postSvgDayBad1()") // module.Log().Debug("test msg") // ctxMod := module.Ctx() // ctxMod.Set("demo_key", "demo value", "for demo comment").Hassert("postSvgDayBad1()") // time.Sleep(time.Millisecond * 20) // ctxMon.Set("module_1", module, "test_module").Hassert("postSvgDayBad1()") // fiberApp := sf.serv.Fiber() fiberApp := sf.comSvgPost() req, err := http.NewRequest(http.MethodPost, "/module_svg_day/svg_day_20.svg", nil) if err != nil { sf.t.Fatalf("postSvgDayBad1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postSvgDayBad1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postSvgDayBad1(): status(%v)!=200", resp.StatusCode) } } // Получение SVG. func (sf *tester) postSvgDayGood1() { sf.t.Log("postSvgDayGood1") fiberApp := sf.comSvgPost() // mon := kmonolit.GetMonolit("test_monolit").Hassert("postSvgDayGood1()") // ctxMon := mon.Ctx() // module := kmodule.NewKernelModule("kCtx").Hassert("postSvgDayGood1()") // module.Log().Debug("test msg") // ctxMod := module.Ctx() // ctxMod.Set("demo_key", "demo value", "for demo comment"). // Hassert("postSvgDayGood1()") // time.Sleep(time.Millisecond * 20) // ctxMon.Set("module_1", module, "test_module").Hassert("postSvgDayGood1()") // fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/module_svg_day/svg_day_1.svg", nil) if err != nil { sf.t.Fatalf("postSvgDayGood1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postSvgDayGood1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postSvgDayGood1(): status(%v)!=200", resp.StatusCode) } } func (sf *tester) comSvgPost() *fiber.App { sf.t.Log("comSvgPost") mon := kmonolit.GetMonolit("test_monolit") ctxMon := mon.Ctx() modName := alias.NewAModuleName("kCtx") kMod := kmodule.NewKernelModule(modName) kMod.Log().Debug("test msg") ctxMod := kMod.Ctx() ctxMod.Set("demo_key", "demo value", "for demo comment") time.Sleep(time.Millisecond * 20) ctxMon.Set("module_1", kMod, "test_module") fiberApp := sf.serv.Fiber() return fiberApp } // Получение SVG, модуля 20 не существует. func (sf *tester) postSvgMinBad1() { sf.t.Log("postSvgMinBad1") sf.comSvgPost() mon := kmonolit.GetMonolit("test_monolit") ctxMon := mon.Ctx() modName := alias.NewAModuleName("kCtx") kMod := kmodule.NewKernelModule(modName) kMod.Log().Debug("test msg") ctxMod := kMod.Ctx() ctxMod.Set("demo_key", "demo value", "for demo comment") time.Sleep(time.Millisecond * 20) ctxMon.Set("module_1", kMod, "test_module") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_20.svg", nil) if err != nil { sf.t.Fatalf("postSvgMinBad1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postSvgMinBad1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postSvgMinBad1(): status(%v)!=200", resp.StatusCode) } } // Получение SVG. func (sf *tester) postSvgMinGood1() { sf.t.Log("postSvgMinGood1") fiberApp := sf.comSvgPost() req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_1.svg", nil) if err != nil { sf.t.Fatalf("postSvgMinGood1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postSvgMinGood1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postSvgMinGood1(): status(%v)!=200", resp.StatusCode) } } // Получение SVG, модуля 20 не существует. func (sf *tester) postSvgSecBad1() { sf.t.Log("postSvgSecBad1") fiberApp := sf.comSvgPost() req, err := http.NewRequest(http.MethodPost, "/module_svg_sec/svg_sec_20.svg", nil) if err != nil { sf.t.Fatalf("postSvgSecBad1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postSvgSecBad1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postSvgSecBad1(): status(%v)!=200", resp.StatusCode) } } // Получение SVG. func (sf *tester) postSvgSecGood1() { sf.t.Log("postSvgSecGood1") fiberApp := sf.comSvgPost() req, err := http.NewRequest(http.MethodPost, "/module_svg_sec/svg_sec_1.svg", nil) if err != nil { sf.t.Fatalf("postSvgSecGood1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postSvgSecGood1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postSvgSecGood1(): status(%v)!=200", resp.StatusCode) } } // Модуля 20 не существует. func (sf *tester) postModuleStateBad() { sf.t.Log("postModuleStateBad") fiberApp := sf.comSvgPost() req, err := http.NewRequest(http.MethodPost, "/module_state/20", nil) if err != nil { sf.t.Fatalf("postModuleStateBad(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postModuleStateBad(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postModuleStateBad(): status(%v)!=200", resp.StatusCode) } } // Возвращает состояние модуля 1 (теперь добавлен). func (sf *tester) postModuleState() { sf.t.Log("postModuleState") fiberApp := sf.comSvgPost() req, err := http.NewRequest(http.MethodPost, "/module_state/1", nil) if err != nil { sf.t.Fatalf("postModuleState(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postModuleState(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postModuleState(): status(%v)!=200", resp.StatusCode) } } // Возвращает состояние модуля 1 (теперь добавлен). func (sf *tester) postModule1() { sf.t.Log("postModule1") mon := kmonolit.GetMonolit("test_monolit") ctxMon := mon.Ctx() modName := alias.NewAModuleName("kCtx") module := kmodule.NewKernelModule(modName) module.Log().Debug("test msg") module.Log().Debug("test msg") ctxMod := module.Ctx() ctxMod.Set("demo_key", "demo value", "for demo comment") time.Sleep(time.Millisecond * 20) ctxMon.Set("module_1", module, "test_module") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/module/1", nil) if err != nil { sf.t.Fatalf("postModule1(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postModule1(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postModule1(): status(%v)!=200", resp.StatusCode) } } // Возвращает состояние лога модуля. func (sf *tester) postModuleLog() { sf.t.Log("postModuleLog") monCtx := sf.ctx.Get("monolit").Hassert("postModuleLog()") mon := monCtx.Val().(IKernelMonolit) log := mon.Log() log.Debug("test msg") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/module_log/1", nil) if err != nil { sf.t.Fatalf("postModuleLog(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postModuleLog(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postModuleLog(): status(%v)!=200", resp.StatusCode) } } // Возвращает состояние контекста модуля. func (sf *tester) postMonolitCtx() { sf.t.Log("postMonolitCtx") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/module_ctx/1", nil) if err != nil { sf.t.Fatalf("postMonolitCtx(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postMonolitCtx(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postMonolitCtx(): status(%v)!=200", resp.StatusCode) } } // Возвращает состояние модуля. func (sf *tester) postModule() { sf.t.Log("postModule") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/module/1", nil) if err != nil { sf.t.Fatalf("postModule(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postModule(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postModule(): status(%v)!=200", resp.StatusCode) } } // Освобождает ресурсы. func (sf *tester) done() { sf.t.Log("done") sf.ctx.Cancel() sf.ctx.Wg().Wait() } // Создаёт новую страницу модуля. func (sf *tester) new() { sf.t.Log("new") _ = mock_env.MakeEnv() _ = os.Unsetenv("LOCAL_HTTP_URL") _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18322/") sf.ctx.Set("isLocal", true, "testing") _ = kmonolit.GetMonolit("test_monolit") sf.serv = kserv_http.GetKernelServHttp() sf.page = GetPageModule().Hassert("new()") if sf.page == nil { sf.t.Fatalf("new(): page==nil") } _ = GetPageModule() go sf.serv.Run() }