...

Source file src/github.com/go-kit/kit/sd/etcdv3/registrar_test.go

Documentation: github.com/go-kit/kit/sd/etcdv3

     1  package etcdv3
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"testing"
     7  
     8  	"github.com/go-kit/log"
     9  )
    10  
    11  // testClient is a basic implementation of Client
    12  type testClient struct {
    13  	registerRes error // value returned when Register or Deregister is called
    14  }
    15  
    16  func (tc *testClient) GetEntries(prefix string) ([]string, error) {
    17  	return nil, nil
    18  }
    19  
    20  func (tc *testClient) WatchPrefix(prefix string, ch chan struct{}) {
    21  }
    22  
    23  func (tc *testClient) Register(s Service) error {
    24  	return tc.registerRes
    25  }
    26  
    27  func (tc *testClient) Deregister(s Service) error {
    28  	return tc.registerRes
    29  }
    30  
    31  func (tc *testClient) LeaseID() int64 {
    32  	return 0
    33  }
    34  
    35  // default service used to build registrar in our tests
    36  var testService = Service{
    37  	Key:   "testKey",
    38  	Value: "testValue",
    39  	TTL:   nil,
    40  }
    41  
    42  // NewRegistar should return a registar with a logger using the service key and value
    43  func TestNewRegistar(t *testing.T) {
    44  	c := Client(&testClient{nil})
    45  	buf := &bytes.Buffer{}
    46  	logger := log.NewLogfmtLogger(buf)
    47  	r := NewRegistrar(
    48  		c,
    49  		testService,
    50  		logger,
    51  	)
    52  
    53  	if err := r.logger.Log("msg", "message"); err != nil {
    54  		t.Fatal(err)
    55  	}
    56  	if want, have := "key=testKey value=testValue msg=message\n", buf.String(); want != have {
    57  		t.Errorf("\nwant: %shave: %s", want, have)
    58  	}
    59  }
    60  
    61  func TestRegister(t *testing.T) {
    62  	// Register log the error returned by the client or log the successful registration action
    63  	// table of test cases for method Register
    64  	var registerTestTable = []struct {
    65  		registerRes error  // value returned by the client on calls to Register
    66  		log         string // expected log by the registrar
    67  
    68  	}{
    69  		// test case: an error is returned by the client
    70  		{errors.New("regError"), "key=testKey value=testValue err=regError\n"},
    71  		// test case: registration successful
    72  		{nil, "key=testKey value=testValue action=register\n"},
    73  	}
    74  
    75  	for _, tc := range registerTestTable {
    76  		c := Client(&testClient{tc.registerRes})
    77  		buf := &bytes.Buffer{}
    78  		logger := log.NewLogfmtLogger(buf)
    79  		r := NewRegistrar(
    80  			c,
    81  			testService,
    82  			logger,
    83  		)
    84  		r.Register()
    85  		if want, have := tc.log, buf.String(); want != have {
    86  			t.Fatalf("want %v, have %v", want, have)
    87  		}
    88  	}
    89  }
    90  
    91  func TestDeregister(t *testing.T) {
    92  	// Deregister log the error returned by the client or log the successful deregistration action
    93  	// table of test cases for method Deregister
    94  	var deregisterTestTable = []struct {
    95  		deregisterRes error  // value returned by the client on calls to Deregister
    96  		log           string // expected log by the registrar
    97  	}{
    98  		// test case: an error is returned by the client
    99  		{errors.New("deregError"), "key=testKey value=testValue err=deregError\n"},
   100  		// test case: deregistration successful
   101  		{nil, "key=testKey value=testValue action=deregister\n"},
   102  	}
   103  
   104  	for _, tc := range deregisterTestTable {
   105  		c := Client(&testClient{tc.deregisterRes})
   106  		buf := &bytes.Buffer{}
   107  		logger := log.NewLogfmtLogger(buf)
   108  		r := NewRegistrar(
   109  			c,
   110  			testService,
   111  			logger,
   112  		)
   113  		r.Deregister()
   114  		if want, have := tc.log, buf.String(); want != have {
   115  			t.Fatalf("want %v, have %v", want, have)
   116  		}
   117  	}
   118  }
   119  

View as plain text