kmodule_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package kmodule
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/d1/mock_env"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kern_ctx"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_ent"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_spec"
  11. )
  12. type tester struct {
  13. t *testing.T
  14. mod mod_spec.IKernelModule
  15. me *mock_env.MockEnv
  16. owner *d0.LOwner
  17. ownerPass *d0.OwnerPass
  18. }
  19. func TestKernelModule(t *testing.T) {
  20. owner:=d0.LetOwner(1, "test_isol_kern")
  21. sf := &tester{
  22. t: t,
  23. owner: owner,
  24. me: mock_env.MakeEnv(owner),
  25. }
  26. _ = os.Unsetenv("LOCAL_STORE_PATH")
  27. _ = os.Setenv("LOCAL_STORE_PATH", "/store/store_module")
  28. _ = os.Unsetenv("LOCAL_HTTP_URL")
  29. _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18331/")
  30. fnClear := func() {
  31. pwd := sf.me.Pwd().String() + "/store/store_module"
  32. _ = os.RemoveAll(pwd)
  33. }
  34. fnClear()
  35. defer fnClear()
  36. sf.new()
  37. sf.run()
  38. sf.isWork()
  39. sf.done()
  40. }
  41. // Работа после остановки локальной шины.
  42. func (sf *tester) done() {
  43. sf.t.Log("done")
  44. kCtx := kern_ctx.GetKernCtx()
  45. time.Sleep(time.Millisecond * 250)
  46. kCtx.Cancel()
  47. kCtx.Wg().Wait()
  48. time.Sleep(time.Millisecond * 250)
  49. }
  50. // Проверить признак работы.
  51. func (sf *tester) isWork() {
  52. sf.t.Log("isWork")
  53. defer func() {
  54. if _panic := recover(); _panic == nil {
  55. sf.t.Fatalf("isWork(): panic==nil")
  56. }
  57. }()
  58. _ = sf.mod.IsWork()
  59. }
  60. // Запускает модуль в работу.
  61. func (sf *tester) run() {
  62. sf.t.Log("run")
  63. defer func() {
  64. if _panic := recover(); _panic == nil {
  65. sf.t.Fatalf("run(): panic==nil")
  66. }
  67. }()
  68. mod := sf.mod.(*kModule)
  69. mod.timePhase.Set(5) // Настройка переменной модуля
  70. sf.mod.Run()
  71. }
  72. // Создание нового модуля ядра.
  73. func (sf *tester) new() {
  74. sf.t.Log("new")
  75. sf.newGood1()
  76. }
  77. func (sf *tester) newGood1() {
  78. sf.t.Log("newGood1")
  79. modName := mod_ent.LetModuleName("test_module")
  80. sf.mod = NewKernelModule(sf.owner, modName)
  81. if name := sf.mod.Name(); name.Get() != "test_module" {
  82. sf.t.Fatalf("newGood1(): name(%v)!='test_module'", name)
  83. }
  84. if ctx := sf.mod.Ctx(); ctx == nil {
  85. sf.t.Fatalf("newGood1(): ctx==nil")
  86. }
  87. if _log := sf.mod.Log(); _log == nil {
  88. sf.t.Fatalf("newGood1(): log==nil")
  89. }
  90. _ = sf.mod.Stat()
  91. _ = sf.mod.Live()
  92. }