cli/third-party/github.com/letsencrypt/boulder/ocsp/responder/live/live_test.go
2025-05-30 12:50:20 -04:00

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)
}
}