gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/client/selector/filter_test.go (about)

     1  package selector
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gitee.com/liuxuezhan/go-micro-v1.18.0/registry"
     7  )
     8  
     9  func TestFilterEndpoint(t *testing.T) {
    10  	testData := []struct {
    11  		services []*registry.Service
    12  		endpoint string
    13  		count    int
    14  	}{
    15  		{
    16  			services: []*registry.Service{
    17  				{
    18  					Name:    "test",
    19  					Version: "1.0.0",
    20  					Endpoints: []*registry.Endpoint{
    21  						{
    22  							Name: "Foo.Bar",
    23  						},
    24  					},
    25  				},
    26  				{
    27  					Name:    "test",
    28  					Version: "1.1.0",
    29  					Endpoints: []*registry.Endpoint{
    30  						{
    31  							Name: "Baz.Bar",
    32  						},
    33  					},
    34  				},
    35  			},
    36  			endpoint: "Foo.Bar",
    37  			count:    1,
    38  		},
    39  		{
    40  			services: []*registry.Service{
    41  				{
    42  					Name:    "test",
    43  					Version: "1.0.0",
    44  					Endpoints: []*registry.Endpoint{
    45  						{
    46  							Name: "Foo.Bar",
    47  						},
    48  					},
    49  				},
    50  				{
    51  					Name:    "test",
    52  					Version: "1.1.0",
    53  					Endpoints: []*registry.Endpoint{
    54  						{
    55  							Name: "Foo.Bar",
    56  						},
    57  					},
    58  				},
    59  			},
    60  			endpoint: "Bar.Baz",
    61  			count:    0,
    62  		},
    63  	}
    64  
    65  	for _, data := range testData {
    66  		filter := FilterEndpoint(data.endpoint)
    67  		services := filter(data.services)
    68  
    69  		if len(services) != data.count {
    70  			t.Fatalf("Expected %d services, got %d", data.count, len(services))
    71  		}
    72  
    73  		for _, service := range services {
    74  			var seen bool
    75  
    76  			for _, ep := range service.Endpoints {
    77  				if ep.Name == data.endpoint {
    78  					seen = true
    79  					break
    80  				}
    81  			}
    82  
    83  			if !seen && data.count > 0 {
    84  				t.Fatalf("Expected %d services but seen is %t; result %+v", data.count, seen, services)
    85  			}
    86  		}
    87  	}
    88  }
    89  
    90  func TestFilterLabel(t *testing.T) {
    91  	testData := []struct {
    92  		services []*registry.Service
    93  		label    [2]string
    94  		count    int
    95  	}{
    96  		{
    97  			services: []*registry.Service{
    98  				{
    99  					Name:    "test",
   100  					Version: "1.0.0",
   101  					Nodes: []*registry.Node{
   102  						{
   103  							Id:      "test-1",
   104  							Address: "localhost",
   105  							Metadata: map[string]string{
   106  								"foo": "bar",
   107  							},
   108  						},
   109  					},
   110  				},
   111  				{
   112  					Name:    "test",
   113  					Version: "1.1.0",
   114  					Nodes: []*registry.Node{
   115  						{
   116  							Id:      "test-2",
   117  							Address: "localhost",
   118  							Metadata: map[string]string{
   119  								"foo": "baz",
   120  							},
   121  						},
   122  					},
   123  				},
   124  			},
   125  			label: [2]string{"foo", "bar"},
   126  			count: 1,
   127  		},
   128  		{
   129  			services: []*registry.Service{
   130  				{
   131  					Name:    "test",
   132  					Version: "1.0.0",
   133  					Nodes: []*registry.Node{
   134  						{
   135  							Id:      "test-1",
   136  							Address: "localhost",
   137  						},
   138  					},
   139  				},
   140  				{
   141  					Name:    "test",
   142  					Version: "1.1.0",
   143  					Nodes: []*registry.Node{
   144  						{
   145  							Id:      "test-2",
   146  							Address: "localhost",
   147  						},
   148  					},
   149  				},
   150  			},
   151  			label: [2]string{"foo", "bar"},
   152  			count: 0,
   153  		},
   154  	}
   155  
   156  	for _, data := range testData {
   157  		filter := FilterLabel(data.label[0], data.label[1])
   158  		services := filter(data.services)
   159  
   160  		if len(services) != data.count {
   161  			t.Fatalf("Expected %d services, got %d", data.count, len(services))
   162  		}
   163  
   164  		for _, service := range services {
   165  			var seen bool
   166  
   167  			for _, node := range service.Nodes {
   168  				if node.Metadata[data.label[0]] != data.label[1] {
   169  					t.Fatalf("Expected %s=%s but got %s=%s for service %+v node %+v",
   170  						data.label[0], data.label[1], data.label[0], node.Metadata[data.label[0]], service, node)
   171  				}
   172  				seen = true
   173  			}
   174  
   175  			if !seen {
   176  				t.Fatalf("Expected node for %s=%s but saw none; results %+v", data.label[0], data.label[1], service)
   177  			}
   178  		}
   179  	}
   180  }
   181  
   182  func TestFilterVersion(t *testing.T) {
   183  	testData := []struct {
   184  		services []*registry.Service
   185  		version  string
   186  		count    int
   187  	}{
   188  		{
   189  			services: []*registry.Service{
   190  				{
   191  					Name:    "test",
   192  					Version: "1.0.0",
   193  				},
   194  				{
   195  					Name:    "test",
   196  					Version: "1.1.0",
   197  				},
   198  			},
   199  			version: "1.0.0",
   200  			count:   1,
   201  		},
   202  		{
   203  			services: []*registry.Service{
   204  				{
   205  					Name:    "test",
   206  					Version: "1.0.0",
   207  				},
   208  				{
   209  					Name:    "test",
   210  					Version: "1.1.0",
   211  				},
   212  			},
   213  			version: "2.0.0",
   214  			count:   0,
   215  		},
   216  	}
   217  
   218  	for _, data := range testData {
   219  		filter := FilterVersion(data.version)
   220  		services := filter(data.services)
   221  
   222  		if len(services) != data.count {
   223  			t.Fatalf("Expected %d services, got %d", data.count, len(services))
   224  		}
   225  
   226  		var seen bool
   227  
   228  		for _, service := range services {
   229  			if service.Version != data.version {
   230  				t.Fatalf("Expected version %s, got %s", data.version, service.Version)
   231  			}
   232  			seen = true
   233  		}
   234  
   235  		if !seen && data.count > 0 {
   236  			t.Fatalf("Expected %d services but seen is %t; result %+v", data.count, seen, services)
   237  		}
   238  	}
   239  }