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