gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/registry/mdns_test.go (about)

     1  package registry
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestMDNS(t *testing.T) {
    10  	testData := []*Service{
    11  		{
    12  			Name:    "test1",
    13  			Version: "1.0.1",
    14  			Nodes: []*Node{
    15  				{
    16  					Id:      "test1-1",
    17  					Address: "10.0.0.1:10001",
    18  					Metadata: map[string]string{
    19  						"foo": "bar",
    20  					},
    21  				},
    22  			},
    23  		},
    24  		{
    25  			Name:    "test2",
    26  			Version: "1.0.2",
    27  			Nodes: []*Node{
    28  				{
    29  					Id:      "test2-1",
    30  					Address: "10.0.0.2:10002",
    31  					Metadata: map[string]string{
    32  						"foo2": "bar2",
    33  					},
    34  				},
    35  			},
    36  		},
    37  		{
    38  			Name:    "test3",
    39  			Version: "1.0.3",
    40  			Nodes: []*Node{
    41  				{
    42  					Id:      "test3-1",
    43  					Address: "10.0.0.3:10003",
    44  					Metadata: map[string]string{
    45  						"foo3": "bar3",
    46  					},
    47  				},
    48  			},
    49  		},
    50  	}
    51  
    52  	travis := os.Getenv("TRAVIS")
    53  
    54  	var opts []Option
    55  
    56  	if travis == "true" {
    57  		opts = append(opts, Timeout(time.Millisecond*100))
    58  	}
    59  
    60  	// new registry
    61  	r := NewRegistry(opts...)
    62  
    63  	for _, service := range testData {
    64  		// register service
    65  		if err := r.Register(service); err != nil {
    66  			t.Fatal(err)
    67  		}
    68  
    69  		// get registered service
    70  		s, err := r.GetService(service.Name)
    71  		if err != nil {
    72  			t.Fatal(err)
    73  		}
    74  
    75  		if len(s) != 1 {
    76  			t.Fatalf("Expected one result for %s got %d", service.Name, len(s))
    77  
    78  		}
    79  
    80  		if s[0].Name != service.Name {
    81  			t.Fatalf("Expected name %s got %s", service.Name, s[0].Name)
    82  		}
    83  
    84  		if s[0].Version != service.Version {
    85  			t.Fatalf("Expected version %s got %s", service.Version, s[0].Version)
    86  		}
    87  
    88  		if len(s[0].Nodes) != 1 {
    89  			t.Fatalf("Expected 1 node, got %d", len(s[0].Nodes))
    90  		}
    91  
    92  		node := s[0].Nodes[0]
    93  
    94  		if node.Id != service.Nodes[0].Id {
    95  			t.Fatalf("Expected node id %s got %s", service.Nodes[0].Id, node.Id)
    96  		}
    97  
    98  		if node.Address != service.Nodes[0].Address {
    99  			t.Fatalf("Expected node address %s got %s", service.Nodes[0].Address, node.Address)
   100  		}
   101  	}
   102  
   103  	services, err := r.ListServices()
   104  	if err != nil {
   105  		t.Fatal(err)
   106  	}
   107  
   108  	for _, service := range testData {
   109  		var seen bool
   110  		for _, s := range services {
   111  			if s.Name == service.Name {
   112  				seen = true
   113  				break
   114  			}
   115  		}
   116  		if !seen {
   117  			t.Fatalf("Expected service %s got nothing", service.Name)
   118  		}
   119  
   120  		// deregister
   121  		if err := r.Deregister(service); err != nil {
   122  			t.Fatal(err)
   123  		}
   124  
   125  		time.Sleep(time.Millisecond * 5)
   126  
   127  		// check its gone
   128  		s, _ := r.GetService(service.Name)
   129  		if len(s) > 0 {
   130  			t.Fatalf("Expected nothing got %+v", s[0])
   131  		}
   132  	}
   133  
   134  }