123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package zeroconf
- import (
- "context"
- "log"
- "testing"
- "time"
- "github.com/pkg/errors"
- )
- var (
- mdnsName = "test--xxxxxxxxxxxx"
- mdnsService = "test--xxxx.tcp"
- mdnsDomain = "local."
- mdnsPort = 8888
- )
- func startMDNS(ctx context.Context, port int, name, service, domain string) {
- // 5353 is default mdns port
- server, err := Register(name, service, domain, port, []string{"txtv=0", "lo=1", "la=2"}, nil)
- if err != nil {
- panic(errors.Wrap(err, "while registering mdns service"))
- }
- defer server.Shutdown()
- log.Printf("Published service: %s, type: %s, domain: %s", name, service, domain)
- <-ctx.Done()
- log.Printf("Shutting down.")
- }
- func TestBasic(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- go startMDNS(ctx, mdnsPort, mdnsName, mdnsService, mdnsDomain)
- time.Sleep(time.Second)
- resolver, err := NewResolver(nil)
- if err != nil {
- t.Fatalf("Expected create resolver success, but got %v", err)
- }
- entries := make(chan *ServiceEntry)
- expectedResult := []*ServiceEntry{}
- go func(results <-chan *ServiceEntry) {
- s := <-results
- expectedResult = append(expectedResult, s)
- }(entries)
- if err := resolver.Browse(ctx, mdnsService, mdnsDomain, entries); err != nil {
- t.Fatalf("Expected browse success, but got %v", err)
- }
- <-ctx.Done()
- if len(expectedResult) != 1 {
- t.Fatalf("Expected number of service entries is 1, but got %d", len(expectedResult))
- }
- if expectedResult[0].Domain != mdnsDomain {
- t.Fatalf("Expected domain is %s, but got %s", mdnsDomain, expectedResult[0].Domain)
- }
- if expectedResult[0].Service != mdnsService {
- t.Fatalf("Expected service is %s, but got %s", mdnsService, expectedResult[0].Service)
- }
- if expectedResult[0].Instance != mdnsName {
- t.Fatalf("Expected instance is %s, but got %s", mdnsName, expectedResult[0].Instance)
- }
- if expectedResult[0].Port != mdnsPort {
- t.Fatalf("Expected port is %d, but got %d", mdnsPort, expectedResult[0].Port)
- }
- }
- func TestNoRegister(t *testing.T) {
- resolver, err := NewResolver(nil)
- if err != nil {
- t.Fatalf("Expected create resolver success, but got %v", err)
- }
- // before register, mdns resolve shuold not have any entry
- entries := make(chan *ServiceEntry)
- go func(results <-chan *ServiceEntry) {
- s := <-results
- if s != nil {
- t.Fatalf("Expected empty service entries but got %v", *s)
- }
- }(entries)
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- if err := resolver.Browse(ctx, mdnsService, mdnsDomain, entries); err != nil {
- t.Fatalf("Expected browse success, but got %v", err)
- }
- <-ctx.Done()
- cancel()
- }
|