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  }