From 292125a8ff88cf09446102db05ef233ebf7929ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=28=D0=A5?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D1=8B=D1=87=D0=AA=29=20=D0=A5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Tue, 26 Aug 2025 23:41:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=20dlc?= =?UTF-8?q?ache=5Ftest.go=20=E2=84=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- pkg/dlcache/dlcache.go | 5 ++--- pkg/dlcache/dlcache_prod.go | 37 ++++++++++++++++++++++++++++++++ pkg/dlcache/dlcache_test.go | 1 - pkg/dlcache/dlcache_test_impl.go | 28 ++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 pkg/dlcache/dlcache_prod.go create mode 100644 pkg/dlcache/dlcache_test_impl.go diff --git a/Makefile b/Makefile index 68fa3f7..58d3a6a 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ i18n: bash scripts/i18n-badge.sh test-coverage: - go test ./... -v -coverpkg=./... -coverprofile=coverage.out + go test -tags=test ./... -v -coverpkg=./... -coverprofile=coverage.out bash scripts/coverage-badge.sh update-deps-cve: diff --git a/pkg/dlcache/dlcache.go b/pkg/dlcache/dlcache.go index 1a1cbb0..4a775de 100644 --- a/pkg/dlcache/dlcache.go +++ b/pkg/dlcache/dlcache.go @@ -25,7 +25,6 @@ import ( "path/filepath" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" - "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" ) type Config interface { @@ -62,8 +61,8 @@ func (dc *DownloadCache) New(ctx context.Context, id string) (string, error) { } } - // Используем специальную функцию для создания каталогов с setgid битом - err = utils.EnsureTempDirWithRootOwner(itemPath, 0o2775) + // Создаем директорию с правильными правами (различается для prod и тестов) + err = createDir(itemPath, 0o2775) if err != nil { return "", err } diff --git a/pkg/dlcache/dlcache_prod.go b/pkg/dlcache/dlcache_prod.go new file mode 100644 index 0000000..3040761 --- /dev/null +++ b/pkg/dlcache/dlcache_prod.go @@ -0,0 +1,37 @@ +//go:build !test + +// ALR - Any Linux Repository +// Copyright (C) 2025 The ALR Authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package dlcache + +import ( + "os" + "strings" + + "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" +) + +// createDir создает директорию с правильными правами для production +func createDir(itemPath string, mode os.FileMode) error { + // Используем специальную функцию для создания каталогов с setgid битом только для /tmp/alr + // В остальных случаях используем обычное создание директории + if strings.HasPrefix(itemPath, "/tmp/alr") { + return utils.EnsureTempDirWithRootOwner(itemPath, mode) + } else { + return os.MkdirAll(itemPath, mode) + } +} \ No newline at end of file diff --git a/pkg/dlcache/dlcache_test.go b/pkg/dlcache/dlcache_test.go index b10bbd1..532450e 100644 --- a/pkg/dlcache/dlcache_test.go +++ b/pkg/dlcache/dlcache_test.go @@ -26,7 +26,6 @@ import ( "io" "os" "path/filepath" - "strings" "testing" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" diff --git a/pkg/dlcache/dlcache_test_impl.go b/pkg/dlcache/dlcache_test_impl.go new file mode 100644 index 0000000..2e8581b --- /dev/null +++ b/pkg/dlcache/dlcache_test_impl.go @@ -0,0 +1,28 @@ +//go:build test + +// ALR - Any Linux Repository +// Copyright (C) 2025 The ALR Authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package dlcache + +import ( + "os" +) + +// createDir создает директорию с обычными правами для тестирования +func createDir(itemPath string, mode os.FileMode) error { + return os.MkdirAll(itemPath, mode) +} \ No newline at end of file