package statsd

import (
	"bytes"
	"testing"
	"time"
)

func BenchmarkSenderSmall(b *testing.B) {
	l, err := newUDPListener("127.0.0.1:0")
	if err != nil {
		b.Fatal(err)
	}
	defer l.Close()
	s, err := NewSimpleSender(l.LocalAddr().String())
	if err != nil {
		b.Fatal(err)
	}
	defer s.Close()

	data := []byte("test.gauge:1|g\n")
	b.ResetTimer()

	b.RunParallel(func(pb *testing.PB) {
		for pb.Next() {
			//i := 0; i < b.N; i++ {
			s.Send(data)
		}
	})
}

func BenchmarkSenderLarge(b *testing.B) {
	l, err := newUDPListener("127.0.0.1:0")
	if err != nil {
		b.Fatal(err)
	}
	defer l.Close()
	s, err := NewSimpleSender(l.LocalAddr().String())
	if err != nil {
		b.Fatal(err)
	}
	defer s.Close()

	data := bytes.Repeat([]byte("test.gauge:1|g\n"), 50)
	b.ResetTimer()

	b.RunParallel(func(pb *testing.PB) {
		for pb.Next() {
			//i := 0; i < b.N; i++ {
			s.Send(data)
		}
	})
}

func BenchmarkBufferedSenderSmall(b *testing.B) {
	l, err := newUDPListener("127.0.0.1:0")
	if err != nil {
		b.Fatal(err)
	}
	defer l.Close()
	s, err := NewBufferedSender(l.LocalAddr().String(), 300*time.Millisecond, 1432)
	if err != nil {
		b.Fatal(err)
	}
	defer s.Close()

	data := []byte("test.gauge:1|g\n")
	b.ResetTimer()

	b.RunParallel(func(pb *testing.PB) {
		for pb.Next() {
			//i := 0; i < b.N; i++ {
			s.Send(data)
		}
	})
}
func BenchmarkBufferedSenderLarge(b *testing.B) {
	l, err := newUDPListener("127.0.0.1:0")
	if err != nil {
		b.Fatal(err)
	}
	defer l.Close()
	s, err := NewBufferedSender(l.LocalAddr().String(), 300*time.Millisecond, 1432)
	if err != nil {
		b.Fatal(err)
	}
	defer s.Close()

	data := bytes.Repeat([]byte("test.gauge:1|g\n"), 50)
	b.ResetTimer()

	b.RunParallel(func(pb *testing.PB) {
		for pb.Next() {
			//i := 0; i < b.N; i++ {
			s.Send(data)
		}
	})
}
