kmonolit_test.go 2.7 KB

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