Add test for two parallel queries
This commit is contained in:
1 parent
5b32fa58e6
commit
17d192caee
1 file changed
+41
@@ -5,6 +5,7 @@ import (
|
||||
"log"
|
||||
"net"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -127,3 +128,43 @@ func TestSimpleQuery(t *testing.T) {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestParallelQuery(t *testing.T) {
|
||||
log.Println("TestParallelQuery starting")
|
||||
mdnsClient, server, _ := setup(t)
|
||||
defer mdnsClient.Shutdown()
|
||||
defer server.Shutdown()
|
||||
|
||||
var context1 testContext
|
||||
var context2 testContext
|
||||
channel1 := make(chan *ResponseA, 4)
|
||||
channel2 := make(chan *ResponseA, 4)
|
||||
|
||||
go mdnsClient.SendQuery(success_test_name, dns.TypeA, channel1)
|
||||
go mdnsClient.SendQuery(success_test_name, dns.TypeA, channel2)
|
||||
timeout := time.After(2 * time.Second)
|
||||
outerloop:
|
||||
for channel1 != nil || channel2 != nil {
|
||||
select {
|
||||
case resp, ok := <-channel1:
|
||||
if !ok {
|
||||
channel1 = nil
|
||||
continue
|
||||
}
|
||||
context1.checkResponse(t, resp)
|
||||
case resp, ok := <-channel2:
|
||||
if !ok {
|
||||
channel2 = nil
|
||||
continue
|
||||
}
|
||||
context2.checkResponse(t, resp)
|
||||
case <-timeout:
|
||||
break outerloop
|
||||
}
|
||||
}
|
||||
|
||||
if !context1.received_addr.Equal(test_addr) || !context2.received_addr.Equal(test_addr) || context1.received_count != 1 || context2.received_count != 1 {
|
||||
t.Log("Unexpected result for", success_test_name, context1.received_addr, context2.received_addr, context1.received_count, context2.received_count)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user