diff --git a/coverage-badge.svg b/coverage-badge.svg index 1dac990..0001913 100644 --- a/coverage-badge.svg +++ b/coverage-badge.svg @@ -2,5 +2,5 @@ coverage - 38.6% + 57.4% diff --git a/tests/integration/reposervice_forceupdate_test.go b/tests/integration/reposervice_forceupdate_test.go new file mode 100644 index 0000000..a0f157c --- /dev/null +++ b/tests/integration/reposervice_forceupdate_test.go @@ -0,0 +1,114 @@ +package integration + +import ( + "io" + "os" + "path" + "testing" + + "code.alt-gnome.ru/aides-infra/aides-repo-api/internal/models" + "code.alt-gnome.ru/aides-infra/aides-repo-api/internal/services/reposervice" + "github.com/stretchr/testify/assert" +) + +func TestRepoService_ForceUpdate(t *testing.T) { + db := prepareDb(t) + config := prepareConfig() + + os.MkdirAll(config.GetUploadDir(), os.ModePerm) + + taskPath := path.Join(config.GetUploadDir(), "tasks/1") + + os.MkdirAll(taskPath, os.ModePerm) + defer os.RemoveAll(config.GetUploadDir()) + + fileName := "example-foo-1.0.0-alt1.x86_64.rpm" + + source, err := os.Open(path.Join("./test_rpms", fileName)) + assert.NoError(t, err) + destination, err := os.Create(path.Join(taskPath, fileName)) + assert.NoError(t, err) + defer destination.Close() + _, err = io.Copy(destination, source) + + source.Close() + destination.Close() + + gitRepo := &models.GitRepo{ + Name: "example-foo", + } + + altRepo := &models.ALTRepo{ + Name: "Sisyphus", + } + + db.Create(&models.GitRepoAltRepoTask{ + Repo: gitRepo, + ALTRepo: altRepo, + CurrentTask: &models.Task{ + Status: models.StatusCompleted, + Files: []models.RPMFile{ + { + Filename: "---", + Name: "example-foo", + Version: "0.9.9", + Release: "1", + Arch: "x86_64", + Epoch: 0, + }, + }, + }, + LastTask: &models.Task{ + Status: models.StatusCompleted, + Files: []models.RPMFile{ + { + Filename: fileName, + Name: "example-foo", + Version: "1.0.0", + Release: "1", + Arch: "x86_64", + Epoch: 0, + }, + }, + }, + }) + + service := reposervice.New( + db, + config, + ) + + // EXECUTE + err = service.ForceUpdate() + + assert.NoError(t, err) + // TODO: check db + repoBasePath := path.Join(config.GetUploadDir(), "repo", "Sisyphus") + x86_64BasePath := path.Join(repoBasePath, "x86_64", "base") + x86_64RPMSPath := path.Join(repoBasePath, "x86_64", "RPMS.aides") + noarchBasePath := path.Join(repoBasePath, "noarch", "base") + + expectedFiles := []string{ + path.Join(x86_64BasePath, "pkglist.aides"), + path.Join(x86_64BasePath, "pkglist.aides.bz2"), + path.Join(x86_64BasePath, "pkglist.aides.xz"), + path.Join(x86_64BasePath, "release"), + path.Join(x86_64BasePath, "release.aides"), + path.Join(x86_64RPMSPath, fileName), + path.Join(noarchBasePath, "pkglist.aides"), + path.Join(noarchBasePath, "pkglist.aides.bz2"), + path.Join(noarchBasePath, "pkglist.aides.xz"), + path.Join(noarchBasePath, "release"), + path.Join(noarchBasePath, "release.aides"), + } + + for _, filePath := range expectedFiles { + _, err := os.Stat(filePath) + assert.NoErrorf(t, err, "Файл %s не найден", filePath) + } + + rpmPath := path.Join(x86_64RPMSPath, fileName) + linkDest, err := os.Readlink(rpmPath) + assert.NoError(t, err) + assert.Equal(t, path.Join("../../../../tasks/1", fileName), linkDest) +}