| package consensus | 
 |  | 
 | import ( | 
 | 	"context" | 
 | 	"testing" | 
 |  | 
 | 	clientv3 "go.etcd.io/etcd/client/v3" | 
 |  | 
 | 	"source.monogon.dev/metropolis/pkg/event/memory" | 
 | ) | 
 |  | 
 | type testServiceHandle struct { | 
 | 	s memory.Value[*Status] | 
 | } | 
 |  | 
 | // TestServiceHandle builds a somewhat functioning ServiceHandle from a bare | 
 | // etcd connection, effectively creating a fake Consensus service. This must | 
 | // only be used in test code to perform dependency injection of a etcd client | 
 | // into code which expects a Consensus service instance, eg. for testing the | 
 | // Curator. | 
 | // | 
 | // The 'somewhat functioning' description above should serve as a hint to the | 
 | // API stability and backwards/forwards compatibility of this function: there is | 
 | // none. | 
 | func TestServiceHandle(t *testing.T, cl *clientv3.Client) ServiceHandle { | 
 | 	ca := pkiCA() | 
 |  | 
 | 	tsh := testServiceHandle{} | 
 | 	st := &Status{ | 
 | 		cl:                        cl, | 
 | 		ca:                        ca, | 
 | 		noClusterMemberManagement: true, | 
 | 	} | 
 | 	etcdPKI, err := st.pkiClient() | 
 | 	if err != nil { | 
 | 		t.Fatalf("failed to get PKI etcd client: %v", err) | 
 | 	} | 
 | 	ctx, ctxC := context.WithCancel(context.Background()) | 
 | 	defer ctxC() | 
 | 	if _, err := ca.Ensure(ctx, etcdPKI); err != nil { | 
 | 		t.Fatalf("failed to ensure PKI CA: %v", err) | 
 | 	} | 
 | 	tsh.s.Set(st) | 
 | 	return &tsh.s | 
 | } |