@@ -18,10 +18,14 @@ package channel
18
18
19
19
import (
20
20
"fmt"
21
+ "io/ioutil"
21
22
"os"
23
+ "path/filepath"
22
24
"sync"
23
25
"testing"
24
26
27
+ "github.com/golang/protobuf/proto"
28
+
25
29
"github.com/hyperledger/fabric/msp/mgmt/testtools"
26
30
"github.com/hyperledger/fabric/peer/common"
27
31
cb "github.com/hyperledger/fabric/protos/common"
@@ -251,3 +255,150 @@ func TestCreateChainDeliverFail(t *testing.T) {
251
255
}
252
256
}
253
257
}
258
+
259
+ func createTxFile (filename string , typ cb.HeaderType , channelID string ) (* cb.Envelope , error ) {
260
+ ch := & cb.ChannelHeader {Type : int32 (typ ), ChannelId : channelID }
261
+ data , err := proto .Marshal (ch )
262
+ if err != nil {
263
+ return nil , err
264
+ }
265
+
266
+ p := & cb.Payload {Header : & cb.Header {ChannelHeader : data }}
267
+ data , err = proto .Marshal (p )
268
+ if err != nil {
269
+ return nil , err
270
+ }
271
+
272
+ env := & cb.Envelope {Payload : data }
273
+ data , err = proto .Marshal (env )
274
+ if err != nil {
275
+ return nil , err
276
+ }
277
+
278
+ if err = ioutil .WriteFile (filename , data , 0644 ); err != nil {
279
+ return nil , err
280
+ }
281
+
282
+ return env , nil
283
+ }
284
+
285
+ func TestCreateChainFromTx (t * testing.T ) {
286
+ InitMSP ()
287
+
288
+ mockchannel := "mockchannel"
289
+
290
+ dir , err := ioutil .TempDir ("/tmp" , "createtestfromtx-" )
291
+ if err != nil {
292
+ t .Fatalf ("couldn't create temp dir" )
293
+ }
294
+
295
+ defer os .RemoveAll (dir ) // clean up
296
+
297
+ //this could be created by the create command
298
+ defer os .Remove (mockchannel + ".block" )
299
+
300
+ file := filepath .Join (dir , mockchannel )
301
+
302
+ signer , err := common .GetDefaultSigner ()
303
+ if err != nil {
304
+ t .Fatalf ("Get default signer error: %v" , err )
305
+ }
306
+
307
+ mockBroadcastClient := common .GetMockBroadcastClient (nil )
308
+
309
+ mockCF := & ChannelCmdFactory {
310
+ BroadcastClient : mockBroadcastClient ,
311
+ Signer : signer ,
312
+ DeliverClient : & mockDeliverClient {},
313
+ AnchorPeerParser : common .GetAnchorPeersParser ("../common/testdata/anchorPeersOrg1.txt" ),
314
+ }
315
+
316
+ cmd := createCmd (mockCF )
317
+
318
+ AddFlags (cmd )
319
+
320
+ args := []string {"-c" , mockchannel , "-f" , file , "-a" , "../common/testdata/anchorPeersOrg1.txt" }
321
+ cmd .SetArgs (args )
322
+
323
+ if _ , err = createTxFile (file , cb .HeaderType_CONFIG_UPDATE , mockchannel ); err != nil {
324
+ t .Fatalf ("couldn't create tx file" )
325
+ }
326
+
327
+ if err := cmd .Execute (); err != nil {
328
+ t .Errorf ("create chain failed" )
329
+ }
330
+ }
331
+
332
+ func TestCreateChainInvalidTx (t * testing.T ) {
333
+ InitMSP ()
334
+
335
+ mockchannel := "mockchannel"
336
+
337
+ dir , err := ioutil .TempDir ("/tmp" , "createinvaltest-" )
338
+ if err != nil {
339
+ t .Fatalf ("couldn't create temp dir" )
340
+ }
341
+
342
+ defer os .RemoveAll (dir ) // clean up
343
+
344
+ //this is created by create command
345
+ defer os .Remove (mockchannel + ".block" )
346
+
347
+ file := filepath .Join (dir , mockchannel )
348
+
349
+ signer , err := common .GetDefaultSigner ()
350
+ if err != nil {
351
+ t .Fatalf ("Get default signer error: %v" , err )
352
+ }
353
+
354
+ mockBroadcastClient := common .GetMockBroadcastClient (nil )
355
+
356
+ mockCF := & ChannelCmdFactory {
357
+ BroadcastClient : mockBroadcastClient ,
358
+ Signer : signer ,
359
+ DeliverClient : & mockDeliverClient {},
360
+ AnchorPeerParser : common .GetAnchorPeersParser ("../common/testdata/anchorPeersOrg1.txt" ),
361
+ }
362
+
363
+ cmd := createCmd (mockCF )
364
+
365
+ AddFlags (cmd )
366
+
367
+ args := []string {"-c" , mockchannel , "-f" , file , "-a" , "../common/testdata/anchorPeersOrg1.txt" }
368
+ cmd .SetArgs (args )
369
+
370
+ //bad type CONFIG
371
+ if _ , err = createTxFile (file , cb .HeaderType_CONFIG , mockchannel ); err != nil {
372
+ t .Fatalf ("couldn't create tx file" )
373
+ }
374
+
375
+ defer os .Remove (file )
376
+
377
+ if err := cmd .Execute (); err == nil {
378
+ t .Errorf ("expected error" )
379
+ } else if _ , ok := err .(InvalidCreateTx ); ! ok {
380
+ t .Errorf ("invalid error" )
381
+ }
382
+
383
+ //bad channel name - does not match one specified in command
384
+ if _ , err = createTxFile (file , cb .HeaderType_CONFIG_UPDATE , "different_channel" ); err != nil {
385
+ t .Fatalf ("couldn't create tx file" )
386
+ }
387
+
388
+ if err := cmd .Execute (); err == nil {
389
+ t .Errorf ("expected error" )
390
+ } else if _ , ok := err .(InvalidCreateTx ); ! ok {
391
+ t .Errorf ("invalid error" )
392
+ }
393
+
394
+ //empty channel
395
+ if _ , err = createTxFile (file , cb .HeaderType_CONFIG_UPDATE , "" ); err != nil {
396
+ t .Fatalf ("couldn't create tx file" )
397
+ }
398
+
399
+ if err := cmd .Execute (); err == nil {
400
+ t .Errorf ("expected error" )
401
+ } else if _ , ok := err .(InvalidCreateTx ); ! ok {
402
+ t .Errorf ("invalid error" )
403
+ }
404
+ }
0 commit comments