Give a failed submission a code, and put the cause in the log
A download that died on an HTTP 403 told the submitter "HTTP Error 403: Forbidden" and told the log "error: exit status 1". The tool's stderr went into status_msg and nowhere else, so the one person who could act on it saw nothing. Exactly backwards. Failures now go through a.fail: the submitter gets a sentence and an eight character code, the log gets that code, the stage, the submission, the source URL and the stderr tail. Quote the code, grep the log, find the line. Every record carries file:line now, and LOG_LEVEL sets the threshold — failures are logged at error, so no level hides them.
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -220,3 +222,37 @@ func TestRestartRecovery(t *testing.T) {
|
||||
t.Fatal("swept submission carries no explanation")
|
||||
}
|
||||
}
|
||||
|
||||
// The submitter must get a code they can quote, and must not get yt-dlp's stderr. The code is the
|
||||
// only thing tying their screenshot to the log line that says what actually broke.
|
||||
func TestFailGivesTraceableCodeNotToolOutput(t *testing.T) {
|
||||
a := testApp(t)
|
||||
ctx := context.Background()
|
||||
uid := a.seedMember(t, "[email protected]")
|
||||
|
||||
var subID int64
|
||||
if err := a.db.QueryRowContext(ctx,
|
||||
`insert into submissions (user_id, status) values ($1, 'downloading') returning id`,
|
||||
uid).Scan(&subID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
const secret = "HTTP Error 403: Forbidden"
|
||||
a.fail(ctx, subID, "download", "Kappaleen lataaminen ei onnistunut.", secret,
|
||||
fmt.Errorf("exit status 1"), "url", "https://youtu.be/x")
|
||||
|
||||
var status, msg string
|
||||
if err := a.db.QueryRowContext(ctx,
|
||||
`select status, status_msg from submissions where id = $1`, subID).Scan(&status, &msg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if status != "failed" {
|
||||
t.Fatalf("status = %q, want failed", status)
|
||||
}
|
||||
if strings.Contains(msg, secret) {
|
||||
t.Fatalf("tool stderr leaked to the submitter: %q", msg)
|
||||
}
|
||||
if !regexp.MustCompile(`\(virhekoodi [0-9a-f]{8}\)$`).MatchString(msg) {
|
||||
t.Fatalf("no traceable code in %q", msg)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user