mirror of
https://github.com/containers/podman.git
synced 2025-07-30 11:52:47 +08:00
Merge pull request #6929 from vrothberg/fix-9627
version/info: format: allow more json variants
This commit is contained in:
9
cmd/podman/parse/json.go
Normal file
9
cmd/podman/parse/json.go
Normal file
@ -0,0 +1,9 @@
|
||||
package parse
|
||||
|
||||
import "regexp"
|
||||
|
||||
var jsonFormatRegex = regexp.MustCompile(`^(\s*json\s*|\s*{{\s*json\s*\.\s*}}\s*)$`)
|
||||
|
||||
func MatchesJSONFormat(s string) bool {
|
||||
return jsonFormatRegex.Match([]byte(s))
|
||||
}
|
30
cmd/podman/parse/json_test.go
Normal file
30
cmd/podman/parse/json_test.go
Normal file
@ -0,0 +1,30 @@
|
||||
package parse
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestMatchesJSONFormat(t *testing.T) {
|
||||
tests := []struct {
|
||||
input string
|
||||
expected bool
|
||||
}{
|
||||
{"json", true},
|
||||
{" json", true},
|
||||
{"json ", true},
|
||||
{" json ", true},
|
||||
{"{{json .}}", true},
|
||||
{"{{ json .}}", true},
|
||||
{"{{json . }}", true},
|
||||
{" {{ json . }} ", true},
|
||||
{"{{json }}", false},
|
||||
{"{{json .", false},
|
||||
{"json . }}", false},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
assert.Equal(t, tt.expected, MatchesJSONFormat(tt.input))
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@ import (
|
||||
"os"
|
||||
"text/template"
|
||||
|
||||
"github.com/containers/libpod/v2/cmd/podman/parse"
|
||||
"github.com/containers/libpod/v2/cmd/podman/registry"
|
||||
"github.com/containers/libpod/v2/cmd/podman/validate"
|
||||
"github.com/containers/libpod/v2/pkg/domain/entities"
|
||||
@ -68,7 +69,7 @@ func info(cmd *cobra.Command, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if inFormat == "json" {
|
||||
if parse.MatchesJSONFormat(inFormat) {
|
||||
b, err := json.MarshalIndent(info, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/containers/buildah/pkg/formats"
|
||||
"github.com/containers/libpod/v2/cmd/podman/parse"
|
||||
"github.com/containers/libpod/v2/cmd/podman/registry"
|
||||
"github.com/containers/libpod/v2/cmd/podman/validate"
|
||||
"github.com/containers/libpod/v2/libpod/define"
|
||||
@ -41,7 +42,7 @@ func version(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
switch {
|
||||
case versionFormat == "json", versionFormat == "{{ json .}}":
|
||||
case parse.MatchesJSONFormat(versionFormat):
|
||||
s, err := json.MarshalToString(versions)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
. "github.com/containers/libpod/v2/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
. "github.com/onsi/gomega/gexec"
|
||||
)
|
||||
|
||||
var _ = Describe("Podman Info", func() {
|
||||
@ -35,11 +36,30 @@ var _ = Describe("Podman Info", func() {
|
||||
processTestResult(f)
|
||||
})
|
||||
|
||||
It("podman info json output", func() {
|
||||
session := podmanTest.Podman([]string{"info", "--format=json"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
It("podman info --format json", func() {
|
||||
tests := []struct {
|
||||
input string
|
||||
success bool
|
||||
exitCode int
|
||||
}{
|
||||
{"json", true, 0},
|
||||
{" json", true, 0},
|
||||
{"json ", true, 0},
|
||||
{" json ", true, 0},
|
||||
{"{{json .}}", true, 0},
|
||||
{"{{ json .}}", true, 0},
|
||||
{"{{json . }}", true, 0},
|
||||
{" {{ json . }} ", true, 0},
|
||||
{"{{json }}", false, 125},
|
||||
{"{{json .", false, 125},
|
||||
{"json . }}", false, 0}, // Note: this does NOT fail but produces garbage
|
||||
}
|
||||
for _, tt := range tests {
|
||||
session := podmanTest.Podman([]string{"info", "--format", tt.input})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(tt.exitCode))
|
||||
Expect(session.IsJSONOutputValid()).To(Equal(tt.success))
|
||||
}
|
||||
})
|
||||
|
||||
It("podman info --format GO template", func() {
|
||||
|
@ -55,17 +55,29 @@ var _ = Describe("Podman version", func() {
|
||||
})
|
||||
|
||||
It("podman version --format json", func() {
|
||||
session := podmanTest.Podman([]string{"version", "--format", "json"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
Expect(session.IsJSONOutputValid()).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman version --format json", func() {
|
||||
session := podmanTest.Podman([]string{"version", "--format", "{{ json .}}"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
Expect(session.IsJSONOutputValid()).To(BeTrue())
|
||||
tests := []struct {
|
||||
input string
|
||||
success bool
|
||||
exitCode int
|
||||
}{
|
||||
{"json", true, 0},
|
||||
{" json", true, 0},
|
||||
{"json ", true, 0},
|
||||
{" json ", true, 0},
|
||||
{"{{json .}}", true, 0},
|
||||
{"{{ json .}}", true, 0},
|
||||
{"{{json . }}", true, 0},
|
||||
{" {{ json . }} ", true, 0},
|
||||
{"{{json }}", false, 125},
|
||||
{"{{json .", false, 125},
|
||||
{"json . }}", false, 0}, // Note: this does NOT fail but produces garbage
|
||||
}
|
||||
for _, tt := range tests {
|
||||
session := podmanTest.Podman([]string{"version", "--format", tt.input})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(tt.exitCode))
|
||||
Expect(session.IsJSONOutputValid()).To(Equal(tt.success))
|
||||
}
|
||||
})
|
||||
|
||||
It("podman version --format GO template", func() {
|
||||
|
Reference in New Issue
Block a user