kernel_keeper_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package kernel_keeper
  2. import (
  3. "context"
  4. "os"
  5. "testing"
  6. "time"
  7. "wartank/pkg/kernel/kernel_ctx/kernel_wg"
  8. . "wartank/pkg/kernel/kernel_types"
  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 := kernel_wg.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. }
  30. type sysSig struct {
  31. }
  32. func (sf *sysSig) String() string {
  33. return "test_sig"
  34. }
  35. func (sf *sysSig) Signal() {
  36. }
  37. func (sf *tester) get2() {
  38. sf.t.Log("get2")
  39. chSys := make(chan os.Signal, 2)
  40. sig := &sysSig{}
  41. chSys <- sig
  42. go kernKeep.run(chSys)
  43. sf.fnCancel()
  44. sf.wg.Wait()
  45. }
  46. // Получает сторож ядра
  47. func (sf *tester) get() {
  48. sf.t.Log("get")
  49. keep := GetKernelKeeper(sf.ctx, sf.fnCancel, sf.wg)
  50. if keep == nil {
  51. sf.t.Fatalf("get(): IKernelKeeper==nil")
  52. }
  53. _ = GetKernelKeeper(sf.ctx, sf.fnCancel, sf.wg)
  54. close(keep.chSys_)
  55. time.Sleep(time.Millisecond * 10)
  56. }