69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
package live
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"math/big"
|
|
"testing"
|
|
|
|
capb "github.com/letsencrypt/boulder/ca/proto"
|
|
"github.com/letsencrypt/boulder/core"
|
|
berrors "github.com/letsencrypt/boulder/errors"
|
|
"github.com/letsencrypt/boulder/ocsp/responder"
|
|
ocsp_test "github.com/letsencrypt/boulder/ocsp/test"
|
|
rapb "github.com/letsencrypt/boulder/ra/proto"
|
|
"github.com/letsencrypt/boulder/test"
|
|
"golang.org/x/crypto/ocsp"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
// mockOCSPGenerator is an ocspGenerator that always emits the provided bytes
|
|
// when serial number 1 is requested, but otherwise returns an error.
|
|
type mockOCSPGenerator struct {
|
|
resp []byte
|
|
}
|
|
|
|
func (m mockOCSPGenerator) GenerateOCSP(ctx context.Context, in *rapb.GenerateOCSPRequest, opts ...grpc.CallOption) (*capb.OCSPResponse, error) {
|
|
expectedSerial := core.SerialToString(big.NewInt(1))
|
|
if in.Serial != expectedSerial {
|
|
return nil, fmt.Errorf("expected serial %s, got %s", expectedSerial, in.Serial)
|
|
}
|
|
|
|
return &capb.OCSPResponse{Response: m.resp}, nil
|
|
}
|
|
|
|
// notFoundOCSPGenerator always returns berrors.NotFound
|
|
type notFoundOCSPGenerator struct{}
|
|
|
|
func (n notFoundOCSPGenerator) GenerateOCSP(ctx context.Context, in *rapb.GenerateOCSPRequest, opts ...grpc.CallOption) (*capb.OCSPResponse, error) {
|
|
return nil, berrors.NotFoundError("not found")
|
|
}
|
|
|
|
func TestLiveResponse(t *testing.T) {
|
|
eeSerial := big.NewInt(1)
|
|
fakeResp, _, _ := ocsp_test.FakeResponse(ocsp.Response{
|
|
SerialNumber: eeSerial,
|
|
})
|
|
source := New(mockOCSPGenerator{fakeResp.Raw}, 1, 0)
|
|
resp, err := source.Response(context.Background(), &ocsp.Request{
|
|
SerialNumber: eeSerial,
|
|
})
|
|
test.AssertNotError(t, err, "getting response")
|
|
test.AssertByteEquals(t, resp.Raw, fakeResp.Raw)
|
|
expectedSerial := "000000000000000000000000000000000001"
|
|
if core.SerialToString(resp.SerialNumber) != expectedSerial {
|
|
t.Errorf("expected serial %s, got %s", expectedSerial, resp.SerialNumber)
|
|
}
|
|
}
|
|
|
|
func TestNotFound(t *testing.T) {
|
|
eeSerial := big.NewInt(1)
|
|
source := New(notFoundOCSPGenerator{}, 1, 0)
|
|
_, err := source.Response(context.Background(), &ocsp.Request{
|
|
SerialNumber: eeSerial,
|
|
})
|
|
if !errors.Is(err, responder.ErrNotFound) {
|
|
t.Errorf("expected responder.ErrNotFound, got %#v", err)
|
|
}
|
|
}
|