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

     1  package registry
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestWatcher(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  	testFn := func(service, s *Service) {
    53  		if s == nil {
    54  			t.Fatalf("Expected one result for %s got nil", service.Name)
    55  
    56  		}
    57  
    58  		if s.Name != service.Name {
    59  			t.Fatalf("Expected name %s got %s", service.Name, s.Name)
    60  		}
    61  
    62  		if s.Version != service.Version {
    63  			t.Fatalf("Expected version %s got %s", service.Version, s.Version)
    64  		}
    65  
    66  		if len(s.Nodes) != 1 {
    67  			t.Fatalf("Expected 1 node, got %d", len(s.Nodes))
    68  		}
    69  
    70  		node := s.Nodes[0]
    71  
    72  		if node.Id != service.Nodes[0].Id {
    73  			t.Fatalf("Expected node id %s got %s", service.Nodes[0].Id, node.Id)
    74  		}
    75  
    76  		if node.Address != service.Nodes[0].Address {
    77  			t.Fatalf("Expected node address %s got %s", service.Nodes[0].Address, node.Address)
    78  		}
    79  	}
    80  
    81  	travis := os.Getenv("TRAVIS")
    82  
    83  	var opts []Option
    84  
    85  	if travis == "true" {
    86  		opts = append(opts, Timeout(time.Millisecond*100))
    87  	}
    88  
    89  	// new registry
    90  	r := NewRegistry(opts...)
    91  
    92  	w, err := r.Watch()
    93  	if err != nil {
    94  		t.Fatal(err)
    95  	}
    96  	defer w.Stop()
    97  
    98  	for _, service := range testData {
    99  		// register service
   100  		if err := r.Register(service); err != nil {
   101  			t.Fatal(err)
   102  		}
   103  
   104  		for {
   105  			res, err := w.Next()
   106  			if err != nil {
   107  				t.Fatal(err)
   108  			}
   109  
   110  			if res.Service.Name != service.Name {
   111  				continue
   112  			}
   113  
   114  			if res.Action != "create" {
   115  				t.Fatalf("Expected create event got %s for %s", res.Action, res.Service.Name)
   116  			}
   117  
   118  			testFn(service, res.Service)
   119  			break
   120  		}
   121  
   122  		// deregister
   123  		if err := r.Deregister(service); err != nil {
   124  			t.Fatal(err)
   125  		}
   126  
   127  		for {
   128  			res, err := w.Next()
   129  			if err != nil {
   130  				t.Fatal(err)
   131  			}
   132  
   133  			if res.Service.Name != service.Name {
   134  				continue
   135  			}
   136  
   137  			if res.Action != "delete" {
   138  				continue
   139  			}
   140  
   141  			testFn(service, res.Service)
   142  			break
   143  		}
   144  	}
   145  }