github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/core/common/validation/statebased/v20_test.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package statebased
     8  
     9  import (
    10  	"testing"
    11  
    12  	verr "github.com/hechain20/hechain/common/errors"
    13  	"github.com/hechain20/hechain/core/common/validation/statebased/mocks"
    14  	"github.com/hechain20/hechain/core/ledger"
    15  	"github.com/hechain20/hechain/core/ledger/kvledger/txmgmt/rwsetutil"
    16  	"github.com/hechain20/hechain/protoutil"
    17  	"github.com/pkg/errors"
    18  	"github.com/stretchr/testify/mock"
    19  	"github.com/stretchr/testify/require"
    20  )
    21  
    22  func Test0(t *testing.T) {
    23  	t.Parallel()
    24  
    25  	// SCENARIO: no writes anywhere -> check the ccep
    26  
    27  	cc := "cc"
    28  	ccep := []byte("ccep")
    29  
    30  	ms := &mockStateFetcher{}
    31  
    32  	pm := &mocks.KeyLevelValidationParameterManager{}
    33  
    34  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
    35  
    36  	cr := &mocks.CollectionResources{}
    37  
    38  	pcf := NewV20Evaluator(pm, pe, cr, ms)
    39  
    40  	ev := pcf.Evaluator(ccep)
    41  
    42  	rwsb := rwsetutil.NewRWSetBuilder()
    43  	rws := rwsb.GetTxReadWriteSet()
    44  
    45  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
    46  	require.Error(t, err)
    47  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
    48  }
    49  
    50  func Test1(t *testing.T) {
    51  	t.Parallel()
    52  
    53  	// SCENARIO: only one write in the public namespace -> check the ccep
    54  
    55  	cc := "cc"
    56  	key := "key"
    57  	ccep := []byte("ccep")
    58  
    59  	ms := &mockStateFetcher{}
    60  
    61  	pm := &mocks.KeyLevelValidationParameterManager{}
    62  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
    63  
    64  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
    65  
    66  	cr := &mocks.CollectionResources{}
    67  
    68  	pcf := NewV20Evaluator(pm, pe, cr, ms)
    69  
    70  	ev := pcf.Evaluator(ccep)
    71  
    72  	rwsb := rwsetutil.NewRWSetBuilder()
    73  	rwsb.AddToWriteSet(cc, key, []byte("value"))
    74  	rws := rwsb.GetTxReadWriteSet()
    75  
    76  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
    77  	require.Error(t, err)
    78  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
    79  }
    80  
    81  func Test1Multiple(t *testing.T) {
    82  	t.Parallel()
    83  
    84  	// SCENARIO: only one write in the public namespace -> check the ccep
    85  
    86  	cc := "cc"
    87  	key := "key"
    88  	ccep := []byte("ccep")
    89  
    90  	ms := &mockStateFetcher{}
    91  
    92  	pm := &mocks.KeyLevelValidationParameterManager{}
    93  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
    94  
    95  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): nil}, EvaluateRV: errors.New("nope")}
    96  
    97  	cr := &mocks.CollectionResources{}
    98  
    99  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   100  
   101  	ev := pcf.Evaluator(ccep)
   102  
   103  	rwsb := rwsetutil.NewRWSetBuilder()
   104  	rwsb.AddToWriteSet(cc, key, []byte("value"))
   105  	rwsb.AddToWriteSet(cc, key+"1", []byte("value"))
   106  	rws := rwsb.GetTxReadWriteSet()
   107  
   108  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   109  	require.NoError(t, err)
   110  }
   111  
   112  func Test1NoErr(t *testing.T) {
   113  	t.Parallel()
   114  
   115  	// SCENARIO: only one write in the public namespace -> check the ccep
   116  
   117  	cc := "cc"
   118  	key := "key"
   119  	ccep := []byte("ccep")
   120  
   121  	ms := &mockStateFetcher{}
   122  
   123  	pm := &mocks.KeyLevelValidationParameterManager{}
   124  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, &ledger.CollConfigNotDefinedError{})
   125  
   126  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
   127  
   128  	cr := &mocks.CollectionResources{}
   129  
   130  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   131  
   132  	ev := pcf.Evaluator(ccep)
   133  
   134  	rwsb := rwsetutil.NewRWSetBuilder()
   135  	rwsb.AddToWriteSet(cc, key, []byte("value"))
   136  	rws := rwsb.GetTxReadWriteSet()
   137  
   138  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   139  	require.Error(t, err)
   140  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   141  }
   142  
   143  func Test1Err1(t *testing.T) {
   144  	t.Parallel()
   145  
   146  	// SCENARIO: error fetching validation params
   147  
   148  	cc := "cc"
   149  	key := "key"
   150  	ccep := []byte("ccep")
   151  
   152  	ms := &mockStateFetcher{}
   153  
   154  	pm := &mocks.KeyLevelValidationParameterManager{}
   155  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, &ValidationParameterUpdatedError{})
   156  
   157  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
   158  
   159  	cr := &mocks.CollectionResources{}
   160  
   161  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   162  
   163  	ev := pcf.Evaluator(ccep)
   164  
   165  	rwsb := rwsetutil.NewRWSetBuilder()
   166  	rwsb.AddToWriteSet(cc, key, []byte("value"))
   167  	rws := rwsb.GetTxReadWriteSet()
   168  
   169  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   170  	require.Error(t, err)
   171  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   172  }
   173  
   174  func Test1Err2(t *testing.T) {
   175  	t.Parallel()
   176  
   177  	// SCENARIO: error fetching validation params
   178  
   179  	cc := "cc"
   180  	key := "key"
   181  	ccep := []byte("ccep")
   182  
   183  	ms := &mockStateFetcher{}
   184  
   185  	pm := &mocks.KeyLevelValidationParameterManager{}
   186  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("heavy metal hamster"))
   187  
   188  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
   189  
   190  	cr := &mocks.CollectionResources{}
   191  
   192  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   193  
   194  	ev := pcf.Evaluator(ccep)
   195  
   196  	rwsb := rwsetutil.NewRWSetBuilder()
   197  	rwsb.AddToWriteSet(cc, key, []byte("value"))
   198  	rws := rwsb.GetTxReadWriteSet()
   199  
   200  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   201  	require.Error(t, err)
   202  	require.IsType(t, err, &verr.VSCCExecutionFailureError{})
   203  }
   204  
   205  func Test1Meta(t *testing.T) {
   206  	t.Parallel()
   207  
   208  	// SCENARIO: only one meta write in the public namespace -> check the ccep
   209  
   210  	cc := "cc"
   211  	key := "key"
   212  	ccep := []byte("ccep")
   213  
   214  	ms := &mockStateFetcher{}
   215  
   216  	pm := &mocks.KeyLevelValidationParameterManager{}
   217  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
   218  
   219  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
   220  
   221  	cr := &mocks.CollectionResources{}
   222  
   223  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   224  
   225  	ev := pcf.Evaluator(ccep)
   226  
   227  	rwsb := rwsetutil.NewRWSetBuilder()
   228  	rwsb.AddToMetadataWriteSet(cc, key, nil)
   229  	rws := rwsb.GetTxReadWriteSet()
   230  
   231  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   232  	require.Error(t, err)
   233  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   234  }
   235  
   236  func Test1MetaMultiple(t *testing.T) {
   237  	t.Parallel()
   238  
   239  	// SCENARIO: only one meta write in the public namespace -> check the ccep
   240  
   241  	cc := "cc"
   242  	key := "key"
   243  	ccep := []byte("ccep")
   244  
   245  	ms := &mockStateFetcher{}
   246  
   247  	pm := &mocks.KeyLevelValidationParameterManager{}
   248  	pm.On("GetValidationParameterForKey", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
   249  
   250  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): nil}, EvaluateRV: errors.New("nope")}
   251  
   252  	cr := &mocks.CollectionResources{}
   253  
   254  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   255  
   256  	ev := pcf.Evaluator(ccep)
   257  
   258  	rwsb := rwsetutil.NewRWSetBuilder()
   259  	rwsb.AddToMetadataWriteSet(cc, key, nil)
   260  	rwsb.AddToMetadataWriteSet(cc, key+"1", nil)
   261  	rws := rwsb.GetTxReadWriteSet()
   262  
   263  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   264  	require.NoError(t, err)
   265  }
   266  
   267  func Test2(t *testing.T) {
   268  	t.Parallel()
   269  
   270  	// SCENARIO: only one write in the public namespace with SBEP -> check the SBEP
   271  
   272  	cc := "cc"
   273  	key := "key"
   274  	ccep := []byte("ccep")
   275  	sbep := []byte("sbep")
   276  
   277  	ms := &mockStateFetcher{}
   278  
   279  	pm := &mocks.KeyLevelValidationParameterManager{}
   280  	pm.On("GetValidationParameterForKey", cc, "", key, mock.Anything, mock.Anything).Return(sbep, nil)
   281  
   282  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(sbep): errors.New("nope")}}
   283  
   284  	cr := &mocks.CollectionResources{}
   285  
   286  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   287  
   288  	ev := pcf.Evaluator(ccep)
   289  
   290  	rwsb := rwsetutil.NewRWSetBuilder()
   291  	rwsb.AddToWriteSet(cc, key, []byte("value"))
   292  	rws := rwsb.GetTxReadWriteSet()
   293  
   294  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   295  	require.Error(t, err)
   296  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   297  }
   298  
   299  func Test3(t *testing.T) {
   300  	t.Parallel()
   301  
   302  	// SCENARIO: only one write in a collection without COLLEP or SBEP -> check the CCEP
   303  
   304  	cc := "cc"
   305  	key := "key"
   306  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   307  	coll := "coll"
   308  	ccep := []byte("ccep")
   309  
   310  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   311  
   312  	pm := &mocks.KeyLevelValidationParameterManager{}
   313  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(nil, nil)
   314  
   315  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
   316  
   317  	cr := &mocks.CollectionResources{}
   318  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(nil, nil, nil)
   319  
   320  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   321  
   322  	ev := pcf.Evaluator(ccep)
   323  
   324  	rwsb := rwsetutil.NewRWSetBuilder()
   325  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("Well I guess you took my youth and gave it all away"))
   326  	rws := rwsb.GetTxReadWriteSet()
   327  
   328  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   329  	require.Error(t, err)
   330  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   331  }
   332  
   333  func Test3Meta(t *testing.T) {
   334  	t.Parallel()
   335  
   336  	// SCENARIO: only one meta write in a collection without COLLEP or SBEP -> check the CCEP
   337  
   338  	cc := "cc"
   339  	key := "key"
   340  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   341  	coll := "coll"
   342  	ccep := []byte("ccep")
   343  
   344  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   345  
   346  	pm := &mocks.KeyLevelValidationParameterManager{}
   347  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(nil, nil)
   348  
   349  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(ccep): errors.New("nope")}}
   350  
   351  	cr := &mocks.CollectionResources{}
   352  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(nil, nil, nil)
   353  
   354  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   355  
   356  	ev := pcf.Evaluator(ccep)
   357  
   358  	rwsb := rwsetutil.NewRWSetBuilder()
   359  	rwsb.AddToHashedMetadataWriteSet(cc, coll, key, nil)
   360  	rws := rwsb.GetTxReadWriteSet()
   361  
   362  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   363  	require.Error(t, err)
   364  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   365  }
   366  
   367  func Test4(t *testing.T) {
   368  	t.Parallel()
   369  
   370  	// SCENARIO: only one write in a collection with COLLEP -> check COLLEP
   371  
   372  	cc := "cc"
   373  	key := "key"
   374  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   375  	coll := "coll"
   376  	ccep := []byte("ccep")
   377  	collep := []byte("collep")
   378  
   379  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   380  
   381  	pm := &mocks.KeyLevelValidationParameterManager{}
   382  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(nil, nil)
   383  
   384  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(collep): errors.New("nope")}}
   385  
   386  	cr := &mocks.CollectionResources{}
   387  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(collep, nil, nil)
   388  
   389  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   390  
   391  	ev := pcf.Evaluator(ccep)
   392  
   393  	rwsb := rwsetutil.NewRWSetBuilder()
   394  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("Well I guess you took my youth"))
   395  	rws := rwsb.GetTxReadWriteSet()
   396  
   397  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   398  	require.Error(t, err)
   399  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   400  }
   401  
   402  func Test4Multiple(t *testing.T) {
   403  	t.Parallel()
   404  
   405  	// SCENARIO: only one write in a collection with COLLEP -> check COLLEP
   406  
   407  	cc := "cc"
   408  	key := "key"
   409  	coll := "coll"
   410  	ccep := []byte("ccep")
   411  	collep := []byte("collep")
   412  
   413  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   414  
   415  	pm := &mocks.KeyLevelValidationParameterManager{}
   416  	pm.On("GetValidationParameterForKey", cc, coll, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
   417  
   418  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(collep): nil}, EvaluateRV: errors.New("nope")}
   419  
   420  	cr := &mocks.CollectionResources{}
   421  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(collep, nil, nil)
   422  
   423  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   424  
   425  	ev := pcf.Evaluator(ccep)
   426  
   427  	rwsb := rwsetutil.NewRWSetBuilder()
   428  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("As I was goin' over"))
   429  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key+"1", []byte("The Cork and Kerry Mountains"))
   430  	rws := rwsb.GetTxReadWriteSet()
   431  
   432  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   433  	require.NoError(t, err)
   434  }
   435  
   436  func Test4Err(t *testing.T) {
   437  	t.Parallel()
   438  
   439  	// SCENARIO: error while retrieving COLLEP
   440  
   441  	cc := "cc"
   442  	key := "key"
   443  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   444  	coll := "coll"
   445  	ccep := []byte("ccep")
   446  
   447  	ms := &mockStateFetcher{FetchStateErr: errors.New("Dr. Stein grows funny creatures")}
   448  
   449  	pm := &mocks.KeyLevelValidationParameterManager{}
   450  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(nil, nil)
   451  
   452  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{}}
   453  
   454  	cr := &mocks.CollectionResources{}
   455  
   456  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   457  
   458  	ev := pcf.Evaluator(ccep)
   459  
   460  	rwsb := rwsetutil.NewRWSetBuilder()
   461  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("Well I guess you took my youth"))
   462  	rws := rwsb.GetTxReadWriteSet()
   463  
   464  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   465  	require.Error(t, err)
   466  	require.IsType(t, err, &verr.VSCCExecutionFailureError{})
   467  }
   468  
   469  func Test5(t *testing.T) {
   470  	t.Parallel()
   471  
   472  	// SCENARIO: only one write in a collection with SBEP -> check SBEP
   473  
   474  	cc := "cc"
   475  	key := "key"
   476  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   477  	coll := "coll"
   478  	ccep := []byte("ccep")
   479  	collep := []byte("collep")
   480  	sbep := []byte("sbep")
   481  
   482  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   483  
   484  	pm := &mocks.KeyLevelValidationParameterManager{}
   485  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(sbep, nil)
   486  
   487  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{string(sbep): errors.New("nope")}}
   488  
   489  	cr := &mocks.CollectionResources{}
   490  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(collep, nil, nil)
   491  
   492  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   493  
   494  	ev := pcf.Evaluator(ccep)
   495  
   496  	rwsb := rwsetutil.NewRWSetBuilder()
   497  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("Well I guess you took my youth and gave it all away"))
   498  	rws := rwsb.GetTxReadWriteSet()
   499  
   500  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   501  	require.Error(t, err)
   502  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   503  }
   504  
   505  func Test6(t *testing.T) {
   506  	t.Parallel()
   507  
   508  	// SCENARIO: unexpected error while fetching collection validation info
   509  
   510  	cc := "cc"
   511  	key := "key"
   512  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   513  	coll := "coll"
   514  	ccep := []byte("ccep")
   515  
   516  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   517  
   518  	pm := &mocks.KeyLevelValidationParameterManager{}
   519  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(nil, nil)
   520  
   521  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{}}
   522  
   523  	cr := &mocks.CollectionResources{}
   524  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(nil, errors.New("two minutes to midnight"), nil)
   525  
   526  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   527  
   528  	ev := pcf.Evaluator(ccep)
   529  
   530  	rwsb := rwsetutil.NewRWSetBuilder()
   531  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("Well I guess you took my youth and gave it all away"))
   532  	rws := rwsb.GetTxReadWriteSet()
   533  
   534  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   535  	require.Error(t, err)
   536  	require.IsType(t, err, &verr.VSCCExecutionFailureError{})
   537  }
   538  
   539  func Test7(t *testing.T) {
   540  	t.Parallel()
   541  
   542  	// SCENARIO: deterministic error while fetching collection validation info
   543  
   544  	cc := "cc"
   545  	key := "key"
   546  	hashedKey := ",p\xe1+z\x06F\xf9\"y\xf4'dz\x8es4\xd8\xe58\x9c\xff\x16z\x1d\xc3\x0es\xf8&\xb6\x83"
   547  	coll := "coll"
   548  	ccep := []byte("ccep")
   549  
   550  	ms := &mockStateFetcher{FetchStateRv: &mockState{}}
   551  
   552  	pm := &mocks.KeyLevelValidationParameterManager{}
   553  	pm.On("GetValidationParameterForKey", cc, coll, hashedKey, mock.Anything, mock.Anything).Return(nil, nil)
   554  
   555  	pe := &mockPolicyEvaluator{EvaluateResByPolicy: map[string]error{}}
   556  
   557  	cr := &mocks.CollectionResources{}
   558  	cr.On("CollectionValidationInfo", cc, coll, mock.Anything).Return(nil, nil, errors.New("nope"))
   559  
   560  	pcf := NewV20Evaluator(pm, pe, cr, ms)
   561  
   562  	ev := pcf.Evaluator(ccep)
   563  
   564  	rwsb := rwsetutil.NewRWSetBuilder()
   565  	rwsb.AddToPvtAndHashedWriteSet(cc, coll, key, []byte("Well I guess you took my youth and gave it all away"))
   566  	rws := rwsb.GetTxReadWriteSet()
   567  
   568  	err := ev.Evaluate(1, 1, rws.NsRwSets, cc, []*protoutil.SignedData{{}})
   569  	require.Error(t, err)
   570  	require.IsType(t, err, &verr.VSCCEndorsementPolicyError{})
   571  }