@@ -3,7 +3,9 @@ package powerdns_recursor
33import (
44 "net"
55 "os"
6+ "sync"
67 "testing"
8+ "time"
79
810 "github.com/influxdata/telegraf/testutil"
911 "github.com/stretchr/testify/assert"
@@ -95,22 +97,6 @@ var intOverflowMetrics = "all-outqueries\t18446744073709550195\nanswers-slow\t36
9597 "x-our-latency\t 19\n x-ourtime-slow\t 632\n x-ourtime0-1\t 3060079\n x-ourtime1-2\t 3351\n x-ourtime16-32\t 197\n " +
9698 "x-ourtime2-4\t 302\n x-ourtime4-8\t 194\n x-ourtime8-16\t 24\n "
9799
98- func (s statServer ) serverSocket (l * net.UnixConn ) {
99-
100- for {
101- go func (c * net.UnixConn ) {
102- buf := make ([]byte , 1024 )
103- n , remote , _ := c .ReadFromUnix (buf )
104-
105- data := buf [:n ]
106- if string (data ) == "get-all\n " {
107- c .WriteToUnix ([]byte (metrics ), remote )
108- c .Close ()
109- }
110- }(l )
111- }
112- }
113-
114100func TestPowerdnsRecursorGeneratesMetrics (t * testing.T ) {
115101 // We create a fake server to return test data
116102 controlSocket := "/tmp/pdns5724354148158589552.controlsocket"
@@ -120,14 +106,35 @@ func TestPowerdnsRecursorGeneratesMetrics(t *testing.T) {
120106 }
121107 socket , err := net .ListenUnixgram ("unixgram" , addr )
122108 if err != nil {
123- t .Fatal ("Cannot initialize server on port " )
109+ t .Fatal ("Cannot initialize server on port" )
124110 }
125111
126- defer socket .Close ()
127- defer os .Remove (controlSocket )
112+ var wg sync.WaitGroup
113+ wg .Add (1 )
114+ go func () {
115+ defer func () {
116+ socket .Close ()
117+ os .Remove (controlSocket )
118+ wg .Done ()
119+ }()
128120
129- s := statServer {}
130- go s .serverSocket (socket )
121+ for {
122+ buf := make ([]byte , 1024 )
123+ n , remote , err := socket .ReadFromUnix (buf )
124+ if err != nil {
125+ socket .Close ()
126+ return
127+ }
128+
129+ data := buf [:n ]
130+ if string (data ) == "get-all\n " {
131+ socket .WriteToUnix ([]byte (metrics ), remote )
132+ socket .Close ()
133+ }
134+
135+ time .Sleep (100 * time .Millisecond )
136+ }
137+ }()
131138
132139 p := & PowerdnsRecursor {
133140 UnixSockets : []string {controlSocket },
@@ -139,6 +146,8 @@ func TestPowerdnsRecursorGeneratesMetrics(t *testing.T) {
139146 err = acc .GatherError (p .Gather )
140147 require .NoError (t , err )
141148
149+ wg .Wait ()
150+
142151 intMetrics := []string {"all-outqueries" , "answers-slow" , "answers0-1" , "answers1-10" ,
143152 "answers10-100" , "answers100-1000" , "auth-zone-queries" , "auth4-answers-slow" ,
144153 "auth4-answers0-1" , "auth4-answers1-10" , "auth4-answers10-100" , "auth4-answers100-1000" ,
0 commit comments