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  }