kmonolit_test.go 2.9 KB

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