mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
- module github.com/R0m1k3/Loki, cmd/loki, internal/loki (package loki) - LOKI_HOME, LOKI_MODEL_DIRS, LOKI_SERVICE, LOKI_DL_CONNS ; /etc/loki ; units loki-engine / loki-ui ; binaire et aide CLI - updateRepo pointe sur R0m1k3/Loki (l'auto-update ne tirera plus les binaires AJEAN amont) Conservé à l'identique : le domaine ajean.link (service de tunnel amont), les littéraux de migration 0.7.x (migrate_07.go), RELEASE_NOTES.md et LICENSE (historique et licence de l'amont). go build/vet/test : verts.
72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package loki
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Le remplacement du binaire doit fonctionner MÊME si un écartement précédent
|
|
// est toujours là et impossible à supprimer (processus encore vivant dessus).
|
|
// Avec un nom fixe « .old », le renommage échouait alors en « Accès refusé »,
|
|
// que loki traduisait par « droits insuffisants, relance en administrateur » :
|
|
// un conseil faux, aucun privilège ne remplace une image en cours d'exécution.
|
|
func TestRenameAsideNeBloquePasSurUnAncienEcartement(t *testing.T) {
|
|
dir := t.TempDir()
|
|
exe := filepath.Join(dir, "loki.exe")
|
|
if err := os.WriteFile(exe, []byte("v1"), 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// Un écartement d'une mise à jour précédente occupe déjà le nom fixe.
|
|
if err := os.WriteFile(exe+".old", []byte("v0"), 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
aside, err := renameAside(exe)
|
|
if err != nil {
|
|
t.Fatalf("renameAside a échoué alors qu'un .old existe déjà : %v", err)
|
|
}
|
|
if aside == exe+".old" {
|
|
t.Error("nom d'écartement fixe : c'est précisément ce qui bloquait")
|
|
}
|
|
if !strings.HasPrefix(filepath.Base(aside), "loki.exe.old-") {
|
|
t.Errorf("nom inattendu : %s", aside)
|
|
}
|
|
if _, err := os.Stat(exe); !os.IsNotExist(err) {
|
|
t.Error("le binaire n'a pas été écarté")
|
|
}
|
|
// Deux écartements successifs ne doivent jamais se marcher dessus.
|
|
if err := os.WriteFile(exe, []byte("v2"), 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
aside2, err := renameAside(exe)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if aside2 == aside {
|
|
t.Error("deux écartements ont produit le même nom")
|
|
}
|
|
}
|
|
|
|
// Le ménage doit ramasser l'ancien nom fixe ET les noms uniques.
|
|
func TestRemoveOldBinaries(t *testing.T) {
|
|
dir := t.TempDir()
|
|
exe := filepath.Join(dir, "loki.exe")
|
|
for _, n := range []string{exe + ".old", exe + ".old-1", exe + ".old-2"} {
|
|
if err := os.WriteFile(n, []byte("x"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if err := os.WriteFile(exe, []byte("v1"), 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
removeOldBinaries(exe)
|
|
restes, _ := filepath.Glob(exe + ".old*")
|
|
if len(restes) != 0 {
|
|
t.Errorf("écartements non nettoyés : %v", restes)
|
|
}
|
|
if _, err := os.Stat(exe); err != nil {
|
|
t.Errorf("le binaire courant a été supprimé : %v", err)
|
|
}
|
|
}
|