master
go 156 lines 3.21 KB
Raw
1 package migrations
2
3 import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/ipfs/kubo/config"
9 )
10
11 func TestRepoDir(t *testing.T) {
12 fakeHome := t.TempDir()
13 t.Setenv("HOME", fakeHome)
14 // On Windows, os.UserHomeDir() uses USERPROFILE, not HOME
15 t.Setenv("USERPROFILE", fakeHome)
16 fakeIpfs := filepath.Join(fakeHome, ".ipfs")
17 t.Setenv(config.EnvDir, fakeIpfs)
18
19 t.Run("testIpfsDir", func(t *testing.T) {
20 testIpfsDir(t, fakeIpfs)
21 })
22 t.Run("testCheckIpfsDir", func(t *testing.T) {
23 testCheckIpfsDir(t, fakeIpfs)
24 })
25 t.Run("testRepoVersion", func(t *testing.T) {
26 testRepoVersion(t, fakeIpfs)
27 })
28 }
29
30 func testIpfsDir(t *testing.T, fakeIpfs string) {
31 _, err := CheckIpfsDir("")
32 if err == nil {
33 t.Fatal("expected error when no .ipfs directory to find")
34 }
35
36 err = os.Mkdir(fakeIpfs, os.ModePerm)
37 if err != nil {
38 panic(err)
39 }
40
41 dir, err := IpfsDir("")
42 if err != nil {
43 t.Fatal(err)
44 }
45 if dir != fakeIpfs {
46 t.Fatalf("wrong ipfs directory: got %s, expected %s", dir, fakeIpfs)
47 }
48
49 t.Setenv(config.EnvDir, "~/.ipfs")
50 dir, err = IpfsDir("")
51 if err != nil {
52 t.Fatal(err)
53 }
54 if dir != fakeIpfs {
55 t.Fatalf("wrong ipfs directory: got %s, expected %s", dir, fakeIpfs)
56 }
57
58 _, err = IpfsDir("~somesuer/foo")
59 if err == nil {
60 t.Fatal("expected error with user-specific home dir")
61 }
62
63 t.Setenv(config.EnvDir, "~somesuer/foo")
64 _, err = IpfsDir("~somesuer/foo")
65 if err == nil {
66 t.Fatal("expected error with user-specific home dir")
67 }
68 err = os.Unsetenv(config.EnvDir)
69 if err != nil {
70 panic(err)
71 }
72
73 dir, err = IpfsDir("~/.ipfs")
74 if err != nil {
75 t.Fatal(err)
76 }
77 if dir != fakeIpfs {
78 t.Fatalf("wrong ipfs directory: got %s, expected %s", dir, fakeIpfs)
79 }
80
81 _, err = IpfsDir("")
82 if err != nil {
83 t.Fatal(err)
84 }
85 }
86
87 func testCheckIpfsDir(t *testing.T, fakeIpfs string) {
88 _, err := CheckIpfsDir("~somesuer/foo")
89 if err == nil {
90 t.Fatal("expected error with user-specific home dir")
91 }
92
93 _, err = CheckIpfsDir("~/no_such_dir")
94 if err == nil {
95 t.Fatal("expected error from nonexistent directory")
96 }
97
98 dir, err := CheckIpfsDir("~/.ipfs")
99 if err != nil {
100 t.Fatal(err)
101 }
102 if dir != fakeIpfs {
103 t.Fatal("wrong ipfs directory:", dir)
104 }
105 }
106
107 func testRepoVersion(t *testing.T, fakeIpfs string) {
108 badDir := "~somesuer/foo"
109 _, err := RepoVersion(badDir)
110 if err == nil {
111 t.Fatal("expected error with user-specific home dir")
112 }
113
114 _, err = RepoVersion(fakeIpfs)
115 if !os.IsNotExist(err) {
116 t.Fatal("expected not-exist error")
117 }
118
119 testVer := 42
120 err = WriteRepoVersion(fakeIpfs, testVer)
121 if err != nil {
122 t.Fatal(err)
123 }
124
125 var ver int
126 ver, err = RepoVersion(fakeIpfs)
127 if err != nil {
128 t.Fatal(err)
129 }
130 if ver != testVer {
131 t.Fatalf("expected version %d, got %d", testVer, ver)
132 }
133
134 err = WriteRepoVersion(badDir, testVer)
135 if err == nil {
136 t.Fatal("expected error with user-specific home dir")
137 }
138
139 ipfsDir, err := IpfsDir(fakeIpfs)
140 if err != nil {
141 t.Fatal(err)
142 }
143 vFilePath := filepath.Join(ipfsDir, versionFile)
144 err = os.WriteFile(vFilePath, []byte("bad-version-data\n"), 0o644)
145 if err != nil {
146 panic(err)
147 }
148 _, err = RepoVersion(fakeIpfs)
149 if err == nil || err.Error() != "invalid data in repo version file" {
150 t.Fatal("expected 'invalid data' error")
151 }
152 err = WriteRepoVersion(fakeIpfs, testVer)
153 if err != nil {
154 t.Fatal(err)
155 }
156 }