kmodule_test.go 2.2 KB

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