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  }