Peter Kurfer
d70ba748f5
- merge packages to get a more concise layout because plugins are no more and therefore there's not a lot to be exported - fix test logger - rework config parsing to be easier and more transparent - remove unnecessary APIs because dynamic endpoint handling is rather a won't implement
77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package mock
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"math/rand"
|
|
"net"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/docker/go-connections/nat"
|
|
"github.com/testcontainers/testcontainers-go"
|
|
"gitlab.com/inetmock/inetmock/internal/test/integration"
|
|
)
|
|
|
|
const (
|
|
charSet = "abcdedfghijklmnopqrstABCDEFGHIJKLMNOP"
|
|
)
|
|
|
|
func init() {
|
|
rand.Seed(time.Now().Unix())
|
|
}
|
|
|
|
func Benchmark_dnsHandler(b *testing.B) {
|
|
var err error
|
|
var endpoint string
|
|
if endpoint, err = setupContainer(b, "53/udp"); err != nil {
|
|
b.Errorf("setupContainer() error = %v", err)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
resolv := resolver(endpoint)
|
|
for pb.Next() {
|
|
lookupCtx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
|
_, err := resolv.LookupHost(lookupCtx, fmt.Sprintf("www.%s.com", randomString(8)))
|
|
cancel()
|
|
if err != nil {
|
|
b.Errorf("LookupHost() error = %v", err)
|
|
}
|
|
}
|
|
})
|
|
|
|
}
|
|
|
|
func randomString(length int) (result string) {
|
|
buffer := strings.Builder{}
|
|
for i := 0; i < length; i++ {
|
|
buffer.WriteByte(charSet[rand.Intn(len(charSet))])
|
|
}
|
|
return buffer.String()
|
|
}
|
|
|
|
func setupContainer(b *testing.B, port string) (httpEndpoint string, err error) {
|
|
b.Helper()
|
|
|
|
startupCtx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
|
defer cancel()
|
|
var inetMockContainer testcontainers.Container
|
|
if inetMockContainer, err = integration.SetupINetMockContainer(startupCtx, b, port); err != nil {
|
|
return
|
|
}
|
|
|
|
httpEndpoint, err = inetMockContainer.PortEndpoint(startupCtx, nat.Port(port), "")
|
|
return
|
|
}
|
|
|
|
func resolver(endpoint string) net.Resolver {
|
|
return net.Resolver{
|
|
PreferGo: true,
|
|
Dial: func(ctx context.Context, network, address string) (conn net.Conn, err error) {
|
|
dialer := net.Dialer{}
|
|
return dialer.DialContext(ctx, "udp", endpoint)
|
|
},
|
|
}
|
|
}
|