Bladeren bron

Fix detected race

tags/v2.0.0-rc1
9seconds 5 jaren geleden
bovenliggende
commit
6219f4bd90
1 gewijzigde bestanden met toevoegingen van 20 en 13 verwijderingen
  1. 20
    13
      stats/statsd_test.go

+ 20
- 13
stats/statsd_test.go Bestand weergeven

4
 	"bytes"
4
 	"bytes"
5
 	"net"
5
 	"net"
6
 	"strings"
6
 	"strings"
7
+	"sync"
7
 	"testing"
8
 	"testing"
8
 	"time"
9
 	"time"
9
 
10
 
18
 const statsdSleepTime = 3 * statsd.DefaultFlushInterval
19
 const statsdSleepTime = 3 * statsd.DefaultFlushInterval
19
 
20
 
20
 type statsdFakeServer struct {
21
 type statsdFakeServer struct {
21
-	conn *net.UDPConn
22
-	buf  *bytes.Buffer
22
+	conn  *net.UDPConn
23
+	buf   *bytes.Buffer
24
+	mutex sync.Mutex
23
 }
25
 }
24
 
26
 
25
-func (s statsdFakeServer) Addr() string {
27
+func (s *statsdFakeServer) Addr() string {
26
 	return s.conn.LocalAddr().String()
28
 	return s.conn.LocalAddr().String()
27
 }
29
 }
28
 
30
 
29
-func (s statsdFakeServer) Close() error {
31
+func (s *statsdFakeServer) Close() error {
30
 	if s.conn != nil {
32
 	if s.conn != nil {
31
 		return s.conn.Close()
33
 		return s.conn.Close()
32
 	}
34
 	}
34
 	return nil
36
 	return nil
35
 }
37
 }
36
 
38
 
37
-func (s statsdFakeServer) String() string {
39
+func (s *statsdFakeServer) String() string {
40
+	s.mutex.Lock()
41
+	defer s.mutex.Unlock()
42
+
38
 	return strings.TrimSpace(s.buf.String())
43
 	return strings.TrimSpace(s.buf.String())
39
 }
44
 }
40
 
45
 
41
-func statsdNewFakeServer() statsdFakeServer {
46
+func statsdNewFakeServer() *statsdFakeServer {
42
 	conn, err := net.ListenUDP("udp", &net.UDPAddr{
47
 	conn, err := net.ListenUDP("udp", &net.UDPAddr{
43
 		IP:   net.ParseIP("127.0.0.1"),
48
 		IP:   net.ParseIP("127.0.0.1"),
44
 		Port: 0,
49
 		Port: 0,
47
 		panic(err)
52
 		panic(err)
48
 	}
53
 	}
49
 
54
 
50
-	buf := &bytes.Buffer{}
55
+	rv := &statsdFakeServer{
56
+		conn: conn,
57
+		buf:  &bytes.Buffer{},
58
+	}
51
 
59
 
52
 	go func() {
60
 	go func() {
53
 		currentBuffer := make([]byte, 4096)
61
 		currentBuffer := make([]byte, 4096)
55
 		for {
63
 		for {
56
 			n, _, err := conn.ReadFromUDP(currentBuffer)
64
 			n, _, err := conn.ReadFromUDP(currentBuffer)
57
 			if n > 0 {
65
 			if n > 0 {
58
-				buf.Write(currentBuffer[:n])
66
+				rv.mutex.Lock()
67
+				rv.buf.Write(currentBuffer[:n])
68
+				rv.mutex.Unlock()
59
 			}
69
 			}
60
 
70
 
61
 			if err != nil {
71
 			if err != nil {
64
 		}
74
 		}
65
 	}()
75
 	}()
66
 
76
 
67
-	return statsdFakeServer{
68
-		conn: conn,
69
-		buf:  buf,
70
-	}
77
+	return rv
71
 }
78
 }
72
 
79
 
73
 type StatsdTestSuite struct {
80
 type StatsdTestSuite struct {
74
 	suite.Suite
81
 	suite.Suite
75
 
82
 
76
-	statsdServer statsdFakeServer
83
+	statsdServer *statsdFakeServer
77
 	factory      stats.StatsdFactory
84
 	factory      stats.StatsdFactory
78
 	statsd       events.Observer
85
 	statsd       events.Observer
79
 }
86
 }

Laden…
Annuleren
Opslaan