kernel_keeper_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package kernel_keeper
  2. import (
  3. "context"
  4. "os"
  5. "testing"
  6. "time"
  7. "gitp78su.ipnodns.ru/svi/kern/v2/krn/kctx/kwg"
  8. . "gitp78su.ipnodns.ru/svi/kern/v2/krn/ktypes"
  9. )
  10. type tester struct {
  11. t *testing.T
  12. ctx context.Context
  13. fnCancel func()
  14. wg IKernelWg
  15. }
  16. func TestKernelKeeper(t *testing.T) {
  17. ctxBg := context.Background()
  18. ctx, fnCancel := context.WithCancel(ctxBg)
  19. wg := kwg.GetKernelWg(ctx)
  20. defer fnCancel()
  21. sf := &tester{
  22. t: t,
  23. ctx: ctx,
  24. fnCancel: fnCancel,
  25. wg: wg,
  26. }
  27. sf.get()
  28. sf.get2()
  29. sf.done()
  30. }
  31. // Отмена контекста приложения
  32. func (sf *tester) done() {
  33. sf.t.Log("done")
  34. sf.fnCancel()
  35. time.Sleep(time.Millisecond * 10)
  36. chSys := make(chan os.Signal, 1)
  37. kernKeep.run(chSys)
  38. }
  39. type sysSig struct {
  40. }
  41. func (sf *sysSig) String() string {
  42. return "test_sig"
  43. }
  44. func (sf *sysSig) Signal() {
  45. }
  46. func (sf *tester) get2() {
  47. sf.t.Log("get2")
  48. chSys := make(chan os.Signal, 2)
  49. sig := &sysSig{}
  50. chSys <- sig
  51. go kernKeep.run(chSys)
  52. sf.fnCancel()
  53. sf.wg.Wait()
  54. }
  55. // Получает сторож ядра
  56. func (sf *tester) get() {
  57. sf.t.Log("get")
  58. keep := GetKernelKeeper(sf.ctx, sf.fnCancel, sf.wg)
  59. if keep == nil {
  60. sf.t.Fatalf("get(): IKernelKeeper==nil")
  61. }
  62. _ = GetKernelKeeper(sf.ctx, sf.fnCancel, sf.wg)
  63. if log := keep.Log(); log == nil {
  64. sf.t.Fatalf("get(): log==nil")
  65. }
  66. close(keep.chSys_)
  67. time.Sleep(time.Millisecond * 10)
  68. }