github.com/lingyao2333/mo-zero@v1.4.1/zrpc/resolver/internal/kube/targetparser_test.go (about)

     1  package kube
     2  
     3  import (
     4  	"net/url"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"google.golang.org/grpc/resolver"
     9  )
    10  
    11  func TestParseTarget(t *testing.T) {
    12  	tests := []struct {
    13  		name   string
    14  		input  string
    15  		expect Service
    16  		hasErr bool
    17  	}{
    18  		{
    19  			name:  "normal case",
    20  			input: "k8s://ns1/my-svc:8080",
    21  			expect: Service{
    22  				Namespace: "ns1",
    23  				Name:      "my-svc",
    24  				Port:      8080,
    25  			},
    26  		},
    27  		{
    28  			name:  "normal case",
    29  			input: "k8s:///my-svc:8080",
    30  			expect: Service{
    31  				Namespace: defaultNamespace,
    32  				Name:      "my-svc",
    33  				Port:      8080,
    34  			},
    35  		},
    36  		{
    37  			name:   "no port",
    38  			input:  "k8s://ns1/my-svc:",
    39  			hasErr: true,
    40  		},
    41  		{
    42  			name:   "no port, no colon",
    43  			input:  "k8s://ns1/my-svc",
    44  			hasErr: true,
    45  		},
    46  		{
    47  			name:   "bad port",
    48  			input:  "k8s://ns1/my-svc:800a",
    49  			hasErr: true,
    50  		},
    51  	}
    52  
    53  	for _, test := range tests {
    54  		t.Run(test.name, func(t *testing.T) {
    55  			uri, err := url.Parse(test.input)
    56  			assert.Nil(t, err)
    57  			svc, err := ParseTarget(resolver.Target{URL: *uri})
    58  			if test.hasErr {
    59  				assert.NotNil(t, err)
    60  			} else {
    61  				assert.Nil(t, err)
    62  				assert.Equal(t, test.expect, svc)
    63  			}
    64  		})
    65  	}
    66  }