// NewFromAddress constructs a new APIClient for the server at pachAddr. func NewFromAddress(pachAddr string) (*APIClient, error) { clientConn, err := grpc.Dial(pachAddr, grpc.WithInsecure()) if err != nil { return nil, err } return &APIClient{ pfs.NewAPIClient(clientConn), pps.NewAPIClient(clientConn), pfs.NewBlockAPIClient(clientConn), }, nil }
func (a *apiServer) getPfsClient() (pfsclient.APIClient, error) { if a.pfsAPIClient == nil { var onceErr error a.pfsClientOnce.Do(func() { clientConn, err := grpc.Dial(a.address, grpc.WithInsecure()) if err != nil { onceErr = err } a.pfsAPIClient = pfsclient.NewAPIClient(clientConn) }) if onceErr != nil { return nil, onceErr } } return a.pfsAPIClient, nil }
func testFuse( t *testing.T, test func(client client.APIClient, mountpoint string), ) { // don't leave goroutines running var wg sync.WaitGroup defer wg.Wait() tmp, err := ioutil.TempDir("", "pachyderm-test-") require.NoError(t, err) defer func() { _ = os.RemoveAll(tmp) }() // closed on successful termination quit := make(chan struct{}) defer close(quit) listener, err := net.Listen("tcp", "localhost:0") require.NoError(t, err) defer func() { _ = listener.Close() }() // TODO try to share more of this setup code with various main // functions localAddress := listener.Addr().String() srv := grpc.NewServer() const ( numShards = 1 ) sharder := shard.NewLocalSharder([]string{localAddress}, numShards) hasher := pfsserver.NewHasher(numShards, 1) router := shard.NewRouter( sharder, grpcutil.NewDialer( grpc.WithInsecure(), ), localAddress, ) blockDir := filepath.Join(tmp, "blocks") blockServer, err := server.NewLocalBlockAPIServer(blockDir) require.NoError(t, err) pfsclient.RegisterBlockAPIServer(srv, blockServer) driver, err := drive.NewDriver(localAddress) require.NoError(t, err) apiServer := server.NewAPIServer( hasher, router, ) pfsclient.RegisterAPIServer(srv, apiServer) internalAPIServer := server.NewInternalAPIServer( hasher, router, driver, ) pfsclient.RegisterInternalAPIServer(srv, internalAPIServer) wg.Add(1) go func() { defer wg.Done() if err := srv.Serve(listener); err != nil { select { case <-quit: // orderly shutdown return default: t.Errorf("grpc serve: %v", err) } } }() clientConn, err := grpc.Dial(localAddress, grpc.WithInsecure()) require.NoError(t, err) apiClient := pfsclient.NewAPIClient(clientConn) mounter := fuse.NewMounter(localAddress, apiClient) mountpoint := filepath.Join(tmp, "mnt") require.NoError(t, os.Mkdir(mountpoint, 0700)) ready := make(chan bool) wg.Add(1) go func() { defer wg.Done() require.NoError(t, mounter.MountAndCreate(mountpoint, nil, nil, ready, true)) }() <-ready defer func() { _ = mounter.Unmount(mountpoint) }() test(client.APIClient{PfsAPIClient: apiClient}, mountpoint) }