From 61cf111a2267f63afc1bff81e728f2d04d1d54f9 Mon Sep 17 00:00:00 2001 From: Anatol Pomozov Date: Wed, 2 Aug 2023 10:55:54 -0700 Subject: [PATCH] Check that provided mirrolist file contains some mirror urls Closes #86 --- urls.go | 11 ++++++++--- urls_test.go | 35 +++++++++++++++++++++-------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/urls.go b/urls.go index 13123f3..1ebaab8 100644 --- a/urls.go +++ b/urls.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "fmt" "log" "os" "strings" @@ -67,8 +68,12 @@ func (r *Repo) getMirrorlistURLs() ([]string, error) { } urls, err := parseMirrorlistURLs(file) - if err == nil { - r.URLs = urls + if err != nil { + return nil, err + } + if len(urls) == 0 { + return nil, fmt.Errorf("mirrorlist file %s contains no mirrors", r.Mirrorlist) } - return urls, err + r.URLs = urls + return urls, nil } diff --git a/urls_test.go b/urls_test.go index bee3c6f..e4b4ab3 100644 --- a/urls_test.go +++ b/urls_test.go @@ -60,14 +60,7 @@ func TestGetCurrentURLs(t *testing.T) { temp := t.TempDir() tmpMirrorfile := path.Join(temp, "tmpMirrorFile") - f, err := os.Create(tmpMirrorfile) - if err == nil { - f.Write([]byte(mirrorlist)) - f.Close() - f, err = os.Open(tmpMirrorfile) - } - - require.NoError(t, err) + require.NoError(t, os.WriteFile(tmpMirrorfile, []byte(mirrorlist), 0o644)) config := parseConfig([]byte(` cache_dir: ` + temp + ` @@ -80,15 +73,29 @@ repos: `)) archTest := config.Repos["archTest"] - urls := archTest.getUrls() - - require.Equal(t, urls, expectedURLs) + require.Equal(t, expectedURLs, archTest.getUrls()) fileInfo, _ := os.Stat(tmpMirrorfile) - expectedModTime := fileInfo.ModTime() - gotModTime := archTest.LastModificationTime - require.Equal(t, gotModTime, expectedModTime) + require.Equal(t, fileInfo.ModTime(), archTest.LastModificationTime) gotCheckTime := archTest.LastMirrorlistCheck require.LessOrEqual(t, time.Since(gotCheckTime), 3*time.Second) } + +func TestEmptyMirrorlist(t *testing.T) { + temp := t.TempDir() + tmpMirrorfile := path.Join(temp, "tmpMirrorFile") + + require.NoError(t, os.WriteFile(tmpMirrorfile, []byte(""), 0o644)) + + config := parseConfig([]byte(` +cache_dir: ` + temp + ` +repos: + archTest: + mirrorlist: ` + tmpMirrorfile + ` +`)) + archTest := config.Repos["archTest"] + urls, err := archTest.getMirrorlistURLs() + require.Error(t, err) + require.Nil(t, urls) +}