github.com/leonlxy/hyperledger@v1.0.0-alpha.0.20170427033203-34922035d248/events/producer/producer_test.go (about) 1 /* 2 Copyright IBM Corp. 2017 All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package producer 18 19 import ( 20 "fmt" 21 "math/rand" 22 "os" 23 "testing" 24 "time" 25 26 "github.com/hyperledger/fabric/common/util" 27 "github.com/hyperledger/fabric/msp" 28 "github.com/hyperledger/fabric/msp/mgmt" 29 "github.com/hyperledger/fabric/msp/mgmt/testtools" 30 "github.com/hyperledger/fabric/protos/peer" 31 "github.com/hyperledger/fabric/protos/utils" 32 ) 33 34 func createEvent() (*peer.Event, error) { 35 events := make([]*peer.Interest, 2) 36 events[0] = &peer.Interest{ 37 EventType: peer.EventType_BLOCK, 38 } 39 events[1] = &peer.Interest{ 40 EventType: peer.EventType_BLOCK, 41 ChainID: util.GetTestChainID(), 42 } 43 44 evt := &peer.Event{ 45 Event: &peer.Event_Register{ 46 Register: &peer.Register{ 47 Events: events, 48 }, 49 }, 50 Creator: signerSerialized, 51 } 52 53 return evt, nil 54 } 55 56 var r *rand.Rand 57 58 func corrupt(bytes []byte) { 59 if r == nil { 60 r = rand.New(rand.NewSource(time.Now().Unix())) 61 } 62 63 bytes[r.Int31n(int32(len(bytes)))]-- 64 } 65 66 func TestSignedEvent(t *testing.T) { 67 // get a test event 68 evt, err := createEvent() 69 if err != nil { 70 t.Fatalf("createEvent failed, err %s", err) 71 return 72 } 73 74 // sign it 75 sEvt, err := utils.GetSignedEvent(evt, signer) 76 if err != nil { 77 t.Fatalf("GetSignedEvent failed, err %s", err) 78 return 79 } 80 81 // validate it. Expected to succeed 82 _, err = validateEventMessage(sEvt) 83 if err != nil { 84 t.Fatalf("validateEventMessage failed, err %s", err) 85 return 86 } 87 88 // mess with the signature 89 corrupt(sEvt.Signature) 90 91 // validate it, it should fail 92 _, err = validateEventMessage(sEvt) 93 if err == nil { 94 t.Fatalf("validateEventMessage should have failed") 95 return 96 } 97 98 // get a bad signing identity 99 badSigner, err := msp.NewNoopMsp().GetDefaultSigningIdentity() 100 if err != nil { 101 t.Fatal("couldn't get noop signer") 102 return 103 } 104 105 // sign it again with the bad signer 106 sEvt, err = utils.GetSignedEvent(evt, badSigner) 107 if err != nil { 108 t.Fatalf("GetSignedEvent failed, err %s", err) 109 return 110 } 111 112 // validate it, it should fail 113 _, err = validateEventMessage(sEvt) 114 if err == nil { 115 t.Fatalf("validateEventMessage should have failed") 116 return 117 } 118 } 119 120 var signer msp.SigningIdentity 121 var signerSerialized []byte 122 123 func TestMain(m *testing.M) { 124 // setup crypto algorithms 125 // setup the MSP manager so that we can sign/verify 126 err := msptesttools.LoadMSPSetupForTesting() 127 if err != nil { 128 fmt.Printf("Could not initialize msp, err %s", err) 129 os.Exit(-1) 130 return 131 } 132 133 signer, err = mgmt.GetLocalMSP().GetDefaultSigningIdentity() 134 if err != nil { 135 fmt.Println("Could not get signer") 136 os.Exit(-1) 137 return 138 } 139 140 signerSerialized, err = signer.Serialize() 141 if err != nil { 142 fmt.Println("Could not serialize identity") 143 os.Exit(-1) 144 return 145 } 146 147 os.Exit(m.Run()) 148 }