Files
orbit/internal/transport/httpserver/recovery_test.go

40 lines
1.2 KiB
Go

package httpserver
import (
"git.yuntuo.hk/k2safe/orbit/pulse/service"
"net/http/httptest"
"strings"
"testing"
)
func TestRecoveryJSONRequiresExplicitConfirmation(t *testing.T) {
for _, tc := range []struct {
body string
retry, valid bool
}{
{`{"execution_settled":true,"expected_revision":"9007199254740993"}`, false, true},
{`{"execution_settled":false}`, false, true},
{`{}`, false, false},
{`{"execution_settled":null}`, false, false},
{`{"ExecutionSettled":true}`, false, false},
{`{"execution_settled":true,"actor_id":"spoof"}`, false, false},
{`{"execution_settled":true,"execution_settled":false}`, false, false},
{`{"execution_settled":true,"expected_revision":9007199254740993}`, false, false},
{`{"safe_to_retry":true}`, true, true},
{`{"safe_to_retry":null}`, true, false},
{`{}`, true, false},
{`{"safe_to_retry":true,"owner_id":"spoof"}`, true, false},
} {
r := httptest.NewRequest("POST", "/v1/tasks/example:review", strings.NewReader(tc.body))
r.Header.Set("Content-Type", "application/json")
var in any = &service.ReviewInput{}
if tc.retry {
in = &service.ManualRetryInput{}
}
err := decodeBody(r, in)
if (err == nil) != tc.valid {
t.Fatalf("%s: %v", tc.body, err)
}
}
}