send_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package test2
  2. import (
  3. "context"
  4. "fmt"
  5. zmostp_go "git.swzry.com/zry/zmostp/zmostp-go"
  6. "net"
  7. "os"
  8. "sync"
  9. "testing"
  10. )
  11. type TestCase struct {
  12. Channel uint32
  13. Payload []byte
  14. }
  15. var ENC *zmostp_go.Transmitter
  16. var INCH chan *zmostp_go.Message
  17. func TestMain(m *testing.M) {
  18. addr, err := net.ResolveTCPAddr("tcp", "localhost:19810")
  19. if err != nil {
  20. panic(fmt.Errorf("failed resolving tcp address: %v", err))
  21. }
  22. conn, err := net.DialTCP("tcp", nil, addr)
  23. if err != nil {
  24. panic(fmt.Errorf("failed dialing tcp: %v", err))
  25. }
  26. ENC = zmostp_go.NewTransmitter(&zmostp_go.TransmitterConfig{
  27. Writer: conn,
  28. HumanFriendlySending: false,
  29. EnableCRC: true,
  30. })
  31. INCH = ENC.GetMessageInChannel()
  32. wg := sync.WaitGroup{}
  33. wg.Add(1)
  34. ctx, cncl := context.WithCancel(context.Background())
  35. go func() {
  36. err := ENC.Run(ctx)
  37. if err != nil {
  38. panic(err)
  39. }
  40. wg.Done()
  41. }()
  42. fmt.Println("==== Init Ok ====")
  43. exitCode := m.Run()
  44. fmt.Println("==== Test End ====")
  45. cncl()
  46. _ = conn.Close()
  47. fmt.Println("==== Waiting for exit ====")
  48. wg.Wait()
  49. os.Exit(exitCode)
  50. }
  51. func FuzzSendWithHumanFriendlySwitching(f *testing.F) {
  52. f.Log(" ==== fuzz looping test ====")
  53. testcases := []TestCase{
  54. {0, []byte("hello")},
  55. {114514, []byte("hello, gensoukyo")},
  56. {0xAA550101, []byte{0xAA, 0xA5, 0x5A, 0x01, 0x55, 0x00}},
  57. }
  58. for _, tci := range testcases {
  59. f.Add(tci.Channel, tci.Payload, true)
  60. f.Add(tci.Channel, tci.Payload, false)
  61. }
  62. f.Fuzz(func(t *testing.T, ch uint32, payload []byte, hf bool) {
  63. ENC.SetHumanFriendOutputOption(hf)
  64. INCH <- &zmostp_go.Message{
  65. Channel: ch,
  66. Payload: payload,
  67. }
  68. })
  69. }