kmodule_test.go 2.1 KB

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