mirror of
https://github.com/regclient/regclient.git
synced 2025-04-18 22:44:00 +03:00
122 lines
3.8 KiB
Go
122 lines
3.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func TestBlob(t *testing.T) {
|
|
repo := "ocidir://../../testdata/testrepo"
|
|
digBaseA, err := cobraTest(t, nil, "manifest", "get", repo+":b1", "--platform", "linux/amd64", "--format", "{{(index .Layers 0).Digest}}")
|
|
if err != nil {
|
|
t.Fatalf("failed getting layer digest: %v", err)
|
|
}
|
|
digBaseB, err := cobraTest(t, nil, "manifest", "get", repo+":b3", "--platform", "linux/amd64", "--format", "{{(index .Layers 0).Digest}}")
|
|
if err != nil {
|
|
t.Fatalf("failed getting layer digest: %v", err)
|
|
}
|
|
digConf1, err := cobraTest(t, nil, "manifest", "get", repo+":b1", "--platform", "linux/amd64", "--format", "{{.Config.Digest}}")
|
|
if err != nil {
|
|
t.Fatalf("failed getting layer digest: %v", err)
|
|
}
|
|
digConf3, err := cobraTest(t, nil, "manifest", "get", repo+":b3", "--platform", "linux/amd64", "--format", "{{.Config.Digest}}")
|
|
if err != nil {
|
|
t.Fatalf("failed getting layer digest: %v", err)
|
|
}
|
|
|
|
t.Run("Get", func(t *testing.T) {
|
|
// run a get request
|
|
out, err := cobraTest(t, nil, "blob", "get", "--format", "{{printPretty .}}", repo, digBaseA)
|
|
if err != nil {
|
|
t.Fatalf("failed to blob get: %v", err)
|
|
}
|
|
if out == "" {
|
|
t.Errorf("no blob output received")
|
|
}
|
|
// run a head request
|
|
out, err = cobraTest(t, nil, "blob", "head", "--format", "{{printPretty .}}", repo, digBaseA)
|
|
if err != nil {
|
|
t.Errorf("failed to blob head: %v", err)
|
|
}
|
|
if out == "" {
|
|
t.Errorf("no blob output received")
|
|
}
|
|
// get a file from the blob
|
|
out, err = cobraTest(t, nil, "blob", "get-file", repo, digBaseA, "base.txt")
|
|
if err != nil {
|
|
t.Errorf("failed to blob get-file: %v", err)
|
|
}
|
|
if out != "A" {
|
|
t.Errorf("unexpected blob get-file output, expected A, received %s", out)
|
|
}
|
|
})
|
|
|
|
t.Run("Put and Delete", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
bufStr := "hello world"
|
|
cobraOpts := cobraTestOpts{
|
|
stdin: bytes.NewBufferString(bufStr),
|
|
}
|
|
// put a blob
|
|
dig, err := cobraTest(t, &cobraOpts, "blob", "put", "--format", "{{println .Digest}}", "ocidir://"+dir)
|
|
if err != nil {
|
|
t.Fatalf("failed to put blob: %v", err)
|
|
}
|
|
// get the blob from the tempdir
|
|
out, err := cobraTest(t, nil, "blob", "get", "--format", "{{printPretty .}}", "ocidir://"+dir, dig)
|
|
if err != nil {
|
|
t.Errorf("failed to blob get: %v", err)
|
|
}
|
|
if out != bufStr {
|
|
t.Errorf("unexpected blob output, expected %s, received %s", bufStr, out)
|
|
}
|
|
// delete the blob
|
|
_, err = cobraTest(t, nil, "blob", "delete", "ocidir://"+dir, dig)
|
|
if err != nil {
|
|
t.Fatalf("failed to delete blob: %v", err)
|
|
}
|
|
// verify blob was deleted
|
|
_, err = cobraTest(t, nil, "blob", "get", "--format", "{{printPretty .}}", "ocidir://"+dir, dig)
|
|
if err == nil {
|
|
t.Errorf("get deleted blob did not fail")
|
|
}
|
|
})
|
|
|
|
t.Run("Copy", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
// copy the blob to the tempdir
|
|
_, err := cobraTest(t, nil, "blob", "copy", repo, "ocidir://"+dir, digBaseA)
|
|
if err != nil {
|
|
t.Fatalf("failed to blob copy: %v", err)
|
|
}
|
|
// get the blob from the tempdir
|
|
out, err := cobraTest(t, nil, "blob", "get", "--format", "{{printPretty .}}", "ocidir://"+dir, digBaseA)
|
|
if err != nil {
|
|
t.Errorf("failed to blob get: %v", err)
|
|
}
|
|
if out == "" {
|
|
t.Errorf("no blob output received")
|
|
}
|
|
})
|
|
|
|
t.Run("Diff", func(t *testing.T) {
|
|
// diff the layers between two images
|
|
out, err := cobraTest(t, nil, "blob", "diff-layer", repo, digBaseA, repo, digBaseB)
|
|
if err != nil {
|
|
t.Fatalf("failed to diff layers: %v", err)
|
|
}
|
|
if out == "" {
|
|
t.Errorf("no output received from diff-layer")
|
|
}
|
|
// diff the config between two images
|
|
out, err = cobraTest(t, nil, "blob", "diff-config", repo, digConf1, repo, digConf3)
|
|
if err != nil {
|
|
t.Fatalf("failed to diff config: %v", err)
|
|
}
|
|
if out == "" {
|
|
t.Errorf("no output received from diff-config")
|
|
}
|
|
})
|
|
|
|
}
|