github.com/letsencrypt/boulder@v0.20251208.0/test/inmem/sa/sa.go (about) 1 package sa 2 3 import ( 4 "context" 5 "io" 6 7 corepb "github.com/letsencrypt/boulder/core/proto" 8 "github.com/letsencrypt/boulder/sa" 9 sapb "github.com/letsencrypt/boulder/sa/proto" 10 11 "google.golang.org/grpc" 12 "google.golang.org/protobuf/types/known/emptypb" 13 ) 14 15 // SA meets the `sapb.StorageAuthorityClient` interface and acts as a 16 // wrapper for an inner `sa.SQLStorageAuthority` (which in turn meets 17 // the `sapb.StorageAuthorityServer` interface). Only methods used by 18 // unit tests need to be implemented. 19 type SA struct { 20 sapb.StorageAuthorityClient 21 Impl *sa.SQLStorageAuthority 22 } 23 24 func (sa SA) NewRegistration(ctx context.Context, req *corepb.Registration, _ ...grpc.CallOption) (*corepb.Registration, error) { 25 return sa.Impl.NewRegistration(ctx, req) 26 } 27 28 func (sa SA) GetRegistration(ctx context.Context, req *sapb.RegistrationID, _ ...grpc.CallOption) (*corepb.Registration, error) { 29 return sa.Impl.GetRegistration(ctx, req) 30 } 31 32 func (sa SA) DeactivateRegistration(ctx context.Context, req *sapb.RegistrationID, _ ...grpc.CallOption) (*corepb.Registration, error) { 33 return sa.Impl.DeactivateRegistration(ctx, req) 34 } 35 36 func (sa SA) GetAuthorization2(ctx context.Context, req *sapb.AuthorizationID2, _ ...grpc.CallOption) (*corepb.Authorization, error) { 37 return sa.Impl.GetAuthorization2(ctx, req) 38 } 39 40 func (sa SA) GetValidAuthorizations2(ctx context.Context, req *sapb.GetValidAuthorizationsRequest, _ ...grpc.CallOption) (*sapb.Authorizations, error) { 41 return sa.Impl.GetValidAuthorizations2(ctx, req) 42 } 43 44 func (sa SA) GetValidOrderAuthorizations2(ctx context.Context, req *sapb.GetValidOrderAuthorizationsRequest, _ ...grpc.CallOption) (*sapb.Authorizations, error) { 45 return sa.Impl.GetValidOrderAuthorizations2(ctx, req) 46 } 47 48 func (sa SA) CountPendingAuthorizations2(ctx context.Context, req *sapb.RegistrationID, _ ...grpc.CallOption) (*sapb.Count, error) { 49 return sa.Impl.CountPendingAuthorizations2(ctx, req) 50 } 51 52 func (sa SA) DeactivateAuthorization2(ctx context.Context, req *sapb.AuthorizationID2, _ ...grpc.CallOption) (*emptypb.Empty, error) { 53 return sa.Impl.DeactivateAuthorization2(ctx, req) 54 } 55 56 func (sa SA) FinalizeAuthorization2(ctx context.Context, req *sapb.FinalizeAuthorizationRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 57 return sa.Impl.FinalizeAuthorization2(ctx, req) 58 } 59 60 func (sa SA) NewOrderAndAuthzs(ctx context.Context, req *sapb.NewOrderAndAuthzsRequest, _ ...grpc.CallOption) (*corepb.Order, error) { 61 return sa.Impl.NewOrderAndAuthzs(ctx, req) 62 } 63 64 func (sa SA) GetOrder(ctx context.Context, req *sapb.OrderRequest, _ ...grpc.CallOption) (*corepb.Order, error) { 65 return sa.Impl.GetOrder(ctx, req) 66 } 67 68 func (sa SA) GetOrderForNames(ctx context.Context, req *sapb.GetOrderForNamesRequest, _ ...grpc.CallOption) (*corepb.Order, error) { 69 return sa.Impl.GetOrderForNames(ctx, req) 70 } 71 72 func (sa SA) SetOrderError(ctx context.Context, req *sapb.SetOrderErrorRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 73 return sa.Impl.SetOrderError(ctx, req) 74 } 75 76 func (sa SA) SetOrderProcessing(ctx context.Context, req *sapb.OrderRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 77 return sa.Impl.SetOrderProcessing(ctx, req) 78 } 79 80 func (sa SA) FinalizeOrder(ctx context.Context, req *sapb.FinalizeOrderRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 81 return sa.Impl.FinalizeOrder(ctx, req) 82 } 83 84 func (sa SA) AddPrecertificate(ctx context.Context, req *sapb.AddCertificateRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 85 return sa.Impl.AddPrecertificate(ctx, req) 86 } 87 88 func (sa SA) AddCertificate(ctx context.Context, req *sapb.AddCertificateRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 89 return sa.Impl.AddCertificate(ctx, req) 90 } 91 92 func (sa SA) RevokeCertificate(ctx context.Context, req *sapb.RevokeCertificateRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 93 return sa.Impl.RevokeCertificate(ctx, req) 94 } 95 96 func (sa SA) GetLintPrecertificate(ctx context.Context, req *sapb.Serial, _ ...grpc.CallOption) (*corepb.Certificate, error) { 97 return sa.Impl.GetLintPrecertificate(ctx, req) 98 } 99 100 func (sa SA) GetCertificateStatus(ctx context.Context, req *sapb.Serial, _ ...grpc.CallOption) (*corepb.CertificateStatus, error) { 101 return sa.Impl.GetCertificateStatus(ctx, req) 102 } 103 104 func (sa SA) AddBlockedKey(ctx context.Context, req *sapb.AddBlockedKeyRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { 105 return sa.Impl.AddBlockedKey(ctx, req) 106 } 107 108 func (sa SA) FQDNSetExists(ctx context.Context, req *sapb.FQDNSetExistsRequest, _ ...grpc.CallOption) (*sapb.Exists, error) { 109 return sa.Impl.FQDNSetExists(ctx, req) 110 } 111 112 func (sa SA) FQDNSetTimestampsForWindow(ctx context.Context, req *sapb.CountFQDNSetsRequest, _ ...grpc.CallOption) (*sapb.Timestamps, error) { 113 return sa.Impl.FQDNSetTimestampsForWindow(ctx, req) 114 } 115 116 func (sa SA) PauseIdentifiers(ctx context.Context, req *sapb.PauseRequest, _ ...grpc.CallOption) (*sapb.PauseIdentifiersResponse, error) { 117 return sa.Impl.PauseIdentifiers(ctx, req) 118 } 119 120 type mockStreamResult[T any] struct { 121 val T 122 err error 123 } 124 125 type mockClientStream[T any] struct { 126 grpc.ClientStream 127 stream <-chan mockStreamResult[T] 128 } 129 130 func (c mockClientStream[T]) Recv() (T, error) { 131 result := <-c.stream 132 return result.val, result.err 133 } 134 135 type mockServerStream[T any] struct { 136 grpc.ServerStream 137 context context.Context 138 stream chan<- mockStreamResult[T] 139 } 140 141 func (s mockServerStream[T]) Send(val T) error { 142 s.stream <- mockStreamResult[T]{val: val, err: nil} 143 return nil 144 } 145 146 func (s mockServerStream[T]) Context() context.Context { 147 return s.context 148 } 149 150 func (sa SA) SerialsForIncident(ctx context.Context, req *sapb.SerialsForIncidentRequest, _ ...grpc.CallOption) (grpc.ServerStreamingClient[sapb.IncidentSerial], error) { 151 streamChan := make(chan mockStreamResult[*sapb.IncidentSerial]) 152 client := mockClientStream[*sapb.IncidentSerial]{stream: streamChan} 153 server := mockServerStream[*sapb.IncidentSerial]{context: ctx, stream: streamChan} 154 go func() { 155 err := sa.Impl.SerialsForIncident(req, server) 156 if err != nil { 157 streamChan <- mockStreamResult[*sapb.IncidentSerial]{nil, err} 158 } 159 streamChan <- mockStreamResult[*sapb.IncidentSerial]{nil, io.EOF} 160 close(streamChan) 161 }() 162 return client, nil 163 }