kmonolit_test.go 3.0 KB

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