Skip to content

Commit

Permalink
[FAB-5824] ignore non genesis rscc updates
Browse files Browse the repository at this point in the history
RSCC should use the existing ledger hook only for join time setup.
It should ignore later updates.

Change-Id: I064d8bb4456ef15d23f55a39c3ce27e48cfa1f1a
Signed-off-by: Srinivasan Muralidharan <muralisr@us.ibm.com>
  • Loading branch information
Srinivasan Muralidharan committed Aug 17, 2017
1 parent 13724f7 commit 47d0e3a
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
5 changes: 5 additions & 0 deletions core/scc/rscc/rscc.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@ func (rscc *Rscc) GenerateSimulationResults(txEnv *common.Envelope, sim ledger.T
return err
}

if cenv.Config.Sequence != 1 {
rsccLogger.Errorf("ignore non genesis block config updates (%d) for modifying resource policies", cenv.Config.Sequence)
return nil
}

if cenv.LastUpdate == nil {
rsccLogger.Errorf("nil LastUpdate")
return fmt.Errorf("nil LastUpdate")
Expand Down
23 changes: 19 additions & 4 deletions core/scc/rscc/rscc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -278,22 +278,37 @@ func TestLedgerProcessor(t *testing.T) {
assert.NotNil(t, err)

//nil LastUpdate
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{LastUpdate: nil})})
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{Config: &common.Config{Sequence: 1}, LastUpdate: nil})})
err = rscc.GenerateSimulationResults(txEnv, simulator)
assert.NotNil(t, err)

//bad ConfigUpdateEnvelope
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: []byte("bad ConfigUpdateEnvelope")})}})})
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{Config: &common.Config{Sequence: 1}, LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: []byte("bad ConfigUpdateEnvelope")})}})})
err = rscc.GenerateSimulationResults(txEnv, simulator)
assert.NotNil(t, err)

//bad ConfigUpdate
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigUpdateEnvelope{ConfigUpdate: []byte("bad ConfigUpdate")})})}})})
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{Config: &common.Config{Sequence: 1}, LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigUpdateEnvelope{ConfigUpdate: []byte("bad ConfigUpdate")})})}})})
err = rscc.GenerateSimulationResults(txEnv, simulator)
assert.NotNil(t, err)

//ignore config updates
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{Config: &common.Config{Sequence: 2}, LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigUpdateEnvelope{ConfigUpdate: utils.MarshalOrPanic(&common.ConfigUpdate{ChannelId: "myc", IsolatedData: map[string][]byte{"rscc_seed_data": createConfig()}})})})}})})
err = rscc.GenerateSimulationResults(txEnv, simulator)
res, err := simulator.GetTxSimulationResults()
//should not error ...
assert.Nil(t, err)
//... but sim results should be nil
assert.Nil(t, res.PubSimulationResults.NsRwset)

//good processing
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigUpdateEnvelope{ConfigUpdate: utils.MarshalOrPanic(&common.ConfigUpdate{ChannelId: "myc", IsolatedData: map[string][]byte{"rscc_seed_data": createConfig()}})})})}})})
txid1 = util.GenerateUUID()
simulator, _ = ledger.NewTxSimulator(txid1)
txEnv.Payload = utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigEnvelope{Config: &common.Config{Sequence: 1}, LastUpdate: &common.Envelope{Payload: utils.MarshalOrPanic(&common.Payload{Data: utils.MarshalOrPanic(&common.ConfigUpdateEnvelope{ConfigUpdate: utils.MarshalOrPanic(&common.ConfigUpdate{ChannelId: "myc", IsolatedData: map[string][]byte{"rscc_seed_data": createConfig()}})})})}})})
err = rscc.GenerateSimulationResults(txEnv, simulator)
res, err = simulator.GetTxSimulationResults()
//should not error ...
assert.Nil(t, err)
//... and sim results should be non-nil
assert.NotNil(t, res.PubSimulationResults.NsRwset)
}

0 comments on commit 47d0e3a

Please sign in to comment.