148 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package consul
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/micro/go-micro/registry"
 | 
						|
)
 | 
						|
 | 
						|
func TestEncodingEndpoints(t *testing.T) {
 | 
						|
	eps := []*registry.Endpoint{
 | 
						|
		®istry.Endpoint{
 | 
						|
			Name: "endpoint1",
 | 
						|
			Request: ®istry.Value{
 | 
						|
				Name: "request",
 | 
						|
				Type: "request",
 | 
						|
			},
 | 
						|
			Response: ®istry.Value{
 | 
						|
				Name: "response",
 | 
						|
				Type: "response",
 | 
						|
			},
 | 
						|
			Metadata: map[string]string{
 | 
						|
				"foo1": "bar1",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		®istry.Endpoint{
 | 
						|
			Name: "endpoint2",
 | 
						|
			Request: ®istry.Value{
 | 
						|
				Name: "request",
 | 
						|
				Type: "request",
 | 
						|
			},
 | 
						|
			Response: ®istry.Value{
 | 
						|
				Name: "response",
 | 
						|
				Type: "response",
 | 
						|
			},
 | 
						|
			Metadata: map[string]string{
 | 
						|
				"foo2": "bar2",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		®istry.Endpoint{
 | 
						|
			Name: "endpoint3",
 | 
						|
			Request: ®istry.Value{
 | 
						|
				Name: "request",
 | 
						|
				Type: "request",
 | 
						|
			},
 | 
						|
			Response: ®istry.Value{
 | 
						|
				Name: "response",
 | 
						|
				Type: "response",
 | 
						|
			},
 | 
						|
			Metadata: map[string]string{
 | 
						|
				"foo3": "bar3",
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	testEp := func(ep *registry.Endpoint, enc string) {
 | 
						|
		// encode endpoint
 | 
						|
		e := encodeEndpoints([]*registry.Endpoint{ep})
 | 
						|
 | 
						|
		// check there are two tags; old and new
 | 
						|
		if len(e) != 1 {
 | 
						|
			t.Fatalf("Expected 1 encoded tags, got %v", e)
 | 
						|
		}
 | 
						|
 | 
						|
		// check old encoding
 | 
						|
		var seen bool
 | 
						|
 | 
						|
		for _, en := range e {
 | 
						|
			if en == enc {
 | 
						|
				seen = true
 | 
						|
				break
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if !seen {
 | 
						|
			t.Fatalf("Expected %s but not found", enc)
 | 
						|
		}
 | 
						|
 | 
						|
		// decode
 | 
						|
		d := decodeEndpoints([]string{enc})
 | 
						|
		if len(d) == 0 {
 | 
						|
			t.Fatalf("Expected %v got %v", ep, d)
 | 
						|
		}
 | 
						|
 | 
						|
		// check name
 | 
						|
		if d[0].Name != ep.Name {
 | 
						|
			t.Fatalf("Expected ep %s got %s", ep.Name, d[0].Name)
 | 
						|
		}
 | 
						|
 | 
						|
		// check all the metadata exists
 | 
						|
		for k, v := range ep.Metadata {
 | 
						|
			if gv := d[0].Metadata[k]; gv != v {
 | 
						|
				t.Fatalf("Expected key %s val %s got val %s", k, v, gv)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	for _, ep := range eps {
 | 
						|
		// JSON encoded
 | 
						|
		jencoded, err := json.Marshal(ep)
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		// HEX encoded
 | 
						|
		hencoded := encode(jencoded)
 | 
						|
		// endpoint tag
 | 
						|
		hepTag := "e-" + hencoded
 | 
						|
		testEp(ep, hepTag)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncodingVersion(t *testing.T) {
 | 
						|
	testData := []struct {
 | 
						|
		decoded string
 | 
						|
		encoded string
 | 
						|
	}{
 | 
						|
		{"1.0.0", "v-789c32d433d03300040000ffff02ce00ee"},
 | 
						|
		{"latest", "v-789cca492c492d2e01040000ffff08cc028e"},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, data := range testData {
 | 
						|
		e := encodeVersion(data.decoded)
 | 
						|
 | 
						|
		if e[0] != data.encoded {
 | 
						|
			t.Fatalf("Expected %s got %s", data.encoded, e)
 | 
						|
		}
 | 
						|
 | 
						|
		d, ok := decodeVersion(e)
 | 
						|
		if !ok {
 | 
						|
			t.Fatalf("Unexpected %t for %s", ok, data.encoded)
 | 
						|
		}
 | 
						|
 | 
						|
		if d != data.decoded {
 | 
						|
			t.Fatalf("Expected %s got %s", data.decoded, d)
 | 
						|
		}
 | 
						|
 | 
						|
		d, ok = decodeVersion([]string{data.encoded})
 | 
						|
		if !ok {
 | 
						|
			t.Fatalf("Unexpected %t for %s", ok, data.encoded)
 | 
						|
		}
 | 
						|
 | 
						|
		if d != data.decoded {
 | 
						|
			t.Fatalf("Expected %s got %s", data.decoded, d)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |