package page_monolit import ( "net/http" "os" "testing" "time" "gitp78su.ipnodns.ru/svi/kern/v4/d0" "gitp78su.ipnodns.ru/svi/kern/v4/d1/mock_env" "gitp78su.ipnodns.ru/svi/kern/v4/d2" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kern_ctx" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kmonolit" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kserv_http" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kspec" ) type tester struct { t *testing.T kCtx *d2.KernCtx serv kspec.IKernelServerHttp page *PageMonolit owner *d0.LOwner } func TestPageMonolit(t *testing.T) { owner := d0.LetOwner(1, "isol_page_core") sf := &tester{ t: t, owner: owner, kCtx: kern_ctx.GetKernCtx(), } sf.new() sf.getMonolit() sf.postMonolitState() sf.postMonolitCtx() sf.postMonolitLog() sf.done() } // Возвращает состояние лога монолита. func (sf *tester) postMonolitLog() { sf.t.Log("postMonolitCtx") mon := sf.kCtx.Get(d0.LetTxt(sf.owner, "monolit")). Hassert("postMonolitLog()"). Val().(*kmonolit.LModMonolit) log := mon.Log() log.Debug("test msg") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/monolit_log", nil) if err != nil { sf.t.Fatalf("postMonolitLog(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postMonolitLog(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postMonolitLog(): status(%v)!=200", resp.StatusCode) } } // Возвращает состояние контекста монолита. func (sf *tester) postMonolitCtx() { sf.t.Log("postMonolitCtx") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodPost, "/monolit_ctx", 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) postMonolitState() { sf.t.Log("postMonolitState") fiberApp := sf.serv.Fiber() req, err := http.NewRequest("http.MethodPost", "/monolit_state", nil) if err != nil { sf.t.Fatalf("postMonolitState(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("postMonolitState(): in make POST, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("postMonolitState(): status(%v)!=200", resp.StatusCode) } } // Возвращает главную страницу монолита. func (sf *tester) getMonolit() { sf.t.Log("getMonolit") fiberApp := sf.serv.Fiber() req, err := http.NewRequest(http.MethodGet, "/monolit", nil) if err != nil { sf.t.Fatalf("getMonolit(): in net request, err=%v", err) } resp, err := fiberApp.Test(req) if err != nil { sf.t.Fatalf("getMonolit(): in make GET, err=%v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { sf.t.Fatalf("getMonolit(): status(%v)!=200", resp.StatusCode) } } // Освобождает ресурсы. func (sf *tester) done() { sf.t.Log("done") sf.page.clickMonolit() sf.kCtx.Cancel() sf.kCtx.Wg().Wait() } // Создаёт новую страницу монолита. func (sf *tester) new() { sf.t.Log("new") _ = mock_env.MakeEnv(sf.owner) _ = os.Unsetenv("LOCAL_HTTP_URL") _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18310/") sf.kCtx.Set(d0.LetTxt(sf.owner, "isLocal"), true, "testing") for { time.Sleep(time.Millisecond * 1) if sf.kCtx.Get(d0.LetTxt(sf.owner, "isLocal")) != nil { break } } _ = kmonolit.LetModMonolit("test_monolit") sf.serv = kserv_http.GetKernelServHttp() sf.page = GetPageMonolit(sf.owner) if sf.page == nil { sf.t.Fatalf("new(): page==nil") } _ = GetPageMonolit(sf.owner) go sf.serv.Run() }