github.hscsec.cn/openshift/source-to-image@v1.2.0/pkg/util/fs/fs_test.go (about)

     1  package fs
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"reflect"
     7  	"testing"
     8  
     9  	testfs "github.com/openshift/source-to-image/pkg/test/fs"
    10  )
    11  
    12  func helper(t *testing.T, keepSymlinks bool) {
    13  	sep := string(filepath.Separator)
    14  
    15  	// test plain file copy
    16  	fake := &testfs.FakeFileSystem{
    17  		Files: []os.FileInfo{
    18  			&FileInfo{FileName: "file", FileMode: 0600},
    19  		},
    20  		OpenContent: "test",
    21  	}
    22  	fake.KeepSymlinks(keepSymlinks)
    23  	err := doCopy(fake, sep+"file", sep+"dest", nil)
    24  	if err != nil {
    25  		t.Error(err)
    26  	}
    27  	if fake.CreateFile != sep+"dest" {
    28  		t.Error(fake.CreateFile)
    29  	}
    30  	if fake.CreateContent.String() != "test" {
    31  		t.Error(fake.CreateContent.String())
    32  	}
    33  	if !reflect.DeepEqual(fake.ChmodFile, []string{sep + "dest"}) {
    34  		t.Error(fake.ChmodFile)
    35  	}
    36  	if fake.ChmodMode != 0600 {
    37  		t.Error(fake.ChmodMode)
    38  	}
    39  
    40  	// test broken symlink copy
    41  	fake = &testfs.FakeFileSystem{
    42  		Files: []os.FileInfo{
    43  			&FileInfo{FileName: "link", FileMode: os.ModeSymlink},
    44  		},
    45  		ReadlinkName: sep + "linkdest",
    46  	}
    47  	fake.KeepSymlinks(keepSymlinks)
    48  	err = doCopy(fake, sep+"link", sep+"dest", nil)
    49  	if err != nil {
    50  		t.Error(err)
    51  	}
    52  	if fake.SymlinkNewname != sep+"dest" {
    53  		t.Error(fake.SymlinkNewname)
    54  	}
    55  	if fake.SymlinkOldname != sep+"linkdest" {
    56  		t.Error(fake.SymlinkOldname)
    57  	}
    58  
    59  	// test non-broken symlink copy
    60  	fake = &testfs.FakeFileSystem{
    61  		Files: []os.FileInfo{
    62  			&FileInfo{FileName: "file", FileMode: 0600},
    63  			&FileInfo{FileName: "link", FileMode: os.ModeSymlink},
    64  		},
    65  		OpenContent:  "test",
    66  		ReadlinkName: sep + "file",
    67  	}
    68  	fake.KeepSymlinks(keepSymlinks)
    69  	err = doCopy(fake, sep+"link", sep+"dest", nil)
    70  	if err != nil {
    71  		t.Error(err)
    72  	}
    73  	if keepSymlinks {
    74  		if fake.SymlinkNewname != sep+"dest" {
    75  			t.Error(fake.SymlinkNewname)
    76  		}
    77  	} else {
    78  		if fake.CreateFile != sep+"dest" {
    79  			t.Error(fake.CreateFile)
    80  		}
    81  		if fake.CreateContent.String() != "test" {
    82  			t.Error(fake.CreateContent.String())
    83  		}
    84  		if !reflect.DeepEqual(fake.ChmodFile, []string{sep + "dest"}) {
    85  			t.Error(fake.ChmodFile)
    86  		}
    87  		if fake.ChmodMode != 0600 {
    88  			t.Error(fake.ChmodMode)
    89  		}
    90  	}
    91  }
    92  
    93  func TestCopy(t *testing.T) {
    94  	helper(t, false)
    95  }
    96  
    97  func TestCopyKeepSymlinks(t *testing.T) {
    98  	helper(t, true)
    99  }