package kmonolit import ( "os" "testing" . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias" . "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" ) const ( baseUrl = "http://127.0.0.1:18430/" pathStore = "/store/store_kmonolit" ) type tester struct { t *testing.T me *mock_env.MockEnv mon IKernelMonolit } func TestKernMono(t *testing.T) { sf := &tester{ t: t, me: mock_env.MakeEnv(), } _ = os.Unsetenv("LOCAL_STORE_PATH") _ = os.Setenv("LOCAL_STORE_PATH", pathStore) _ = os.Unsetenv("LOCAL_HTTP_URL") _ = os.Setenv("LOCAL_HTTP_URL", baseUrl) fnClear := func() { _ = os.RemoveAll(pathStore) } fnClear() defer fnClear() sf.new() sf.run() sf.add() sf.done() } func (sf *tester) done() { sf.t.Log("done") ctx := kctx.GetKernelCtx().Hassert("done()") ctx.Cancel() ctx.Wg().Wait() sf.mon.Run() sf.mon.Wait() sf.mon.Run() } // Добавление модуля в монолит. func (sf *tester) add() { sf.t.Log("add") sf.addGood1() } type mod struct { IKernelModule } func newMod(name AModuleName) IKernelModule { sf := &mod{ IKernelModule: kmodule.NewKernelModule(name).Hassert("newMod()"), } return sf } func (sf *mod) Run() {} func (sf *tester) addGood1() { sf.t.Log("addGood1") mod := newMod("test_module") sf.mon.Add(mod).Hassert("addGood1()") } func (sf *tester) run() { sf.t.Log("run") mod := newMod("test_mod1") sf.mon.Add(mod).Hassert("run()") sf.mon.Run() isWork := sf.mon.IsWork() if !isWork { sf.t.Fatalf("newGood1(): isWork==false") } } // Создаёт новый монолит. func (sf *tester) new() { sf.t.Log("new") sf.newBad1() sf.newGood1() } func (sf *tester) newGood1() { sf.t.Log("newGood1") defer func() { if _panic := recover(); _panic != nil { sf.t.Fatalf("newGood1(): panic=%v", _panic) } }() ctx := kctx.GetKernelCtx().Hassert("newGood1()") ctx.Set("isLocal", true, "type bus").Hassert("newGood1()") for { SleepMs() if ctx.Get("isLocal") != nil { break } } resMon := GetMonolit("test_monolit") sf.mon = resMon.Hassert("newGood1()") isLocal := sf.mon.IsLocal() if !isLocal { sf.t.Fatalf("newGood1(): isLocal==false") } if name := sf.mon.Name(); name != "test_monolit" { sf.t.Fatalf("newGood1(): name(%v)!='test_monolit'", name) } if log := sf.mon.Log(); log == nil { sf.t.Fatalf("newGood1(): log==nil") } if ctx := sf.mon.Ctx(); ctx == nil { sf.t.Fatalf("newGood1(): ctx==nil") } resMon = GetMonolit("") sf.mon = resMon.Hassert("newGood1()") } // Нет признака локальности. func (sf *tester) newBad1() { sf.t.Log("newBad1") res := GetMonolit("test_32") if res.IsOk() { sf.t.Fatalf("newBad1(): res.IsOk()==true") } }