kmonolit_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package kmonolit
  2. import (
  3. "os"
  4. "testing"
  5. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  6. mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  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. )
  12. const (
  13. baseUrl = "http://127.0.0.1:18430/"
  14. pathStore = "/store/store_kmonolit"
  15. )
  16. type tester struct {
  17. t *testing.T
  18. me *mock_env.MockEnv
  19. mon mKs.IKernelMonolit
  20. }
  21. func TestKernMono(t *testing.T) {
  22. sf := &tester{
  23. t: t,
  24. me: mock_env.MakeEnv(),
  25. }
  26. _ = os.Unsetenv("LOCAL_STORE_PATH")
  27. _ = os.Setenv("LOCAL_STORE_PATH", pathStore)
  28. _ = os.Unsetenv("LOCAL_HTTP_URL")
  29. _ = os.Setenv("LOCAL_HTTP_URL", baseUrl)
  30. fnClear := func() {
  31. _ = os.RemoveAll(pathStore)
  32. }
  33. fnClear()
  34. defer fnClear()
  35. sf.new()
  36. sf.run()
  37. sf.add()
  38. sf.done()
  39. }
  40. func (sf *tester) done() {
  41. sf.t.Log("done")
  42. kCtx := kctx.GetKernelCtx()
  43. kCtx.Cancel()
  44. kCtx.Wg().Wait()
  45. sf.mon.Run()
  46. sf.mon.Wait()
  47. sf.mon.Run()
  48. }
  49. // Добавление модуля в монолит.
  50. func (sf *tester) add() {
  51. sf.t.Log("add")
  52. sf.addGood1()
  53. }
  54. type mod struct {
  55. mKs.IKernelModule
  56. }
  57. func newMod(name *mKd.ModuleName) mKs.IKernelModule {
  58. sf := &mod{
  59. IKernelModule: kmodule.NewKernelModule(name),
  60. }
  61. return sf
  62. }
  63. func (sf *mod) Run() {}
  64. func (sf *tester) addGood1() {
  65. sf.t.Log("addGood1")
  66. modName := mKd.NewModuleName("test_module")
  67. mod := newMod(modName)
  68. sf.mon.Add(mod)
  69. }
  70. func (sf *tester) run() {
  71. sf.t.Log("run")
  72. modName := mKd.NewModuleName("test_mod1")
  73. mod := newMod(modName)
  74. sf.mon.Add(mod)
  75. sf.mon.Run()
  76. isWork := sf.mon.IsWork()
  77. if !isWork {
  78. sf.t.Fatalf("newGood1(): isWork==false")
  79. }
  80. }
  81. // Создаёт новый монолит.
  82. func (sf *tester) new() {
  83. sf.t.Log("new")
  84. sf.newBad1()
  85. sf.newGood1()
  86. }
  87. func (sf *tester) newGood1() {
  88. sf.t.Log("newGood1")
  89. defer func() {
  90. if _panic := recover(); _panic != nil {
  91. sf.t.Fatalf("newGood1(): panic=%v", _panic)
  92. }
  93. }()
  94. kCtx := kctx.GetKernelCtx()
  95. kCtx.Set("isLocal", true, "type bus")
  96. for {
  97. mL0.SleepMs()
  98. if kCtx.Get("isLocal") != nil {
  99. break
  100. }
  101. }
  102. sf.mon = GetMonolit("test_monolit")
  103. isLocal := sf.mon.IsLocal()
  104. if !isLocal {
  105. sf.t.Fatalf("newGood1(): isLocal==false")
  106. }
  107. if name := sf.mon.Name(); name != "test_monolit" {
  108. sf.t.Fatalf("newGood1(): name(%v)!='test_monolit'", name)
  109. }
  110. if log := sf.mon.Log(); log == nil {
  111. sf.t.Fatalf("newGood1(): log==nil")
  112. }
  113. if ctx := sf.mon.Ctx(); ctx == nil {
  114. sf.t.Fatalf("newGood1(): ctx==nil")
  115. }
  116. sf.mon = GetMonolit("")
  117. }
  118. // Нет признака локальности.
  119. func (sf *tester) newBad1() {
  120. sf.t.Log("newBad1")
  121. _ = GetMonolit("test_32")
  122. }