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) } } }