kmonolit_test.go 2.2 KB

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