Commit 2b19d088 authored by Adrian Sutton's avatar Adrian Sutton Committed by GitHub

op-challenger: Do not resolve games in selective mode (#11430)

parent 97aac006
...@@ -155,6 +155,11 @@ func (a *Agent) tryResolve(ctx context.Context) bool { ...@@ -155,6 +155,11 @@ func (a *Agent) tryResolve(ctx context.Context) bool {
a.log.Error("Failed to resolve claims", "err", err) a.log.Error("Failed to resolve claims", "err", err)
return false return false
} }
if a.selective {
// Never resolve games in selective mode as it won't unlock any bonds for us.
// Assume the game is still in progress or the player wouldn't have told us to act.
return false
}
status, err := a.responder.CallResolve(ctx) status, err := a.responder.CallResolve(ctx)
if err != nil || status == gameTypes.GameStatusInProgress { if err != nil || status == gameTypes.GameStatusInProgress {
return false return false
......
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"context" "context"
"errors" "errors"
"math/big" "math/big"
"slices"
"sync" "sync"
"testing" "testing"
"time" "time"
...@@ -127,20 +128,27 @@ func TestAgent_SelectiveClaimResolution(t *testing.T) { ...@@ -127,20 +128,27 @@ func TestAgent_SelectiveClaimResolution(t *testing.T) {
}, },
} }
for _, test := range tests { for _, tCase := range tests {
test := test tCase := tCase
t.Run(test.name, func(t *testing.T) { t.Run(tCase.name, func(t *testing.T) {
agent, claimLoader, responder := setupTestAgent(t) agent, claimLoader, responder := setupTestAgent(t)
agent.selective = test.selective agent.selective = tCase.selective
agent.claimants = test.claimants agent.claimants = tCase.claimants
claimLoader.maxLoads = 1 claimLoader.maxLoads = 1
claimLoader.claims = test.claims if tCase.selective {
responder.callResolveStatus = test.callResolveStatus claimLoader.maxLoads = 0
}
claimLoader.claims = tCase.claims
responder.callResolveStatus = tCase.callResolveStatus
require.NoError(t, agent.Act(ctx)) require.NoError(t, agent.Act(ctx))
require.Equal(t, test.expectedResolveCount, responder.callResolveClaimCount, "should check if game is resolvable") require.Equal(t, tCase.expectedResolveCount, responder.callResolveClaimCount, "should check if game is resolvable")
require.Equal(t, test.expectedResolveCount, responder.resolveClaimCount, "should check if game is resolvable") require.Equal(t, tCase.expectedResolveCount, responder.resolveClaimCount, "should check if game is resolvable")
if tCase.selective {
require.Equal(t, 0, responder.callResolveCount, "should not resolve game in selective mode")
require.Equal(t, 0, responder.resolveCount, "should not resolve game in selective mode")
}
}) })
} }
} }
...@@ -230,6 +238,7 @@ type stubResponder struct { ...@@ -230,6 +238,7 @@ type stubResponder struct {
callResolveClaimCount int callResolveClaimCount int
callResolveClaimErr error callResolveClaimErr error
resolveClaimCount int resolveClaimCount int
resolvedClaims []uint64
} }
func (s *stubResponder) CallResolve(_ context.Context) (gameTypes.GameStatus, error) { func (s *stubResponder) CallResolve(_ context.Context) (gameTypes.GameStatus, error) {
...@@ -246,9 +255,12 @@ func (s *stubResponder) Resolve() error { ...@@ -246,9 +255,12 @@ func (s *stubResponder) Resolve() error {
return s.resolveErr return s.resolveErr
} }
func (s *stubResponder) CallResolveClaim(_ context.Context, _ uint64) error { func (s *stubResponder) CallResolveClaim(_ context.Context, idx uint64) error {
s.l.Lock() s.l.Lock()
defer s.l.Unlock() defer s.l.Unlock()
if slices.Contains(s.resolvedClaims, idx) {
return errors.New("already resolved")
}
s.callResolveClaimCount++ s.callResolveClaimCount++
return s.callResolveClaimErr return s.callResolveClaimErr
} }
...@@ -257,6 +269,7 @@ func (s *stubResponder) ResolveClaims(claims ...uint64) error { ...@@ -257,6 +269,7 @@ func (s *stubResponder) ResolveClaims(claims ...uint64) error {
s.l.Lock() s.l.Lock()
defer s.l.Unlock() defer s.l.Unlock()
s.resolveClaimCount += len(claims) s.resolveClaimCount += len(claims)
s.resolvedClaims = append(s.resolvedClaims, claims...)
return nil return nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment