batchwrite_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package batchwrite
  2. import (
  3. "context"
  4. "math/rand"
  5. "testing"
  6. "go-common/app/service/main/dapper/model"
  7. )
  8. var (
  9. emptyspan = &model.Span{}
  10. )
  11. func TestRawDataBatchWriter(t *testing.T) {
  12. storage := make(map[string]map[string][]byte)
  13. writeFunc := func(ctx context.Context, traceID string, data map[string][]byte) error {
  14. if _, ok := storage[traceID]; !ok {
  15. storage[traceID] = make(map[string][]byte)
  16. }
  17. for k, v := range data {
  18. storage[traceID][k] = v
  19. }
  20. return nil
  21. }
  22. rbw := NewRawDataBatchWriter(writeFunc, 16, 2, 2, 0)
  23. spans := []*model.Span{
  24. &model.Span{
  25. TraceID: 1,
  26. SpanID: 11,
  27. },
  28. &model.Span{
  29. TraceID: 1,
  30. SpanID: 12,
  31. },
  32. &model.Span{
  33. TraceID: 2,
  34. SpanID: 21,
  35. },
  36. &model.Span{
  37. TraceID: 2,
  38. SpanID: 22,
  39. },
  40. }
  41. for _, span := range spans {
  42. if err := rbw.WriteSpan(span); err != nil {
  43. t.Error(err)
  44. }
  45. }
  46. rbw.Close()
  47. if len(storage) != 2 {
  48. t.Errorf("expect get 2 trace data, get %v", storage)
  49. }
  50. if len(storage["1"]) != 2 {
  51. t.Errorf("expect get 2 span data, get %v", storage["1"])
  52. }
  53. t.Logf("%v\n", storage)
  54. }
  55. func TestBatchWriterClosed(t *testing.T) {
  56. writeFunc2 := func(ctx context.Context, traceID string, data map[string][]byte) error {
  57. return nil
  58. }
  59. rbw := NewRawDataBatchWriter(writeFunc2, 1024*1024, 2, 2, 0)
  60. rbw.Close()
  61. if err := rbw.WriteSpan(emptyspan); err != ErrClosed {
  62. t.Errorf("expect err == ErrClosed get: %v", err)
  63. }
  64. }
  65. func randSpan() *model.Span {
  66. return &model.Span{
  67. TraceID: rand.Uint64() % 128,
  68. SpanID: rand.Uint64() % 16,
  69. }
  70. }
  71. func BenchmarkRawDataWriter(b *testing.B) {
  72. writeFunc := func(ctx context.Context, traceID string, data map[string][]byte) error {
  73. return nil
  74. }
  75. rbw := NewRawDataBatchWriter(writeFunc, 1024*1024, 2, 2, 0)
  76. for i := 0; i < b.N; i++ {
  77. if err := rbw.WriteSpan(randSpan()); err != nil {
  78. b.Error(err)
  79. }
  80. }
  81. rbw.Close()
  82. }