@@ -17,22 +17,24 @@ limitations under the License.
17
17
package util
18
18
19
19
import (
20
+ "archive/tar"
20
21
"bytes"
22
+ "compress/gzip"
21
23
"encoding/hex"
22
- "math/rand"
23
- "testing"
24
- "time"
25
-
26
- "archive/tar"
27
24
"fmt"
28
25
"io"
26
+ "io/ioutil"
27
+ "math/rand"
29
28
"os"
30
29
"strings"
30
+ "testing"
31
+ "time"
31
32
32
33
"github.com/hyperledger/fabric/common/util"
33
34
"github.com/hyperledger/fabric/core/config"
34
35
cutil "github.com/hyperledger/fabric/core/container/util"
35
36
"github.com/spf13/viper"
37
+ "github.com/stretchr/testify/assert"
36
38
)
37
39
38
40
// TestHashContentChange changes a random byte in a content and checks for hash change
@@ -178,23 +180,139 @@ func TestHashDiffDir(t *testing.T) {
178
180
if bytes .Compare (hash1 , hash2 ) == 0 {
179
181
t .Error ("Hash should be different for 2 different remote repos" )
180
182
}
181
-
182
183
}
184
+
183
185
func TestHashSameDir (t * testing.T ) {
186
+ assert := assert .New (t )
187
+
184
188
b := []byte ("firstcontent" )
185
189
hash := util .ComputeSHA256 (b )
186
-
187
190
hash1 , err := HashFilesInDir ("." , "hashtestfiles1" , hash , nil )
191
+ assert .NoError (err , "Error getting code" )
192
+
193
+ fname := os .TempDir () + "/hash.tar"
194
+ w , err := os .Create (fname )
188
195
if err != nil {
189
- t .Errorf ( "Error getting code %s" , err )
196
+ t .Fatal ( err )
190
197
}
191
- hash2 , err := HashFilesInDir ("." , "hashtestfiles1" , hash , nil )
198
+ defer os .Remove (fname )
199
+ tw := tar .NewWriter (w )
200
+ defer w .Close ()
201
+ defer tw .Close ()
202
+ hash2 , err := HashFilesInDir ("." , "hashtestfiles1" , hash , tw )
203
+ assert .NoError (err , "Error getting code" )
204
+
205
+ assert .Equal (bytes .Compare (hash1 , hash2 ), 0 ,
206
+ "Hash should be same across multiple downloads" )
207
+ }
208
+
209
+ func TestHashBadWriter (t * testing.T ) {
210
+ b := []byte ("firstcontent" )
211
+ hash := util .ComputeSHA256 (b )
212
+
213
+ fname := os .TempDir () + "/hash.tar"
214
+ w , err := os .Create (fname )
192
215
if err != nil {
193
- t .Errorf ("Error getting code %s" , err )
216
+ t .Fatal (err )
217
+ }
218
+ defer os .Remove (fname )
219
+ tw := tar .NewWriter (w )
220
+ defer w .Close ()
221
+ tw .Close ()
222
+
223
+ _ , err = HashFilesInDir ("." , "hashtestfiles1" , hash , tw )
224
+ assert .Error (t , err ,
225
+ "HashFilesInDir invoked with closed writer, should have failed" )
226
+ }
227
+
228
+ // TestHashNonExistentDir tests HashFilesInDir with non existant directory
229
+ func TestHashNonExistentDir (t * testing.T ) {
230
+ b := []byte ("firstcontent" )
231
+ hash := util .ComputeSHA256 (b )
232
+ _ , err := HashFilesInDir ("." , "idontexist" , hash , nil )
233
+ assert .Error (t , err , "Expected an error for non existent directory %s" , "idontexist" )
234
+ }
235
+
236
+ // TestIsCodeExist tests isCodeExist function
237
+ func TestIsCodeExist (t * testing.T ) {
238
+ assert := assert .New (t )
239
+ path := os .TempDir ()
240
+ err := IsCodeExist (path )
241
+ assert .NoError (err ,
242
+ "%s directory exists, IsCodeExist should not have returned error: %v" ,
243
+ path , err )
244
+
245
+ dir , err := ioutil .TempDir (os .TempDir (), "iscodeexist" )
246
+ assert .NoError (err )
247
+ defer os .RemoveAll (dir )
248
+ path = dir + "/blah"
249
+ err = IsCodeExist (path )
250
+ assert .Error (err ,
251
+ "%s directory does not exist, IsCodeExist should have returned error" , path )
252
+
253
+ f := createTempFile (t )
254
+ defer os .Remove (f )
255
+ err = IsCodeExist (f )
256
+ assert .Error (err , "%s is a file, IsCodeExist should have returned error" , f )
257
+ }
258
+
259
+ // TestDockerBuild tests DockerBuild function
260
+ func TestDockerBuild (t * testing.T ) {
261
+ assert := assert .New (t )
262
+ var err error
263
+
264
+ ldflags := "-linkmode external -extldflags '-static'"
265
+ codepackage := bytes .NewReader (getDeploymentPayload ())
266
+ binpackage := bytes .NewBuffer (nil )
267
+ if err != nil {
268
+ t .Fatal (err )
269
+ }
270
+ err = DockerBuild (DockerBuildOptions {
271
+ Cmd : fmt .Sprintf ("GOPATH=/chaincode/input:$GOPATH go build -ldflags \" %s\" -o /chaincode/output/chaincode helloworld" ,
272
+ ldflags ),
273
+ InputStream : codepackage ,
274
+ OutputStream : binpackage ,
275
+ })
276
+ assert .NoError (err , "DockerBuild failed" )
277
+ }
278
+
279
+ func getDeploymentPayload () []byte {
280
+ var goprog = `
281
+ package main
282
+ import "fmt"
283
+ func main() {
284
+ fmt.Println("Hello World")
285
+ }
286
+ `
287
+ var zeroTime time.Time
288
+ payload := bytes .NewBufferString (goprog ).Bytes ()
289
+ inputbuf := bytes .NewBuffer (nil )
290
+ gw := gzip .NewWriter (inputbuf )
291
+ tw := tar .NewWriter (gw )
292
+ tw .WriteHeader (& tar.Header {
293
+ Name : "src/helloworld/helloworld.go" ,
294
+ Size : int64 (len (payload )),
295
+ Mode : 0600 ,
296
+ ModTime : zeroTime ,
297
+ AccessTime : zeroTime ,
298
+ ChangeTime : zeroTime ,
299
+ })
300
+ tw .Write (payload )
301
+ tw .Close ()
302
+ gw .Close ()
303
+ return inputbuf .Bytes ()
304
+ }
305
+
306
+ func createTempFile (t * testing.T ) string {
307
+ tmpfile , err := ioutil .TempFile ("" , "test" )
308
+ if err != nil {
309
+ t .Fatal (err )
310
+ return ""
194
311
}
195
- if bytes . Compare ( hash1 , hash2 ) != 0 {
196
- t .Error ( "Hash should be same across multiple downloads" )
312
+ if err := tmpfile . Close (); err != nil {
313
+ t .Fatal ( err )
197
314
}
315
+ return tmpfile .Name ()
198
316
}
199
317
200
318
func TestDockerPull (t * testing.T ) {
0 commit comments