github.com/pachyderm/pachyderm@v1.13.4/src/client/pkg/discovery/discovery_test.go (about) 1 package discovery 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/pachyderm/pachyderm/src/client/pkg/errors" 9 "github.com/pachyderm/pachyderm/src/client/pkg/require" 10 ) 11 12 func TestEtcdClient(t *testing.T) { 13 if os.Getenv("ETCD_PORT_2379_TCP_ADDR") == "" { 14 t.Skip("skipping test; $ETCD_PORT_2379_TCP_ADDR not set") 15 } 16 17 t.Parallel() 18 client, err := getEtcdClient() 19 require.NoError(t, err) 20 runTest(t, client) 21 } 22 23 func TestEtcdWatch(t *testing.T) { 24 if os.Getenv("ETCD_PORT_2379_TCP_ADDR") == "" { 25 t.Skip("skipping test; $ETCD_PORT_2379_TCP_ADDR not set") 26 } 27 28 t.Parallel() 29 client, err := getEtcdClient() 30 require.NoError(t, err) 31 runWatchTest(t, client) 32 } 33 34 func runTest(t *testing.T, client Client) { 35 err := client.Set("foo", "one", 0) 36 require.NoError(t, err) 37 value, err := client.Get("foo") 38 require.NoError(t, err) 39 require.Equal(t, "one", value) 40 41 err = client.Set("a/b/foo", "one", 0) 42 require.NoError(t, err) 43 err = client.Set("a/b/bar", "two", 0) 44 require.NoError(t, err) 45 values, err := client.GetAll("a/b") 46 require.NoError(t, err) 47 require.Equal(t, map[string]string{"a/b/foo": "one", "a/b/bar": "two"}, values) 48 49 require.NoError(t, client.Close()) 50 } 51 52 func runWatchTest(t *testing.T, client Client) { 53 cancel := make(chan bool) 54 err := client.WatchAll( 55 "watchAll/foo", 56 cancel, 57 func(value map[string]string) error { 58 if value == nil { 59 return client.Set("watchAll/foo/bar", "quux", 0) 60 } 61 require.Equal(t, map[string]string{"watchAll/foo/bar": "quux"}, value) 62 close(cancel) 63 return nil 64 }, 65 ) 66 require.True(t, errors.Is(err, ErrCancelled)) 67 } 68 69 func getEtcdClient() (Client, error) { 70 etcdAddress, err := getEtcdAddress() 71 if err != nil { 72 return nil, err 73 } 74 return NewEtcdClient(etcdAddress), nil 75 } 76 77 func getEtcdAddress() (string, error) { 78 etcdAddr := os.Getenv("ETCD_PORT_2379_TCP_ADDR") 79 if etcdAddr == "" { 80 return "", errors.New("ETCD_PORT_2379_TCP_ADDR not set") 81 } 82 return fmt.Sprintf("http://%s:2379", etcdAddr), nil 83 }