github.com/jaylevin/jenkins-library@v1.230.4/pkg/piperutils/ioUtils_test.go (about) 1 package piperutils 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestCopyData(t *testing.T) { 11 runInTempDir(t, "copying file succeeds small", "dir1", func(t *testing.T) { 12 srcName := "testFileSrc" 13 src, err := os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 14 if err != nil { 15 t.Fatal("Failed to create src file") 16 } 17 data := make([]byte, 3) 18 data[0] = byte(32) 19 data[1] = byte(42) 20 data[2] = byte(52) 21 _, err = src.Write(data) 22 if err != nil { 23 t.Fatalf("Failed to write data to src file: %v", err) 24 } 25 src.Close() 26 src, err = os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 27 if err != nil { 28 t.Fatal("Failed to reopen src file") 29 } 30 31 dstName := "testFileTgt" 32 dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_RDWR, 0700) 33 if err != nil { 34 t.Fatal("Failed to create dst file") 35 } 36 37 result, err := CopyData(dst, src) 38 src.Close() 39 dst.Close() 40 dst, err = os.OpenFile(dstName, os.O_CREATE|os.O_RDWR, 0700) 41 dataRead := make([]byte, 3) 42 dst.Read(dataRead) 43 dst.Close() 44 45 assert.NoError(t, err, "Didn't expect error but got one") 46 assert.Equal(t, int64(3), result, "Expected true but got false") 47 assert.Equal(t, data, dataRead, "data written %v is different to data read %v") 48 }) 49 runInTempDir(t, "copying file succeeds larger", "dir2", func(t *testing.T) { 50 srcName := "testFile" 51 src, err := os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 52 if err != nil { 53 t.Fatal("Failed to create src file") 54 } 55 data := make([]byte, 300) 56 for i := 0; i < 300; i++ { 57 data[i] = byte(i) 58 } 59 _, err = src.Write(data) 60 src.Close() 61 src, err = os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 62 63 dstName := "testFile2" 64 dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_RDWR, 0700) 65 if err != nil { 66 t.Fatal("Failed to create dst file") 67 } 68 69 result, err := CopyData(dst, src) 70 src.Close() 71 dst.Close() 72 73 assert.NoError(t, err, "Didn't expect error but got one") 74 assert.Equal(t, int64(300), result, "Expected true but got false") 75 }) 76 runInTempDir(t, "copying file fails on read", "dir3", func(t *testing.T) { 77 srcName := "testFileExcl" 78 src, err := os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 79 if err != nil { 80 t.Fatalf("Failed to create src file %v", err) 81 } 82 data := make([]byte, 300) 83 for i := 0; i < 300; i++ { 84 data[i] = byte(i) 85 } 86 _, err = src.Write(data) 87 src.Close() 88 src, err = os.OpenFile(srcName, os.O_WRONLY, 0700) 89 90 dstName := "testFile2" 91 dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_RDWR, 0700) 92 if err != nil { 93 t.Fatal("Failed to create dst file") 94 } 95 96 result, err := CopyData(dst, src) 97 src.Close() 98 dst.Close() 99 100 assert.Error(t, err, "Expected error but got none") 101 assert.Equal(t, int64(0), result, "Expected true but got false") 102 }) 103 runInTempDir(t, "copying file fails on write", "dir4", func(t *testing.T) { 104 srcName := "testFileExcl" 105 src, err := os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 106 if err != nil { 107 t.Fatalf("Failed to create src file %v", err) 108 } 109 data := make([]byte, 300) 110 for i := 0; i < 300; i++ { 111 data[i] = byte(i) 112 } 113 _, err = src.Write(data) 114 src.Close() 115 src, err = os.OpenFile(srcName, os.O_CREATE|os.O_RDWR, 0700) 116 117 dstName := "testFileExclus" 118 dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_RDWR, 0700) 119 if err != nil { 120 t.Fatalf("Failed to create dst file: %v", err) 121 } 122 dst.Close() 123 dst, err = os.OpenFile(dstName, os.O_RDONLY, 0700) 124 125 result, err := CopyData(dst, src) 126 src.Close() 127 dst.Close() 128 129 assert.Error(t, err, "Expected error but got none") 130 assert.Equal(t, int64(0), result, "Expected true but got false") 131 }) 132 }