diff --git a/pkg/kubectl/cmd/cp.go b/pkg/kubectl/cmd/cp.go index 8b3a89096b6..a5d67de3f96 100644 --- a/pkg/kubectl/cmd/cp.go +++ b/pkg/kubectl/cmd/cp.go @@ -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 + } } } diff --git a/pkg/kubectl/cmd/cp_test.go b/pkg/kubectl/cmd/cp_test.go index b410bc694ba..8236fef7a37 100644 --- a/pkg/kubectl/cmd/cp_test.go +++ b/pkg/kubectl/cmd/cp_test.go @@ -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) } } }