diff options
| -rw-r--r-- | handler.go | 8 | ||||
| -rw-r--r-- | trillian.go | 14 | ||||
| -rw-r--r-- | trillian_test.go | 81 | 
3 files changed, 91 insertions, 12 deletions
| @@ -134,8 +134,8 @@ func getProofByHash(ctx context.Context, i *Instance, w http.ResponseWriter, r *  		TreeSize:        req.TreeSize,  		OrderBySequence: true,  	}) -	if status, errInner := checkGetInclusionProofByHash(i.LogParameters, trsp, err); errInner != nil { -		return status, fmt.Errorf("bad GetInclusionProofByHashResponse: %v", errInner) +	if errInner := checkGetInclusionProofByHash(i.LogParameters, trsp, err); errInner != nil { +		return http.StatusInternalServerError, fmt.Errorf("bad GetInclusionProofByHashResponse: %v", errInner)  	}  	rsp, err := NewInclusionProofV1(i.LogParameters.LogId, uint64(req.TreeSize), uint64(trsp.Proof[0].LeafIndex), trsp.Proof[0].Hashes).MarshalB64() @@ -161,8 +161,8 @@ func getConsistencyProof(ctx context.Context, i *Instance, w http.ResponseWriter  		FirstTreeSize:  int64(req.First),  		SecondTreeSize: int64(req.Second),  	}) -	if status, errInner := checkGetConsistencyProof(i.LogParameters, trsp, err); errInner != nil { -		return status, fmt.Errorf("bad GetConsistencyProofResponse: %v", errInner) +	if errInner := checkGetConsistencyProof(i.LogParameters, trsp, err); errInner != nil { +		return http.StatusInternalServerError, fmt.Errorf("bad GetConsistencyProofResponse: %v", errInner)  	}  	rsp, err := NewConsistencyProofV1(i.LogParameters.LogId, uint64(req.First), uint64(req.Second), trsp.Proof.Hashes).MarshalB64() diff --git a/trillian.go b/trillian.go index 5fab6f5..c20901f 100644 --- a/trillian.go +++ b/trillian.go @@ -48,16 +48,16 @@ func checkGetLeavesByRange(req *GetEntriesRequest, rsp *trillian.GetLeavesByRang  	return 0, nil  } -func checkGetInclusionProofByHash(lp *LogParameters, rsp *trillian.GetInclusionProofByHashResponse, err error) (int, error) { +func checkGetInclusionProofByHash(lp *LogParameters, rsp *trillian.GetInclusionProofByHashResponse, err error) error {  	if err != nil || rsp == nil || len(rsp.Proof) == 0 || rsp.Proof[0] == nil { -		return http.StatusInternalServerError, fmt.Errorf("%v", err) +		return fmt.Errorf("%v", err)  	}  	return checkHashPath(lp.HashType.Size(), rsp.Proof[0].Hashes)  } -func checkGetConsistencyProof(lp *LogParameters, rsp *trillian.GetConsistencyProofResponse, err error) (int, error) { +func checkGetConsistencyProof(lp *LogParameters, rsp *trillian.GetConsistencyProofResponse, err error) error {  	if err != nil || rsp == nil || rsp.Proof == nil { -		return http.StatusInternalServerError, fmt.Errorf("%v", err) +		return fmt.Errorf("%v", err)  	}  	return checkHashPath(lp.HashType.Size(), rsp.Proof.Hashes)  } @@ -75,11 +75,11 @@ func checkGetLatestSignedLogRoot(lp *LogParameters, rsp *trillian.GetLatestSigne  	return nil  } -func checkHashPath(hashSize int, path [][]byte) (int, error) { +func checkHashPath(hashSize int, path [][]byte) error {  	for _, hash := range path {  		if len(hash) != hashSize { -			return http.StatusInternalServerError, fmt.Errorf("invalid proof: %v", path) +			return fmt.Errorf("invalid proof: %v", path)  		}  	} -	return 0, nil +	return nil  } diff --git a/trillian_test.go b/trillian_test.go index 6c9b7af..bbbfff3 100644 --- a/trillian_test.go +++ b/trillian_test.go @@ -141,12 +141,91 @@ func TestCheckGetLeavesByRange(t *testing.T) {  	}  } -// TODO: TestCheckGetInclusionProofByHash  func TestCheckGetInclusionProofByHash(t *testing.T) { +	lp := makeTestLogParameters(t, nil) +	for _, table := range []struct { +		description string +		rsp         *trillian.GetInclusionProofByHashResponse +		err         error +		wantErr     bool +	}{ +		{ +			description: "bad response: trillian error", +			err:         fmt.Errorf("backend failure"), +			wantErr:     true, +		}, +		{ +			description: "bad response: empty", +			wantErr:     true, +		}, +		{ +			description: "bad response: no proofs", +			rsp:         &trillian.GetInclusionProofByHashResponse{}, +			wantErr:     true, +		}, +		{ +			description: "bad response: no proof", +			rsp: func(rsp *trillian.GetInclusionProofByHashResponse) *trillian.GetInclusionProofByHashResponse { +				rsp.Proof[0] = nil +				return rsp +			}(makeTrillianGetInclusionProofByHashResponse(t, int64(testIndex), testProof)), +			wantErr: true, +		}, +		{ +			description: "bad response: proof with invalid node hash", +			rsp:         makeTrillianGetInclusionProofByHashResponse(t, int64(testIndex), [][]byte{make([]byte, 31)}), +			wantErr:     true, +		}, +		{ +			description: "ok response", +			rsp:         makeTrillianGetInclusionProofByHashResponse(t, int64(testIndex), testProof), +		}, +	} { +		if err := checkGetInclusionProofByHash(lp, table.rsp, table.err); (err != nil) != table.wantErr { +			t.Errorf("got error %v, but wanted error %v in test %q", err, table.wantErr, table.description) +		} +	}  } +// TODO: fix hardcoded assumed test hash value len of 32? +  // TODO: TestGetConsistencyProof  func TestCheckGetConsistencyProof(t *testing.T) { +	lp := makeTestLogParameters(t, nil) +	for _, table := range []struct { +		description string +		rsp         *trillian.GetConsistencyProofResponse +		err         error +		wantErr     bool +	}{ +		{ +			description: "bad response: trillian error", +			err:         fmt.Errorf("backend failure"), +			wantErr:     true, +		}, +		{ +			description: "bad response: empty", +			wantErr:     true, +		}, +		{ +			description: "bad response: no proof", +			rsp:         &trillian.GetConsistencyProofResponse{}, +			wantErr:     true, +		}, +		{ +			description: "bad response: proof with invalid node hash", +			rsp:         makeTrillianGetConsistencyProofResponse(t, [][]byte{make([]byte, 31)}), +			wantErr:     true, +		}, +		{ +			description: "ok response", +			rsp:         makeTrillianGetConsistencyProofResponse(t, testProof), +		}, +	} { +		if err := checkGetConsistencyProof(lp, table.rsp, table.err); (err != nil) != table.wantErr { +			t.Errorf("got error %v, but wanted error %v in test %q", err, table.wantErr, table.description) +		} +	}  }  func TestCheckGetLatestSignedLogRoot(t *testing.T) { | 
