Updated for go 1.16 modules
This commit is contained in:
parent
8278d7b471
commit
38d9c881b3
25 changed files with 25 additions and 19 deletions
14
pkg/job/job.go
Normal file
14
pkg/job/job.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
package job
|
||||
|
||||
import "fmt"
|
||||
|
||||
// Job is a bareos job
|
||||
type Job struct {
|
||||
Name string
|
||||
Timestamp uint64
|
||||
Success bool
|
||||
}
|
||||
|
||||
func (job Job) String() string {
|
||||
return fmt.Sprintf("Job { Name: \"%s\", Timestamp: \"%d\", Success: \"%t\" }", job.Name, job.Timestamp, job.Success)
|
||||
}
|
33
pkg/job/job_test.go
Normal file
33
pkg/job/job_test.go
Normal file
|
@ -0,0 +1,33 @@
|
|||
package job
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestJob_String(t *testing.T) {
|
||||
type fields struct {
|
||||
Name string
|
||||
Timestamp uint64
|
||||
Success bool
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
want string
|
||||
}{
|
||||
{"default job", fields{}, "Job { Name: \"\", Timestamp: \"0\", Success: \"false\" }"},
|
||||
{"a job", fields{Name: "a", Timestamp: 10, Success: true}, "Job { Name: \"a\", Timestamp: \"10\", Success: \"true\" }"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
job := Job{
|
||||
Name: tt.fields.Name,
|
||||
Timestamp: tt.fields.Timestamp,
|
||||
Success: tt.fields.Success,
|
||||
}
|
||||
if got := job.String(); got != tt.want {
|
||||
t.Errorf("Job.String() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
35
pkg/job/utils.go
Normal file
35
pkg/job/utils.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
package job
|
||||
|
||||
// KeepOldestOnly filters a job list and keeps only the most recent entry for a job name
|
||||
func KeepOldestOnly(jobs []Job) (results []Job) {
|
||||
outerLoop:
|
||||
for i := 0; i < len(jobs); i++ {
|
||||
job := jobs[i]
|
||||
for j := 0; j < len(results); j++ {
|
||||
result := results[j]
|
||||
if result.Name == job.Name {
|
||||
continue outerLoop
|
||||
}
|
||||
}
|
||||
for j := i + 1; j < len(jobs); j++ {
|
||||
sec := jobs[j]
|
||||
if sec.Name == job.Name && sec.Timestamp > job.Timestamp {
|
||||
job = sec
|
||||
}
|
||||
}
|
||||
results = append(results, job)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// KeepSuccessOnly returns only the successful jobs from a job list (suiatble to write a new spool file)
|
||||
func KeepSuccessOnly(jobs []Job) (result []Job) {
|
||||
result = make([]Job, 0)
|
||||
for i := 0; i < len(jobs); i++ {
|
||||
job := jobs[i]
|
||||
if job.Success {
|
||||
result = append(result, job)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
68
pkg/job/utils_test.go
Normal file
68
pkg/job/utils_test.go
Normal file
|
@ -0,0 +1,68 @@
|
|||
package job
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestKeepOldestOnly(t *testing.T) {
|
||||
emptyList := []Job{}
|
||||
oneJob := []Job{{Name: "a", Timestamp: 10, Success: true}}
|
||||
twoJobs := []Job{
|
||||
{Name: "a", Timestamp: 5, Success: true},
|
||||
{Name: "a", Timestamp: 10, Success: true},
|
||||
}
|
||||
threeJobs := []Job{
|
||||
{Name: "a", Timestamp: 5, Success: true},
|
||||
{Name: "a", Timestamp: 10, Success: true},
|
||||
{Name: "a", Timestamp: 8, Success: false},
|
||||
}
|
||||
type args struct {
|
||||
jobs []Job
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want []Job
|
||||
}{
|
||||
{"empty list", args{emptyList}, nil},
|
||||
{"one job", args{oneJob}, oneJob},
|
||||
{"two jobs", args{twoJobs}, oneJob},
|
||||
{"three jobs", args{threeJobs}, oneJob},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := KeepOldestOnly(tt.args.jobs); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("KeepOldestOnly() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestKeepSuccessOnly(t *testing.T) {
|
||||
emptyList := []Job{}
|
||||
oneJob := []Job{{Name: "a", Timestamp: 10, Success: true}}
|
||||
twoJobs := []Job{
|
||||
{Name: "a", Timestamp: 10, Success: true},
|
||||
{Name: "a", Timestamp: 5, Success: false},
|
||||
}
|
||||
type args struct {
|
||||
jobs []Job
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
wantResult []Job
|
||||
}{
|
||||
{"empty list", args{emptyList}, emptyList},
|
||||
{"one job", args{oneJob}, oneJob},
|
||||
{"two jobs", args{twoJobs}, oneJob},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if gotResult := KeepSuccessOnly(tt.args.jobs); !reflect.DeepEqual(gotResult, tt.wantResult) {
|
||||
t.Errorf("KeepSuccessOnly() = %v, want %v", gotResult, tt.wantResult)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue