Skip to content

Commit

Permalink
Unification of until filter across list/prune endpoints
Browse files Browse the repository at this point in the history
Signed-off-by: Jakub Guzik <[email protected]>
  • Loading branch information
jmguzik committed Mar 23, 2021
1 parent 5eab1b0 commit 914218c
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 13 deletions.
9 changes: 1 addition & 8 deletions libpod/image/prune.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ package image
import (
"context"
"strings"
"time"

"github.com/containers/podman/v3/libpod/events"
"github.com/containers/podman/v3/pkg/domain/entities/reports"
"github.com/containers/podman/v3/pkg/timetype"
"github.com/containers/podman/v3/pkg/util"
"github.com/containers/storage"
"github.com/pkg/errors"
Expand All @@ -26,15 +24,10 @@ func generatePruneFilterFuncs(filter, filterValue string) (ImageFilter, error) {
}, nil

case "until":
ts, err := timetype.GetTimestamp(filterValue, time.Now())
until, err := util.ComputeUntilTimestamp([]string{filterValue})
if err != nil {
return nil, err
}
seconds, nanoseconds, err := timetype.ParseTimestamps(ts, 0)
if err != nil {
return nil, err
}
until := time.Unix(seconds, nanoseconds)
return func(i *Image) bool {
if !until.IsZero() && i.Created().After((until)) {
return true
Expand Down
2 changes: 1 addition & 1 deletion libpod/network/netconflist.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ func IfPassesPruneFilter(config *config.Config, netconf *libcni.NetworkConfigLis
case "label":
return util.MatchLabelFilters(filterValues, GetNetworkLabels(netconf)), nil
case "until":
until, err := util.ComputeUntilTimestamp(key, filterValues)
until, err := util.ComputeUntilTimestamp(filterValues)
if err != nil {
return false, err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/domain/filters/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ func GenerateContainerFilterFuncs(filter string, filterValues []string, r *libpo
return false
}, nil
case "until":
until, err := util.ComputeUntilTimestamp(filter, filterValues)
until, err := util.ComputeUntilTimestamp(filterValues)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/util/filters.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ import (
)

// ComputeUntilTimestamp extracts until timestamp from filters
func ComputeUntilTimestamp(filter string, filterValues []string) (time.Time, error) {
func ComputeUntilTimestamp(filterValues []string) (time.Time, error) {
invalid := time.Time{}
if len(filterValues) != 1 {
return invalid, errors.Errorf("specify exactly one timestamp for %s", filter)
return invalid, errors.Errorf("specify exactly one timestamp for until")
}
ts, err := timetype.GetTimestamp(filterValues[0], time.Now())
if err != nil {
Expand Down
38 changes: 37 additions & 1 deletion pkg/util/filters_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package util

import "testing"
import (
"testing"
)

func TestMatchLabelFilters(t *testing.T) {
testLabels := map[string]string{
Expand Down Expand Up @@ -75,3 +77,37 @@ func TestMatchLabelFilters(t *testing.T) {
})
}
}

func TestComputeUntilTimestamp(t *testing.T) {
tests := []struct {
name string
args []string
wantErr bool
}{
{
name: "Return error when more values in list",
args: []string{"5h", "6s"},
wantErr: true,
},
{
name: "Return error when invalid time",
args: []string{"invalidTime"},
wantErr: true,
},
{
name: "Do not return error when correct time format supplied",
args: []string{"44m"},
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
_, err := ComputeUntilTimestamp(tt.args)
if (err != nil) != tt.wantErr {
t.Errorf("ComputeUntilTimestamp() error = %v, wantErr %v", err, tt.wantErr)
return
}
})
}
}

0 comments on commit 914218c

Please sign in to comment.