mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 15:05:27 +00:00
The cp command must call Close() on files, and does not pass on Mac
Path operations needed to be with filepath, not path (for cross platform compat), and TMPDIR is not guaranteed to have a trailing slash.
This commit is contained in:
parent
d837a6a2ea
commit
d3790db03a
@ -301,10 +301,12 @@ func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) e
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
_, err = io.Copy(tw, f)
|
||||
return err
|
||||
|
||||
if _, err := io.Copy(tw, f); err != nil {
|
||||
return err
|
||||
}
|
||||
return f.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -330,7 +332,6 @@ func untarAll(reader io.Reader, destFile, prefix string) error {
|
||||
return err
|
||||
}
|
||||
if header.FileInfo().IsDir() {
|
||||
|
||||
if err := os.MkdirAll(outFileName, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -359,7 +360,12 @@ func untarAll(reader io.Reader, destFile, prefix string) error {
|
||||
return err
|
||||
}
|
||||
defer outFile.Close()
|
||||
io.Copy(outFile, tarReader)
|
||||
if _, err := io.Copy(outFile, tarReader); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := outFile.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,8 +109,8 @@ func TestGetPrefix(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTarUntar(t *testing.T) {
|
||||
dir, err := ioutil.TempDir(os.TempDir(), "input")
|
||||
dir2, err2 := ioutil.TempDir(os.TempDir(), "output")
|
||||
dir, err := ioutil.TempDir("", "input")
|
||||
dir2, err2 := ioutil.TempDir("", "output")
|
||||
if err != nil || err2 != nil {
|
||||
t.Errorf("unexpected error: %v | %v", err, err2)
|
||||
t.FailNow()
|
||||
@ -160,74 +160,74 @@ func TestTarUntar(t *testing.T) {
|
||||
for _, file := range files {
|
||||
filepath := path.Join(dir, file.name)
|
||||
if err := os.MkdirAll(path.Dir(filepath), 0755); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if file.fileType == RegularFile {
|
||||
f, err := os.Create(filepath)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
if _, err := io.Copy(f, bytes.NewBuffer([]byte(file.data))); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if err := f.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
} else if file.fileType == SymLink {
|
||||
err := os.Symlink(file.data, filepath)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
} else {
|
||||
t.Errorf("unexpected file type: %v", file)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected file type: %v", file)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
writer := &bytes.Buffer{}
|
||||
if err := makeTar(dir, dir, writer); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
reader := bytes.NewBuffer(writer.Bytes())
|
||||
if err := untarAll(reader, dir2, ""); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
absPath := dir2 + strings.TrimPrefix(dir, os.TempDir())
|
||||
filepath := path.Join(absPath, file.name)
|
||||
absPath := filepath.Join(dir2, strings.TrimPrefix(dir, os.TempDir()))
|
||||
filePath := filepath.Join(absPath, file.name)
|
||||
|
||||
if file.fileType == RegularFile {
|
||||
f, err := os.Open(filepath)
|
||||
f, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
buff := &bytes.Buffer{}
|
||||
io.Copy(buff, f)
|
||||
|
||||
if _, err := io.Copy(buff, f); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := f.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if file.data != string(buff.Bytes()) {
|
||||
t.Errorf("expected: %s, saw: %s", file.data, string(buff.Bytes()))
|
||||
t.Fatalf("expected: %s, saw: %s", file.data, string(buff.Bytes()))
|
||||
}
|
||||
} else if file.fileType == SymLink {
|
||||
dest, err := os.Readlink(filepath)
|
||||
dest, err := os.Readlink(filePath)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if file.data != dest {
|
||||
t.Errorf("expected: %s, saw: %s", file.data, dest)
|
||||
t.Fatalf("expected: %s, saw: %s", file.data, dest)
|
||||
}
|
||||
} else {
|
||||
t.Errorf("unexpected file type: %v", file)
|
||||
t.FailNow()
|
||||
t.Fatalf("unexpected file type: %v", file)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user