- новая категория fail2ban: jail.local, jail.d (в т.ч. 3x-ipl.local), IP-лимит 3x-ui (filter.d/action.d/3x-ipl.conf), свои *.local; при восстановлении создаются логи 3xipl*.log, без которых jail не поднимается - xui: свои *.dat из /usr/local/x-ui/bin (ipcheck, discord-*) — на них ссылается роутинг; штатные geo-файлы релиза не бэкапятся - recipe 3x-ui больше не очищает /usr/local/x-ui и не стирает восстановленные файлы - маски (*, ?) в paths и keep_binaries каталога - provision ставит nftables вместе с fail2ban - .gitattributes: LF во всех файлах Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
83832fc734
commit
cbd3cde01d
8 files changed
+503
-400
No files matched your search
@@ -0,0 +1,53 @@
|
||||
package agent
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"testing"
|
||||
|
||||
"gitea.hsrv.site/mrleo1nid/backup-master/internal/archive"
|
||||
"gitea.hsrv.site/mrleo1nid/backup-master/internal/catalog"
|
||||
)
|
||||
|
||||
func TestExpandPaths(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
for _, n := range []string{"ipcheck.dat", "geoip.dat", "x.txt"} {
|
||||
if err := os.WriteFile(filepath.Join(dir, n), nil, 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
got := expandPaths([]string{filepath.Join(dir, "*.dat"), "/etc/x-ui", filepath.Join(dir, "*.none")})
|
||||
want := []string{filepath.Join(dir, "geoip.dat"), filepath.Join(dir, "ipcheck.dat"), "/etc/x-ui"}
|
||||
if !slices.Equal(got, want) {
|
||||
t.Fatalf("expandPaths = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// Свои geo-файлы попадают в бэкап, штатные из релиза 3x-ui — нет.
|
||||
func TestXUIGeoExcludes(t *testing.T) {
|
||||
cat, err := catalog.Default()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s := cat.Find("xui")
|
||||
skip := archive.NewMatcher(cat.Exclude, s.Exclude)
|
||||
cases := map[string]bool{
|
||||
"/usr/local/x-ui/bin/ipcheck.dat": false,
|
||||
"/usr/local/x-ui/bin/discord-geosite.dat": false,
|
||||
"/usr/local/x-ui/bin/geoip.dat": true,
|
||||
"/usr/local/x-ui/bin/geosite_RU.dat": true,
|
||||
"/usr/local/x-ui/bin/geoip_IR.dat": true,
|
||||
"/usr/local/x-ui/bin/ipcheck.dat.bak": true,
|
||||
"/etc/x-ui/x-ui.db": true,
|
||||
}
|
||||
for p, want := range cases {
|
||||
if got := skip.Match(p); got != want {
|
||||
t.Errorf("exclude(%s) = %v, want %v", p, got, want)
|
||||
}
|
||||
}
|
||||
f2b := cat.Find("fail2ban")
|
||||
if f2b == nil || !slices.Contains(f2b.Paths, "/etc/fail2ban/jail.d") || !slices.Contains(f2b.Paths, "/etc/fail2ban/filter.d/3x-ipl.conf") {
|
||||
t.Fatalf("категория fail2ban: %+v", f2b)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user