mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-16 19:59:56 +02:00
En conteneur, l'image se met à jour par Docker : /api/update rend la version du Go sans mise à jour disponible et la note Docker, /api/update/apply la refuse (409). La façade sert ces deux routes quand LOKI_UPDATE=rust et LOKI_CONTAINER=1 (sysupdate.rs) ; hors conteneur, loki-rs ne passe pas la variable et le Go garde le remplacement du binaire. Parité : parity_update_test.go tire du Go les quatre réponses en conteneur, rejouées par tests/sysupdate.rs ; TestFacadeMiseAJour côté Go. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
66 lines
2.0 KiB
Go
66 lines
2.0 KiB
Go
package loki
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http/httptest"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// parity_update_test.go — journal de référence de la mise à jour de Loki en
|
|
// conteneur (lot 21 de la migration Rust) : l'image se met à jour par Docker,
|
|
// les deux routes le disent. Rangé dans
|
|
// rust/loki-rs/tests/parity_update/update.json ; tests/sysupdate.rs le rejoue
|
|
// par la façade.
|
|
//
|
|
// LOKI_PARITY_UPDATE=1 go test ./internal/loki -run TestPariteMiseAJour
|
|
|
|
const parityUpdateFile = "../../rust/loki-rs/tests/parity_update/update.json"
|
|
|
|
func TestPariteMiseAJour(t *testing.T) {
|
|
testHome(t)
|
|
t.Setenv("LOKI_CONTAINER", "1")
|
|
var steps []map[string]any
|
|
for _, c := range []struct{ method, path, body string }{
|
|
{"GET", "/api/update", ""},
|
|
{"POST", "/api/update", "{}"},
|
|
{"POST", "/api/update/apply", "{}"},
|
|
{"GET", "/api/update/apply", ""},
|
|
} {
|
|
rec := httptest.NewRecorder()
|
|
req := httptest.NewRequest(c.method, c.path, strings.NewReader(c.body))
|
|
if c.path == "/api/update" {
|
|
handleUpdateCheck(rec, req)
|
|
} else {
|
|
handleUpdateApply(rec, req)
|
|
}
|
|
var out any
|
|
_ = json.Unmarshal([]byte(strings.ReplaceAll(rec.Body.String(), Version, "{{VERSION}}")), &out)
|
|
steps = append(steps, map[string]any{"method": c.method, "path": c.path, "status": rec.Code, "out": out})
|
|
}
|
|
got, err := parityJSON(map[string]any{"steps": steps})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if os.Getenv("LOKI_PARITY_UPDATE") == "1" {
|
|
if err := os.MkdirAll(filepath.Dir(parityUpdateFile), 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(parityUpdateFile, got, 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return
|
|
}
|
|
want, err := os.ReadFile(parityUpdateFile)
|
|
if err != nil {
|
|
t.Fatalf("journal de référence absent (%v) : LOKI_PARITY_UPDATE=1 pour le créer", err)
|
|
}
|
|
if string(got) != string(want) {
|
|
t.Errorf("la mise à jour en conteneur ne produit plus le journal rangé dans %s.\n"+
|
|
"Si c'est voulu : LOKI_PARITY_UPDATE=1 go test ./internal/loki -run TestPariteMiseAJour.\n--- obtenu ---\n%s",
|
|
parityUpdateFile, got)
|
|
}
|
|
}
|