internal/testhelper/transactiontest/gitaly.go (26 lines of code) (raw):

package transactiontest import ( "context" "fmt" "testing" "time" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "google.golang.org/grpc" ) // ForceSnapshotInvalidation provides a temporary workaround that allows tests to assert against the state of a repository // after any pending changes are applied. It invokes the WriteRef RPC that will start a new transaction, which // will be forced to wait for previous changes to be applied before the RPC returns. It invalidates any cached // snapshots. func ForceSnapshotInvalidation(tb testing.TB, ctx context.Context, revision string, conn *grpc.ClientConn, repo *gitalypb.Repository) { client := gitalypb.NewRepositoryServiceClient(conn) _, err := client.WriteRef(ctx, &gitalypb.WriteRefRequest{ Repository: repo, Ref: []byte(fmt.Sprintf("refs/heads/temp-%d", time.Now().UnixNano())), // Use unique ref name, Revision: []byte(revision), }) require.NoError(tb, err) } // ForceWALSync provides a temporary workaround that allows tests to assert against the state of a repository // after any pending changes are applied. It invokes RepositoryExists RPC that will start a new transaction, which // will be forced to wait for previous changes to be applied before the RPC returns. This workaround will leave behind // a cached snapshot of the repository. func ForceWALSync(tb testing.TB, ctx context.Context, conn *grpc.ClientConn, repo *gitalypb.Repository) { client := gitalypb.NewRepositoryServiceClient(conn) _, err := client.RepositoryExists(ctx, &gitalypb.RepositoryExistsRequest{ Repository: repo, }) require.NoError(tb, err) }