@@ -13,7 +13,7 @@ describe('pinner', function () {
13
13
var ipfs
14
14
var repo
15
15
var pinner
16
- var objA , objB , objC , objD , objE
16
+ var Obj = { }
17
17
18
18
before ( ( done ) => {
19
19
repo = createTempRepo ( )
@@ -22,22 +22,30 @@ describe('pinner', function () {
22
22
ipfs . init ( { emptyRepo : true } , ( err ) => {
23
23
expect ( err ) . to . not . exist
24
24
ipfs . load ( ( ) => {
25
- // use node B with child links to A and C for multiple tests
26
- objA = new DAGNode ( new Buffer ( 'Node A' ) )
27
- objB = new DAGNode ( new Buffer ( 'Node B' ) )
28
- objC = new DAGNode ( new Buffer ( 'Node C' ) )
29
- var linkToA = new DAGLink ( 'childA' , objA . size ( ) , objA . multihash ( ) )
30
- var linkToC = new DAGLink ( 'childC' , objC . size ( ) , objC . multihash ( ) )
31
- objB . addRawLink ( linkToA )
32
- objB . addRawLink ( linkToC )
33
- ipfs . object . put ( objA , ( err ) => {
34
- expect ( err ) . to . not . exist
35
- ipfs . object . put ( objB , ( err ) => {
25
+ // Use this tree for multiple tests
26
+ //
27
+ // B E
28
+ // / \
29
+ // A C
30
+ // \
31
+ // D
32
+
33
+ var labels = [ 'A' , 'B' , 'C' , 'D' , 'E' ]
34
+ labels . forEach ( ( label ) => {
35
+ Obj [ label ] = new DAGNode ( new Buffer ( 'Node ' + label ) )
36
+ } )
37
+ // make links from bottom up to avoid mutating the hash after linking
38
+ Obj . C . addRawLink ( new DAGLink ( 'Child D' , Obj . D . size ( ) , Obj . D . multihash ( ) ) )
39
+ Obj . B . addRawLink ( new DAGLink ( 'Child A' , Obj . A . size ( ) , Obj . A . multihash ( ) ) )
40
+ Obj . B . addRawLink ( new DAGLink ( 'Child C' , Obj . C . size ( ) , Obj . C . multihash ( ) ) )
41
+ var count = 0
42
+ labels . forEach ( ( label ) => {
43
+ ipfs . object . put ( Obj [ label ] , ( err ) => {
36
44
expect ( err ) . to . not . exist
37
- ipfs . object . put ( objC , ( err ) => {
38
- expect ( err ) . to . not . exist
45
+ count ++
46
+ if ( count === labels . length ) {
39
47
done ( )
40
- } )
48
+ }
41
49
} )
42
50
} )
43
51
} )
@@ -51,9 +59,9 @@ describe('pinner', function () {
51
59
52
60
describe ( 'pin' , ( ) => {
53
61
it ( 'pins object directly' , ( done ) => {
54
- pinner . pin ( objA , false , ( err ) => {
62
+ pinner . pin ( Obj . A , false , ( err ) => {
55
63
expect ( err ) . to . not . exist
56
- pinner . isPinned ( objA . multihash ( ) , ( err , pinned , reason ) => {
64
+ pinner . isPinned ( Obj . A . multihash ( ) , ( err , pinned , reason ) => {
57
65
expect ( err ) . to . not . exist
58
66
expect ( pinned ) . to . be . true
59
67
expect ( reason ) . to . equal ( pinner . types . direct )
@@ -64,28 +72,28 @@ describe('pinner', function () {
64
72
65
73
it ( 'pins recursively by default' , ( done ) => {
66
74
// direct pin A which is child of B
67
- pinner . pin ( objA , false , ( err ) => {
75
+ pinner . pin ( Obj . A , false , ( err ) => {
68
76
expect ( err ) . to . not . exist
69
77
// recursive pin B which has children A and C
70
- pinner . pin ( objB , ( err ) => {
78
+ pinner . pin ( Obj . B , ( err ) => {
71
79
expect ( err ) . to . not . exist
72
80
// B should be 'recursive' pin
73
- pinner . isPinned ( objB . multihash ( ) , ( err , pinned , reason ) => {
81
+ pinner . isPinned ( Obj . B . multihash ( ) , ( err , pinned , reason ) => {
74
82
expect ( err ) . to . not . exist
75
83
expect ( pinned ) . to . be . true
76
84
expect ( reason ) . to . equal ( pinner . types . recursive )
77
85
// A should still be 'direct' pin
78
- pinner . isPinned ( objA . multihash ( ) , ( err , pinned , reason ) => {
86
+ pinner . isPinned ( Obj . A . multihash ( ) , ( err , pinned , reason ) => {
79
87
expect ( err ) . to . not . exist
80
88
expect ( pinned ) . to . be . true
81
89
expect ( reason ) . to . equal ( pinner . types . direct )
82
90
// C should be 'indirect' pin
83
- pinner . isPinned ( objC . multihash ( ) , ( err , pinned , reason ) => {
91
+ pinner . isPinned ( Obj . C . multihash ( ) , ( err , pinned , reason ) => {
84
92
expect ( err ) . to . not . exist
85
93
expect ( pinned ) . to . be . true
86
94
// indirect pin 'reason' is the b58 hash of recursive root pin
87
95
expect ( reason ) . to . equal (
88
- bs58 . encode ( objB . multihash ( ) ) . toString ( )
96
+ bs58 . encode ( Obj . B . multihash ( ) ) . toString ( )
89
97
)
90
98
done ( )
91
99
} )
@@ -97,14 +105,14 @@ describe('pinner', function () {
97
105
98
106
it ( 'rejects direct pin if already recursively pinned' , ( done ) => {
99
107
// recursive pin B which has children A and C
100
- pinner . pin ( objB , ( err ) => {
108
+ pinner . pin ( Obj . B , ( err ) => {
101
109
expect ( err ) . to . not . exist
102
110
// direct pin B should fail
103
- pinner . pin ( objB , false , ( err ) => {
104
- expect ( err ) . to . equal ( bs58 . encode ( objB . multihash ( ) ) . toString ( ) +
111
+ pinner . pin ( Obj . B , false , ( err ) => {
112
+ expect ( err ) . to . equal ( bs58 . encode ( Obj . B . multihash ( ) ) . toString ( ) +
105
113
' already pinned recursively' )
106
114
// pinning recursively again should succeed
107
- pinner . pin ( objB , ( err ) => {
115
+ pinner . pin ( Obj . B , ( err ) => {
108
116
expect ( err ) . to . not . exist
109
117
done ( )
110
118
} )
@@ -113,19 +121,18 @@ describe('pinner', function () {
113
121
} )
114
122
115
123
it ( 'rejects recursive pin if child object is not stored' , ( done ) => {
116
- objD = new DAGNode ( new Buffer ( 'Node D' ) )
117
- objE = new DAGNode ( new Buffer ( 'Node E' ) )
118
- var linkToE = new DAGLink ( 'childE' , objE . size ( ) , objE . multihash ( ) )
119
- objD . addRawLink ( linkToE )
120
- ipfs . object . put ( objD , ( err ) => {
124
+ Obj . Y = new DAGNode ( new Buffer ( 'Node Y' ) )
125
+ Obj . Z = new DAGNode ( new Buffer ( 'Node Z' ) )
126
+ Obj . Y . addRawLink ( new DAGLink ( 'Child Z' , Obj . Z . size ( ) , Obj . Z . multihash ( ) ) )
127
+ ipfs . object . put ( Obj . Y , ( err ) => {
121
128
expect ( err ) . to . not . exist
122
- // this should fail because E is not stored
123
- pinner . pin ( objD , ( err ) => {
129
+ // this should fail because Z is not stored
130
+ pinner . pin ( Obj . Y , ( err ) => {
124
131
expect ( err ) . to . exist
125
- ipfs . object . put ( objE , ( err ) => {
132
+ ipfs . object . put ( Obj . Z , ( err ) => {
126
133
expect ( err ) . to . not . exist
127
134
// now it should succeed
128
- pinner . pin ( objD , ( err ) => {
135
+ pinner . pin ( Obj . Y , ( err ) => {
129
136
expect ( err ) . to . not . exist
130
137
done ( )
131
138
} )
@@ -137,11 +144,11 @@ describe('pinner', function () {
137
144
138
145
describe ( 'unpin' , ( ) => {
139
146
it ( 'unpins directly pinned object' , ( done ) => {
140
- pinner . pin ( objA , false , ( err ) => {
147
+ pinner . pin ( Obj . A , false , ( err ) => {
141
148
expect ( err ) . to . not . exist
142
- pinner . unpin ( objA . multihash ( ) , false , ( err ) => {
149
+ pinner . unpin ( Obj . A . multihash ( ) , false , ( err ) => {
143
150
expect ( err ) . to . not . exist
144
- pinner . isPinned ( objA . multihash ( ) , ( err , pinned ) => {
151
+ pinner . isPinned ( Obj . A . multihash ( ) , ( err , pinned ) => {
145
152
expect ( err ) . to . not . exist
146
153
expect ( pinned ) . to . be . false
147
154
done ( )
@@ -151,23 +158,23 @@ describe('pinner', function () {
151
158
} )
152
159
153
160
it ( 'unpins recursively by default' , ( done ) => {
154
- const bs58A = bs58 . encode ( objA . multihash ( ) ) . toString ( )
155
- const bs58B = bs58 . encode ( objB . multihash ( ) ) . toString ( )
161
+ const bs58A = bs58 . encode ( Obj . A . multihash ( ) ) . toString ( )
162
+ const bs58B = bs58 . encode ( Obj . B . multihash ( ) ) . toString ( )
156
163
// recursive pin B which has children A and C
157
- pinner . pin ( objB , ( err ) => {
164
+ pinner . pin ( Obj . B , ( err ) => {
158
165
expect ( err ) . to . not . exist
159
166
// indirect pin A should not be unpinnable while B is pinned
160
- pinner . unpin ( objA . multihash ( ) , ( err ) => {
167
+ pinner . unpin ( Obj . A . multihash ( ) , ( err ) => {
161
168
expect ( err ) . to . equal (
162
169
bs58A + ' is pinned indirectly under ' + bs58B
163
170
)
164
171
// unpinning B should also unpin A
165
- pinner . unpin ( objB . multihash ( ) , ( err ) => {
172
+ pinner . unpin ( Obj . B . multihash ( ) , ( err ) => {
166
173
expect ( err ) . to . not . exist
167
- pinner . isPinned ( objB . multihash ( ) , ( err , pinned ) => {
174
+ pinner . isPinned ( Obj . B . multihash ( ) , ( err , pinned ) => {
168
175
expect ( err ) . to . not . exist
169
176
expect ( pinned ) . to . be . false
170
- pinner . isPinned ( objA . multihash ( ) , ( err , pinned ) => {
177
+ pinner . isPinned ( Obj . A . multihash ( ) , ( err , pinned ) => {
171
178
expect ( err ) . to . not . exist
172
179
expect ( pinned ) . to . be . false
173
180
done ( )
@@ -181,10 +188,10 @@ describe('pinner', function () {
181
188
182
189
describe ( 'hasChild' , ( ) => {
183
190
it ( 'finds if child hash is somewhere in object tree' , ( done ) => {
184
- pinner . hasChild ( objB , objC . multihash ( ) , ( err , has ) => {
191
+ pinner . hasChild ( Obj . B , Obj . D . multihash ( ) , ( err , has ) => {
185
192
expect ( err ) . to . not . exist
186
193
expect ( has ) . to . be . true
187
- pinner . hasChild ( objA , objC . multihash ( ) , ( err , has ) => {
194
+ pinner . hasChild ( Obj . B , Obj . E . multihash ( ) , ( err , has ) => {
188
195
expect ( err ) . to . not . exist
189
196
expect ( has ) . to . be . false
190
197
done ( )
0 commit comments