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