isula-build/patch/0079-bugfix-fix-when-load-separated-image-error-return.patch
DCCooper 3d943142b3 isula-build:support save/load separated image
reason: 1. support save/load separated image
        2. add relative test cases and bugfixes

Signed-off-by: DCCooper <1866858@gmail.com>
2021-11-02 12:40:19 +08:00

204 lines
5.5 KiB
Diff

From c5fe173afd31636bf014dac31f6e601d91e1ae53 Mon Sep 17 00:00:00 2001
From: DCCooper <1866858@gmail.com>
Date: Sat, 30 Oct 2021 10:12:40 +0800
Subject: [PATCH 12/16] bugfix: fix when load separated image error return
reason: if base and lib dir are both not provided, daemon
side will read the info from "manifest" file in the dest dir
automatically, so no error return here
Signed-off-by: DCCooper <1866858@gmail.com>
---
cmd/cli/load.go | 4 +--
cmd/cli/load_test.go | 59 +++++++++++++++++++++++++++++++++-----------
2 files changed, 47 insertions(+), 16 deletions(-)
diff --git a/cmd/cli/load.go b/cmd/cli/load.go
index cf142592..44fefdd2 100644
--- a/cmd/cli/load.go
+++ b/cmd/cli/load.go
@@ -178,7 +178,7 @@ func (sep *separatorLoadOption) check(pwd string) error {
return errors.New("image tarball directory should not be empty")
}
- if sep.base == sep.lib {
+ if len(sep.base) != 0 && sep.base == sep.lib {
return errors.New("base and lib tarballs are the same")
}
@@ -203,7 +203,7 @@ func (sep *separatorLoadOption) check(pwd string) error {
sep.dir = util.MakeAbsolute(sep.dir, pwd)
if !util.IsExist(sep.dir) {
- return errors.Errorf("image tarball directory %s is not exist", sep.dir)
+ return errors.Errorf("image tarball directory %q is not exist", sep.dir)
}
return nil
diff --git a/cmd/cli/load_test.go b/cmd/cli/load_test.go
index 0bad4cbd..cb8217ce 100644
--- a/cmd/cli/load_test.go
+++ b/cmd/cli/load_test.go
@@ -15,6 +15,7 @@ package main
import (
"context"
+ "fmt"
"io/ioutil"
"os"
"path/filepath"
@@ -22,7 +23,9 @@ import (
"gotest.tools/v3/assert"
"gotest.tools/v3/fs"
+
constant "isula.org/isula-build"
+ "isula.org/isula-build/util"
)
func TestLoadCmd(t *testing.T) {
@@ -182,6 +185,8 @@ func TestResolveLoadPath(t *testing.T) {
}
func TestCheckLoadOpts(t *testing.T) {
+ pwd, err := os.Getwd()
+ assert.NilError(t, err)
root := fs.NewDir(t, t.Name())
defer root.Remove()
emptyFile, err := os.Create(filepath.Join(root.Path(), "empty.tar"))
@@ -201,9 +206,10 @@ func TestCheckLoadOpts(t *testing.T) {
sep separatorLoadOption
}
tests := []struct {
- name string
- fields fields
- wantErr bool
+ name string
+ fields fields
+ wantErr bool
+ errMessage string
}{
{
name: "TC-normal load options",
@@ -212,15 +218,17 @@ func TestCheckLoadOpts(t *testing.T) {
},
},
{
- name: "TC-empty load path",
- wantErr: true,
+ name: "TC-empty load path",
+ wantErr: true,
+ errMessage: "tarball path should not be empty",
},
{
name: "TC-empty load file",
fields: fields{
path: emptyFile.Name(),
},
- wantErr: true,
+ wantErr: true,
+ errMessage: "loading file is empty",
},
{
name: "TC-separated load",
@@ -243,7 +251,8 @@ func TestCheckLoadOpts(t *testing.T) {
lib: libFile.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: "app image name(-i) should not be empty",
},
{
name: "TC-separated load with empty dir",
@@ -254,7 +263,8 @@ func TestCheckLoadOpts(t *testing.T) {
lib: libFile.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: "image tarball directory should not be empty",
},
{
name: "TC-separated load with invalid app name",
@@ -266,7 +276,8 @@ func TestCheckLoadOpts(t *testing.T) {
lib: libFile.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: fmt.Sprintf("invalid image name: %s", "invalid:app:name"),
},
{
name: "TC-separated load with empty base tarball",
@@ -278,7 +289,8 @@ func TestCheckLoadOpts(t *testing.T) {
lib: libFile.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: "resolve base tarball path failed: loading file is empty",
},
{
name: "TC-separated load with empty lib tarball",
@@ -290,7 +302,8 @@ func TestCheckLoadOpts(t *testing.T) {
lib: emptyFile.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: "resolve lib tarball path failed: loading file is empty",
},
{
name: "TC-separated load with same base and lib tarball",
@@ -302,7 +315,8 @@ func TestCheckLoadOpts(t *testing.T) {
lib: fileWithContent.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: "base and lib tarballs are the same",
},
{
name: "TC-separated load with dir not exist",
@@ -314,7 +328,20 @@ func TestCheckLoadOpts(t *testing.T) {
lib: libFile.Name(),
},
},
- wantErr: true,
+ wantErr: true,
+ errMessage: fmt.Sprintf("image tarball directory %q is not exist", util.MakeAbsolute("path not exist", pwd)),
+ },
+ {
+ // if base and lib dir are both not provided, daemon side will read
+ // the info from "manifest" file in the dest dir automatically
+ // so no error return here
+ name: "TC-base and lib dir both not provided",
+ fields: fields{
+ path: "app:latest",
+ sep: separatorLoadOption{
+ dir: root.Path(),
+ },
+ },
},
}
for _, tt := range tests {
@@ -324,9 +351,13 @@ func TestCheckLoadOpts(t *testing.T) {
loadID: tt.fields.loadID,
sep: tt.fields.sep,
}
- if err := opt.checkLoadOpts(); (err != nil) != tt.wantErr {
+ err := opt.checkLoadOpts()
+ if (err != nil) != tt.wantErr {
t.Errorf("loadOptions.checkLoadOpts() error = %v, wantErr %v", err, tt.wantErr)
}
+ if err != nil && err.Error() != tt.errMessage {
+ t.Errorf("loadOptions.checkLoadOpts() error = %v, wantErr %v", err, tt.errMessage)
+ }
})
}
}
--
2.27.0