Fixes format inconsistencies with docker for certain history fields

Closes #17767
Closes #17768

System test for image list and history dates

* Changed field separator in the test to `;` for easier parsing
* Converted date output from image history and image list to be comparable

Signed-off-by: rbagd <mail@rbagd.eu>
This commit is contained in:
rbagd 2023-04-19 00:20:47 +02:00
parent 6c32bf18d0
commit 6e0cf93447
3 changed files with 23 additions and 11 deletions

View File

@ -3,9 +3,7 @@ package images
import (
"fmt"
"os"
"strings"
"time"
"unicode"
"github.com/containers/common/pkg/report"
"github.com/containers/podman/v4/cmd/podman/common"
@ -149,9 +147,7 @@ func (h historyReporter) Created() string {
}
func (h historyReporter) Size() string {
s := units.HumanSizeWithPrecision(float64(h.ImageHistoryLayer.Size), 3)
i := strings.LastIndexFunc(s, unicode.IsNumber)
return s[:i+1] + " " + s[i+1:]
return units.HumanSizeWithPrecision(float64(h.ImageHistoryLayer.Size), 3)
}
func (h historyReporter) CreatedBy() string {
@ -169,7 +165,7 @@ func (h historyReporter) ID() string {
}
func (h historyReporter) CreatedAt() string {
return time.Unix(h.ImageHistoryLayer.Created.Unix(), 0).UTC().String()
return time.Unix(h.ImageHistoryLayer.Created.Unix(), 0).Format(time.RFC3339)
}
func (h historyReporter) CreatedSince() string {

View File

@ -44,6 +44,11 @@ var _ = Describe("Podman history", func() {
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToStringArray()).ToNot(BeEmpty())
session = podmanTest.Podman([]string{"history", "--format", "{{.CreatedAt}};{{.Size}}", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToString()).To(MatchRegexp("[0-9-]{10}T[0-9:]{8}[Z0-9+:-]+;[0-9.]+[MG]*B( .+)?"))
})
It("podman history with human flag", func() {

View File

@ -57,15 +57,26 @@ size | -\\\?[0-9]\\\+
@test "podman image history Created" {
# Values from image LIST
run_podman image list --format '{{.CreatedSince}}--{{.CreatedAt}}' $IMAGE
run_podman image list --format '{{.CreatedSince}};{{.CreatedAt}}' $IMAGE
from_imagelist="$output"
assert "$from_imagelist" =~ "^[0-9].* ago--[0-9]+-[0-9]+-[0-9]+ [0-9:]+ " \
assert "$from_imagelist" =~ "^[0-9].* ago;[0-9]+-[0-9]+-[0-9]+ [0-9:]+ " \
"CreatedSince and CreatedAt look reasonable"
# Values from image HISTORY
run_podman image history --format '{{.CreatedSince}}--{{.CreatedAt}}' $IMAGE
assert "${lines[0]}" == "$from_imagelist" \
"CreatedSince and CreatedAt from image history should == image list"
run_podman image history --format '{{.CreatedSince}};{{.CreatedAt}}' $IMAGE
from_imagehistory="${lines[0]}"
imagelist_since=$(echo "$from_imagelist" | cut -d';' -f1)
imagehist_since=$(echo "$from_imagehistory" | cut -d';' -f1)
assert "$imagehist_since" == "$imagelist_since" \
"CreatedSince from image history should == image list"
imagelist_at=$(date --rfc-3339=seconds -f <(echo "$from_imagelist" | cut -d';' -f2 | sed 's/ UTC//'))
imagehist_at=$(date --rfc-3339=seconds -f <(echo "$from_imagehistory" | cut -d';' -f2))
assert "$imagehist_at" == "$imagelist_at" \
"CreatedAt from image history should == image list"
}
# vim: filetype=sh