@cryptotaxi247 / kubo / commits / 8e2016274

Skip errors due to fuse missing on OSX

Matt Joiner committed Mar 27, 2019 at 13:37 UTC 8e2016274fa0b1869f097a193a2c130c2ec2c04d
4 files changed +33 -9
fuse/ipns/ipns_test.go
+7 -1
@@ -12,6 +12,8 @@ import (
12 "sync"
13 "testing"
14
15 + "bazil.org/fuse"
16 +
17 core "github.com/ipfs/go-ipfs/core"
18
19 fstest "bazil.org/fuse/fs/fstestutil"
@@ -106,6 +108,7 @@ func (m *mountWrap) Close() error {
108 }
109
110 func setupIpnsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *mountWrap) {
111 + t.Helper()
112 maybeSkipFuseTests(t)
113
114 var err error
@@ -126,8 +129,11 @@ func setupIpnsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *mountWra
129 t.Fatal(err)
130 }
131 mnt, err := fstest.MountedT(t, fs, nil)
132 + if err == fuse.ErrOSXFUSENotFound {
133 + t.Skip(err)
134 + }
135 if err != nil {
130 - t.Fatal(err)
136 + t.Fatalf("error mounting at temporary directory: %v", err)
137 }
138
139 return node, &mountWrap{
fuse/node/mount_darwin.go
+13 -6
@@ -5,6 +5,7 @@ package node
5 import (
6 "bytes"
7 "fmt"
8 + "os"
9 "os/exec"
10 "runtime"
11 "strings"
@@ -22,10 +23,10 @@ func init() {
23
24 // dontCheckOSXFUSEConfigKey is a key used to let the user tell us to
25 // skip fuse checks.
25 -var dontCheckOSXFUSEConfigKey = "DontCheckOSXFUSE"
26 +const dontCheckOSXFUSEConfigKey = "DontCheckOSXFUSE"
27
28 // fuseVersionPkg is the go pkg url for fuse-version
28 -var fuseVersionPkg = "github.com/jbenet/go-fuse-version/fuse-version"
29 +const fuseVersionPkg = "github.com/jbenet/go-fuse-version/fuse-version"
30
31 // errStrFuseRequired is returned when we're sure the user does not have fuse.
32 var errStrFuseRequired = `OSXFUSE not found.
@@ -58,7 +59,12 @@ For more help, see:
59 https://github.com/ipfs/go-ipfs/issues/177
60 `
61
61 -var errStrNeedFuseVersion = `unable to check fuse version.
62 +type errNeedFuseVersion struct {
63 + cause string
64 +}
65 +
66 +func (me errNeedFuseVersion) Error() string {
67 + return fmt.Sprintf(`unable to check fuse version.
68
69 Dear User,
70
@@ -79,7 +85,8 @@ version you have by running:
85 [1]: https://github.com/ipfs/go-ipfs/issues/177
86 [2]: https://github.com/ipfs/go-ipfs/pull/533
87 [3]: %s
82 -`
88 +`, fuseVersionPkg, dontCheckOSXFUSEConfigKey, me.cause)
89 +}
90
91 var errStrFailedToRunFuseVersion = `unable to check fuse version.
92
@@ -211,13 +218,13 @@ func ensureFuseVersionIsInstalled() error {
218
219 log.Debug("fuse-version: failed to install.")
220 s := err.Error() + "\n" + cmdoutstr
214 - return fmt.Errorf(errStrNeedFuseVersion, fuseVersionPkg, dontCheckOSXFUSEConfigKey, s)
221 + return errNeedFuseVersion{s}
222 }
223
224 // ok, try again...
225 if _, err := exec.LookPath("fuse-version"); err != nil {
226 log.Debug("fuse-version: failed to install?")
220 - return fmt.Errorf(errStrNeedFuseVersion, fuseVersionPkg, dontCheckOSXFUSEConfigKey, err)
227 + return errNeedFuseVersion{err.Error()}
228 }
229
230 log.Debug("fuse-version: install success")
fuse/node/mount_test.go
+6 -1
@@ -8,6 +8,8 @@ import (
8 "testing"
9 "time"
10
11 + "bazil.org/fuse"
12 +
13 "context"
14
15 core "github.com/ipfs/go-ipfs/core"
@@ -61,8 +63,11 @@ func TestExternalUnmount(t *testing.T) {
63 mkdir(t, ipnsDir)
64
65 err = Mount(node, ipfsDir, ipnsDir)
66 + if _, ok := err.(errNeedFuseVersion); ok || err == fuse.ErrOSXFUSENotFound {
67 + t.Skip(err)
68 + }
69 if err != nil {
65 - t.Fatal(err)
70 + t.Fatalf("error mounting: %v", err)
71 }
72
73 // Run shell command to externally unmount the directory
fuse/readonly/ipfs_test.go
+7 -1
@@ -15,6 +15,8 @@ import (
15 "sync"
16 "testing"
17
18 + "bazil.org/fuse"
19 +
20 core "github.com/ipfs/go-ipfs/core"
21 coreapi "github.com/ipfs/go-ipfs/core/coreapi"
22 coremock "github.com/ipfs/go-ipfs/core/mock"
@@ -50,6 +52,7 @@ func randObj(t *testing.T, nd *core.IpfsNode, size int64) (ipld.Node, []byte) {
52 }
53
54 func setupIpfsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *fstest.Mount) {
55 + t.Helper()
56 maybeSkipFuseTests(t)
57
58 var err error
@@ -62,8 +65,11 @@ func setupIpfsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *fstest.M
65
66 fs := NewFileSystem(node)
67 mnt, err := fstest.MountedT(t, fs, nil)
68 + if err == fuse.ErrOSXFUSENotFound {
69 + t.Skip(err)
70 + }
71 if err != nil {
66 - t.Fatal(err)
72 + t.Fatalf("error mounting temporary directory: %v", err)
73 }
74
75 return node, mnt