Make inmem mock streams generic (#7370)

This significantly reduces the amount of code necessary to add inmem
wrappers for other streaming SA methods if/when we need them in the
future.
This commit is contained in:
Aaron Gable 2024-03-08 08:04:16 -08:00 committed by GitHub
parent 74328338a0
commit cd418af285
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 18 additions and 18 deletions

View File

@ -133,46 +133,46 @@ func (sa SA) FQDNSetExists(ctx context.Context, req *sapb.FQDNSetExistsRequest,
return sa.Impl.FQDNSetExists(ctx, req)
}
type mockSerialsForIncidentStream_Result struct {
serial *sapb.IncidentSerial
err error
type mockStreamResult[T any] struct {
val T
err error
}
type mockSerialsForIncidentStream_Client struct {
type mockClientStream[T any] struct {
grpc.ClientStream
stream <-chan mockSerialsForIncidentStream_Result
stream <-chan mockStreamResult[T]
}
func (c mockSerialsForIncidentStream_Client) Recv() (*sapb.IncidentSerial, error) {
sfiData := <-c.stream
return sfiData.serial, sfiData.err
func (c mockClientStream[T]) Recv() (T, error) {
result := <-c.stream
return result.val, result.err
}
type mockSerialsForIncidentStream_Server struct {
type mockServerStream[T any] struct {
grpc.ServerStream
context context.Context
stream chan<- mockSerialsForIncidentStream_Result
stream chan<- mockStreamResult[T]
}
func (s mockSerialsForIncidentStream_Server) Send(serial *sapb.IncidentSerial) error {
s.stream <- mockSerialsForIncidentStream_Result{serial, nil}
func (s mockServerStream[T]) Send(val T) error {
s.stream <- mockStreamResult[T]{val: val, err: nil}
return nil
}
func (s mockSerialsForIncidentStream_Server) Context() context.Context {
func (s mockServerStream[T]) Context() context.Context {
return s.context
}
func (sa SA) SerialsForIncident(ctx context.Context, req *sapb.SerialsForIncidentRequest, _ ...grpc.CallOption) (sapb.StorageAuthority_SerialsForIncidentClient, error) {
streamChan := make(chan mockSerialsForIncidentStream_Result)
client := mockSerialsForIncidentStream_Client{stream: streamChan}
server := mockSerialsForIncidentStream_Server{context: ctx, stream: streamChan}
streamChan := make(chan mockStreamResult[*sapb.IncidentSerial])
client := mockClientStream[*sapb.IncidentSerial]{stream: streamChan}
server := mockServerStream[*sapb.IncidentSerial]{context: ctx, stream: streamChan}
go func() {
err := sa.Impl.SerialsForIncident(req, server)
if err != nil {
streamChan <- mockSerialsForIncidentStream_Result{nil, err}
streamChan <- mockStreamResult[*sapb.IncidentSerial]{nil, err}
}
streamChan <- mockSerialsForIncidentStream_Result{nil, io.EOF}
streamChan <- mockStreamResult[*sapb.IncidentSerial]{nil, io.EOF}
close(streamChan)
}()
return client, nil