mirror of https://github.com/containers/podman.git
139 lines
3.6 KiB
Go
139 lines
3.6 KiB
Go
package compression
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/containers/podman/v5/pkg/machine/define"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func Test_compressionFromFile(t *testing.T) {
|
|
type args struct {
|
|
path string
|
|
}
|
|
var tests = []struct {
|
|
name string
|
|
args args
|
|
want ImageCompression
|
|
}{
|
|
{
|
|
name: "xz",
|
|
args: args{
|
|
path: "/tmp/foo.xz",
|
|
},
|
|
want: Xz,
|
|
},
|
|
{
|
|
name: "gzip",
|
|
args: args{
|
|
path: "/tmp/foo.gz",
|
|
},
|
|
want: Gz,
|
|
},
|
|
{
|
|
name: "bz2",
|
|
args: args{
|
|
path: "/tmp/foo.bz2",
|
|
},
|
|
want: Bz2,
|
|
},
|
|
{
|
|
name: "default is zstd",
|
|
args: args{
|
|
path: "/tmp/foo",
|
|
},
|
|
want: Zstd,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := KindFromFile(tt.args.path); got != tt.want {
|
|
t.Errorf("KindFromFile() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestImageCompression_String(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
c ImageCompression
|
|
want string
|
|
}{
|
|
{
|
|
name: "xz",
|
|
c: Xz,
|
|
want: "xz",
|
|
},
|
|
{
|
|
name: "gz",
|
|
c: Gz,
|
|
want: "gz",
|
|
},
|
|
{
|
|
name: "bz2",
|
|
c: Bz2,
|
|
want: "bz2",
|
|
},
|
|
{
|
|
name: "zip",
|
|
c: Zip,
|
|
want: "zip",
|
|
},
|
|
{
|
|
name: "zstd is default",
|
|
c: 99,
|
|
want: "zst",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := tt.c.String(); got != tt.want {
|
|
t.Errorf("String() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_Decompress(t *testing.T) {
|
|
type args struct {
|
|
src string
|
|
dst string
|
|
}
|
|
|
|
type want string
|
|
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want want
|
|
}{
|
|
{name: "zip", args: args{src: "./testdata/sample.zip", dst: "./testdata/hellozip"}, want: "zip\n"},
|
|
{name: "zip with trailing zeros", args: args{src: "./testdata/sample-withzeros.zip", dst: "./testdata/hellozip-withzeros"}, want: "zip\n\x00\x00\x00\x00\x00\x00"},
|
|
{name: "xz", args: args{src: "./testdata/sample.xz", dst: "./testdata/helloxz"}, want: "xz\n"},
|
|
{name: "xz with trailing zeros", args: args{src: "./testdata/sample-withzeros.xz", dst: "./testdata/helloxz-withzeros"}, want: "xz\n\x00\x00\x00\x00\x00\x00\x00"},
|
|
{name: "gzip", args: args{src: "./testdata/sample.gz", dst: "./testdata/hellogz"}, want: "gzip\n"},
|
|
{name: "gzip with trailing zeros", args: args{src: "./testdata/sample-withzeros.gz", dst: "./testdata/hellogzip-withzeros"}, want: "gzip\n\x00\x00\x00\x00\x00"},
|
|
{name: "bzip2", args: args{src: "./testdata/sample.bz2", dst: "./testdata/hellobz2"}, want: "bzip2\n"},
|
|
{name: "bzip2 with trailing zeros", args: args{src: "./testdata/sample-withzeros.bz2", dst: "./testdata/hellobz2-withzeros"}, want: "bzip2\n\x00\x00\x00\x00"},
|
|
{name: "zstd", args: args{src: "./testdata/sample.zst", dst: "./testdata/hellozstd"}, want: "zstd\n"},
|
|
{name: "zstd with trailing zeros", args: args{src: "./testdata/sample-withzeros.zst", dst: "./testdata/hellozstd-withzeros"}, want: "zstd\n\x00\x00\x00\x00\x00"},
|
|
{name: "uncompressed", args: args{src: "./testdata/sample.uncompressed", dst: "./testdata/hellouncompressed"}, want: "uncompressed\n"},
|
|
{name: "uncompressed with trailing zeros", args: args{src: "./testdata/sample-withzeros.uncompressed", dst: "./testdata/hellozuncompressed-withzeros"}, want: "uncompressed\n\x00\x00\x00\x00\x00\x00\x00"},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
srcVMFile := &define.VMFile{Path: tt.args.src}
|
|
dstFilePath := tt.args.dst
|
|
defer os.Remove(dstFilePath)
|
|
err := Decompress(srcVMFile, dstFilePath)
|
|
require.NoError(t, err)
|
|
data, err := os.ReadFile(dstFilePath)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, string(tt.want), string(data))
|
|
})
|
|
}
|
|
}
|