Skip to content

Commit

Permalink
Merge pull request #20 from bechampion/nonisodateparse
Browse files Browse the repository at this point in the history
NOJ - Fix date parsing
  • Loading branch information
gr211 authored Jul 1, 2024
2 parents d6f8d90 + b6f5c0a commit 0553ec6
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 4 deletions.
16 changes: 12 additions & 4 deletions systemd/checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ type ClamConfDetails struct {
DailyCld time.Time
}

func parseDate(src string) (time.Time, error) {
const layout = "Mon Jan 2 15:04:05 2006"
return time.Parse(layout, src)
}

func parseDailyCvdLine(line string) []string {
re := regexp.MustCompile(`^daily.c[l|v]d: version (.*), sigs: (.*), built on (.*)`)
return re.FindStringSubmatch(line)
}

func GetClamConfDetails() (ClamConfDetails, error) {
cmd := exec.Command("clamconf")
var out bytes.Buffer
Expand All @@ -78,17 +88,15 @@ func GetClamConfDetails() (ClamConfDetails, error) {
return ClamConfDetails{}, errors.New(fmt.Sprintf("%v", err))
}

const layout = "Mon Jan 02 15:04:05 2006"
lines := strings.Split(out.String(), "\n")
re := regexp.MustCompile(`^daily.c[l|v]d: version (.*), sigs: (.*), built on (.*)`)

for i := range lines {
line := lines[i]
finds := re.FindStringSubmatch(line)
finds := parseDailyCvdLine(line)

if len(finds) > 0 {
cd := ClamConfDetails{}
cd.DailyCld, _ = time.Parse(layout, finds[3])
cd.DailyCld, _ = parseDate(finds[3])
cd.version = finds[1]
cd.sigs = finds[2]
return cd, nil
Expand Down
55 changes: 55 additions & 0 deletions systemd/checks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,58 @@ func fileErrorCheck(t *testing.T, when time.Time) error {

return DbFileAgeCheck(clamavDbFile)
}

func TestDatesParsing(t *testing.T) {
// extra space before day
if _, err := parseDate("Mon Jul 1 10:40:06 2024"); err != nil {
t.Errorf("%v", err)
}

// no extra space before day
if _, err := parseDate("Mon Jul 1 10:40:06 2024"); err != nil {
t.Errorf("%v", err)
}

if _, err := parseDate("Mon Jul 11 10:40:06 2024"); err != nil {
t.Errorf("%v", err)
}

if _, err := parseDate("invalid"); err == nil {
t.Errorf("should have been an invalid date%s", "invalid")
}
}

func parseDailyLine(t *testing.T, line string) {
var results = parseDailyCvdLine(line)
if len(results) != 4 {
t.Errorf("should have 4 results: %v", results)
}

cd := ClamConfDetails{}
cd.DailyCld, _ = parseDate(results[3])
cd.version = results[1]
cd.sigs = results[2]

if cd.version != "27323" {
t.Errorf("version should have been 27323: %v", cd.version)
}

if cd.sigs != "2063707" {
t.Errorf("sigs should have been 2063707: %v", cd.sigs)
}

date, _ := parseDate("Mon Jul 1 10:40:06 2024")
if cd.DailyCld != date {
t.Errorf("sigs should have been Mon Jul 1 10:40:06 2024: %v", cd.DailyCld)
}
}

func TestParseDailyCldLine(t *testing.T) {
var line = "daily.cld: version 27323, sigs: 2063707, built on Mon Jul 1 10:40:06 2024"
parseDailyLine(t, line)
}

func TestParseDailyCvdLine(t *testing.T) {
var line = "daily.cvd: version 27323, sigs: 2063707, built on Mon Jul 1 10:40:06 2024"
parseDailyLine(t, line)
}

0 comments on commit 0553ec6

Please sign in to comment.