Skip to content

Commit b1e588b

Browse files
fix(FileSystemApi): pass the directory size along
js-ipfs #19 expects a link size for a directory. go-ipfs is happy either way,
1 parent be2ae56 commit b1e588b

File tree

2 files changed

+129
-131
lines changed

2 files changed

+129
-131
lines changed

src/CoreApi/FileSystemApi.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ internal FileSystemApi(IpfsClient ipfs)
114114
Name = Path.GetFileName(path),
115115
Links = links,
116116
IsDirectory = true,
117-
Size = 0,
117+
Size = directory.Size,
118118
IpfsClient = ipfs
119119
};
120120

test/CoreApi/FileSystemApiTest.cs

Lines changed: 128 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,128 @@
1-
using Ipfs.Api;
2-
using Microsoft.VisualStudio.TestTools.UnitTesting;
3-
using System;
4-
using System.IO;
5-
using System.Linq;
6-
using System.Text;
7-
8-
namespace Ipfs.Api
9-
{
10-
[TestClass]
11-
public class FileSystemApiTest
12-
{
13-
14-
[TestMethod]
15-
public void AddText()
16-
{
17-
var ipfs = TestFixture.Ipfs;
18-
var result = ipfs.FileSystem.AddTextAsync("hello world").Result;
19-
Assert.AreEqual("Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD", result.Hash);
20-
}
21-
22-
[TestMethod]
23-
public void AddFile()
24-
{
25-
var path = Path.GetTempFileName();
26-
File.WriteAllText(path, "hello world");
27-
try
28-
{
29-
var ipfs = TestFixture.Ipfs;
30-
var result = ipfs.FileSystem.AddFileAsync(path).Result;
31-
Assert.AreEqual("Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD", result.Hash);
32-
Assert.AreEqual(0, result.Links.Count());
33-
}
34-
finally
35-
{
36-
File.Delete(path);
37-
}
38-
}
39-
40-
[TestMethod]
41-
public void AddDirectory()
42-
{
43-
var ipfs = TestFixture.Ipfs;
44-
var temp = MakeTemp();
45-
try
46-
{
47-
var dir = ipfs.FileSystem.AddDirectoryAsync(temp, false).Result;
48-
Assert.IsTrue(dir.IsDirectory);
49-
50-
var files = dir.Links.ToArray();
51-
Assert.AreEqual(2, files.Length);
52-
Assert.AreEqual("alpha.txt", files[0].Name);
53-
Assert.AreEqual("beta.txt", files[1].Name);
54-
Assert.IsFalse(files[0].IsDirectory);
55-
Assert.IsFalse(files[1].IsDirectory);
56-
57-
Assert.AreEqual("alpha", ipfs.FileSystem.ReadAllTextAsync(files[0].Hash).Result);
58-
Assert.AreEqual("beta", ipfs.FileSystem.ReadAllTextAsync(files[1].Hash).Result);
59-
60-
Assert.AreEqual("alpha", ipfs.FileSystem.ReadAllTextAsync(dir.Hash + "/alpha.txt").Result);
61-
Assert.AreEqual("beta", ipfs.FileSystem.ReadAllTextAsync(dir.Hash + "/beta.txt").Result);
62-
}
63-
finally
64-
{
65-
Directory.Delete(temp, true);
66-
}
67-
}
68-
69-
[TestMethod]
70-
public void AddDirectoryRecursive()
71-
{
72-
var ipfs = TestFixture.Ipfs;
73-
var temp = MakeTemp();
74-
try
75-
{
76-
var dir = ipfs.FileSystem.AddDirectoryAsync(temp, true).Result;
77-
Assert.IsTrue(dir.IsDirectory);
78-
Assert.AreEqual(0, dir.Size);
79-
80-
var files = dir.Links.ToArray();
81-
Assert.AreEqual(3, files.Length);
82-
Assert.AreEqual("alpha.txt", files[0].Name);
83-
Assert.AreEqual("beta.txt", files[1].Name);
84-
Assert.AreEqual("x", files[2].Name);
85-
Assert.IsFalse(files[0].IsDirectory);
86-
Assert.IsFalse(files[1].IsDirectory);
87-
Assert.IsTrue(files[2].IsDirectory);
88-
Assert.AreEqual(5, files[0].Size);
89-
Assert.AreEqual(4, files[1].Size);
90-
Assert.AreEqual(0, files[2].Size);
91-
92-
var xfiles = new FileSystemNode { Hash = files[2].Hash }.Links.ToArray();
93-
Assert.AreEqual(2, xfiles.Length);
94-
Assert.AreEqual("x.txt", xfiles[0].Name);
95-
Assert.AreEqual("y", xfiles[1].Name);
96-
Assert.IsFalse(xfiles[0].IsDirectory);
97-
Assert.IsTrue(xfiles[1].IsDirectory);
98-
99-
var yfiles = new FileSystemNode { Hash = xfiles[1].Hash }.Links.ToArray();
100-
Assert.AreEqual(1, yfiles.Length);
101-
Assert.AreEqual("y.txt", yfiles[0].Name);
102-
Assert.IsFalse(yfiles[0].IsDirectory);
103-
104-
var y = new FileSystemNode { Hash = yfiles[0].Hash };
105-
Assert.AreEqual("y", Encoding.UTF8.GetString(y.DataBytes));
106-
Assert.AreEqual("y", ipfs.FileSystem.ReadAllTextAsync(dir.Hash + "/x/y/y.txt").Result);
107-
}
108-
finally
109-
{
110-
Directory.Delete(temp, true);
111-
}
112-
}
113-
114-
string MakeTemp()
115-
{
116-
var temp = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
117-
var x = Path.Combine(temp, "x");
118-
var xy = Path.Combine(x, "y");
119-
Directory.CreateDirectory(temp);
120-
Directory.CreateDirectory(x);
121-
Directory.CreateDirectory(xy);
122-
123-
File.WriteAllText(Path.Combine(temp, "alpha.txt"), "alpha");
124-
File.WriteAllText(Path.Combine(temp, "beta.txt"), "beta");
125-
File.WriteAllText(Path.Combine(x, "x.txt"), "x");
126-
File.WriteAllText(Path.Combine(xy, "y.txt"), "y");
127-
return temp;
128-
}
129-
}
130-
}
1+
using Ipfs.Api;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using System;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Text;
7+
8+
namespace Ipfs.Api
9+
{
10+
[TestClass]
11+
public class FileSystemApiTest
12+
{
13+
14+
[TestMethod]
15+
public void AddText()
16+
{
17+
var ipfs = TestFixture.Ipfs;
18+
var result = ipfs.FileSystem.AddTextAsync("hello world").Result;
19+
Assert.AreEqual("Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD", result.Hash);
20+
}
21+
22+
[TestMethod]
23+
public void AddFile()
24+
{
25+
var path = Path.GetTempFileName();
26+
File.WriteAllText(path, "hello world");
27+
try
28+
{
29+
var ipfs = TestFixture.Ipfs;
30+
var result = ipfs.FileSystem.AddFileAsync(path).Result;
31+
Assert.AreEqual("Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD", result.Hash);
32+
Assert.AreEqual(0, result.Links.Count());
33+
}
34+
finally
35+
{
36+
File.Delete(path);
37+
}
38+
}
39+
40+
[TestMethod]
41+
public void AddDirectory()
42+
{
43+
var ipfs = TestFixture.Ipfs;
44+
var temp = MakeTemp();
45+
try
46+
{
47+
var dir = ipfs.FileSystem.AddDirectoryAsync(temp, false).Result;
48+
Assert.IsTrue(dir.IsDirectory);
49+
50+
var files = dir.Links.ToArray();
51+
Assert.AreEqual(2, files.Length);
52+
Assert.AreEqual("alpha.txt", files[0].Name);
53+
Assert.AreEqual("beta.txt", files[1].Name);
54+
Assert.IsFalse(files[0].IsDirectory);
55+
Assert.IsFalse(files[1].IsDirectory);
56+
57+
Assert.AreEqual("alpha", ipfs.FileSystem.ReadAllTextAsync(files[0].Hash).Result);
58+
Assert.AreEqual("beta", ipfs.FileSystem.ReadAllTextAsync(files[1].Hash).Result);
59+
60+
Assert.AreEqual("alpha", ipfs.FileSystem.ReadAllTextAsync(dir.Hash + "/alpha.txt").Result);
61+
Assert.AreEqual("beta", ipfs.FileSystem.ReadAllTextAsync(dir.Hash + "/beta.txt").Result);
62+
}
63+
finally
64+
{
65+
Directory.Delete(temp, true);
66+
}
67+
}
68+
69+
[TestMethod]
70+
public void AddDirectoryRecursive()
71+
{
72+
var ipfs = TestFixture.Ipfs;
73+
var temp = MakeTemp();
74+
try
75+
{
76+
var dir = ipfs.FileSystem.AddDirectoryAsync(temp, true).Result;
77+
Assert.IsTrue(dir.IsDirectory);
78+
79+
var files = dir.Links.ToArray();
80+
Assert.AreEqual(3, files.Length);
81+
Assert.AreEqual("alpha.txt", files[0].Name);
82+
Assert.AreEqual("beta.txt", files[1].Name);
83+
Assert.AreEqual("x", files[2].Name);
84+
Assert.IsFalse(files[0].IsDirectory);
85+
Assert.IsFalse(files[1].IsDirectory);
86+
Assert.IsTrue(files[2].IsDirectory);
87+
Assert.AreEqual(5, files[0].Size);
88+
Assert.AreEqual(4, files[1].Size);
89+
90+
var xfiles = new FileSystemNode { Hash = files[2].Hash }.Links.ToArray();
91+
Assert.AreEqual(2, xfiles.Length);
92+
Assert.AreEqual("x.txt", xfiles[0].Name);
93+
Assert.AreEqual("y", xfiles[1].Name);
94+
Assert.IsFalse(xfiles[0].IsDirectory);
95+
Assert.IsTrue(xfiles[1].IsDirectory);
96+
97+
var yfiles = new FileSystemNode { Hash = xfiles[1].Hash }.Links.ToArray();
98+
Assert.AreEqual(1, yfiles.Length);
99+
Assert.AreEqual("y.txt", yfiles[0].Name);
100+
Assert.IsFalse(yfiles[0].IsDirectory);
101+
102+
var y = new FileSystemNode { Hash = yfiles[0].Hash };
103+
Assert.AreEqual("y", Encoding.UTF8.GetString(y.DataBytes));
104+
Assert.AreEqual("y", ipfs.FileSystem.ReadAllTextAsync(dir.Hash + "/x/y/y.txt").Result);
105+
}
106+
finally
107+
{
108+
Directory.Delete(temp, true);
109+
}
110+
}
111+
112+
string MakeTemp()
113+
{
114+
var temp = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
115+
var x = Path.Combine(temp, "x");
116+
var xy = Path.Combine(x, "y");
117+
Directory.CreateDirectory(temp);
118+
Directory.CreateDirectory(x);
119+
Directory.CreateDirectory(xy);
120+
121+
File.WriteAllText(Path.Combine(temp, "alpha.txt"), "alpha");
122+
File.WriteAllText(Path.Combine(temp, "beta.txt"), "beta");
123+
File.WriteAllText(Path.Combine(x, "x.txt"), "x");
124+
File.WriteAllText(Path.Combine(xy, "y.txt"), "y");
125+
return temp;
126+
}
127+
}
128+
}

0 commit comments

Comments
 (0)