github.com/polym/upx@v0.2.6/putgetrm_test.go (about)

     1  package main
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path"
     7  	"path/filepath"
     8  	"sort"
     9  	"strings"
    10  	"testing"
    11  )
    12  
    13  func putFile(t *testing.T, src, dst, correct string) {
    14  	var err error
    15  	if dst == "" {
    16  		_, err = Upx("put", src)
    17  	} else {
    18  		_, err = Upx("put", src, dst)
    19  	}
    20  	Nil(t, err)
    21  
    22  	b, err := Upx("ls", correct)
    23  	Nil(t, err)
    24  	Equal(t, strings.HasSuffix(string(b), " "+correct+"\n"), true)
    25  }
    26  
    27  func compare(t *testing.T, local, up string) {
    28  	locals := []string{}
    29  	ups := []string{}
    30  	fInfos, _ := ioutil.ReadDir(local)
    31  	for _, fInfo := range fInfos {
    32  		locals = append(locals, fInfo.Name())
    33  	}
    34  
    35  	b, err := Upx("ls", up)
    36  	Nil(t, err)
    37  	output := strings.TrimRight(string(b), "\n")
    38  	for _, line := range strings.Split(output, "\n") {
    39  		items := strings.Split(line, " ")
    40  		ups = append(ups, items[len(items)-1])
    41  	}
    42  
    43  	sort.Strings(locals)
    44  	sort.Strings(ups)
    45  
    46  	Equal(t, len(locals), len(ups))
    47  	for i := 0; i < len(locals); i++ {
    48  		Equal(t, locals[i], ups[i])
    49  	}
    50  }
    51  
    52  func putDir(t *testing.T, src, dst, correct string) {
    53  	var err error
    54  	if dst == "" {
    55  		_, err = Upx("put", src)
    56  	} else {
    57  		_, err = Upx("put", src, dst)
    58  	}
    59  	Nil(t, err)
    60  
    61  	compare(t, src, correct)
    62  }
    63  
    64  func getFile(t *testing.T, src, dst, correct string) {
    65  	var err error
    66  	if dst == "" {
    67  		_, err = Upx("get", src)
    68  	} else {
    69  		_, err = Upx("get", src, dst)
    70  	}
    71  	Nil(t, err)
    72  
    73  	_, err = os.Stat(correct)
    74  	Nil(t, err)
    75  }
    76  
    77  func getDir(t *testing.T, src, dst, correct string) {
    78  	var err error
    79  	if dst == "" {
    80  		_, err = Upx("get", src)
    81  	} else {
    82  		_, err = Upx("get", src, dst)
    83  	}
    84  	Nil(t, err)
    85  
    86  	compare(t, correct, src)
    87  }
    88  
    89  func TestPutAndGet(t *testing.T) {
    90  	base := ROOT + "/put/"
    91  	pwd := "/tmp"
    92  	localBase := filepath.Join(pwd, "put")
    93  	func() {
    94  		SetUp()
    95  		err := os.MkdirAll(localBase, 0755)
    96  		Nil(t, err)
    97  	}()
    98  	defer TearDown()
    99  
   100  	err := os.Chdir(localBase)
   101  	Nil(t, err)
   102  	Upx("mkdir", base)
   103  	Upx("cd", base)
   104  
   105  	// upx put localBase/FILE upBase/FILE
   106  	CreateFile("FILE")
   107  	putFile(t, filepath.Join(localBase, "FILE"), "", path.Join(base, "FILE"))
   108  
   109  	// upx put ../put/FILE2
   110  	CreateFile("FILE2")
   111  	localPath := ".." + string(filepath.Separator) + filepath.Join("put", "FILE2")
   112  	putFile(t, localPath, "", path.Join(base, "FILE2"))
   113  
   114  	// upx put /path/to/file /path/to/file
   115  	putFile(t, "FILE", path.Join(base, "FILE4"), path.Join(base, "FILE4"))
   116  
   117  	// upx put /path/to/file /path/to/dir
   118  	CreateFile("FILE3")
   119  	putFile(t, "FILE3", base, path.Join(base, "FILE3"))
   120  
   121  	// upx put /path/to/file ../path/to/dir/
   122  	putFile(t, "FILE", base+"/putfile/", path.Join(base, "putfile", "FILE"))
   123  
   124  	// upx put ../path/to/dir
   125  	localPath = ".." + string(filepath.Separator) + "put"
   126  	putDir(t, localPath, "", path.Join(base, "put"))
   127  
   128  	// upx put /path/to/dir /path/to/dir/
   129  	putDir(t, localBase, base+"/putdir/", base+"/putdir/")
   130  
   131  	_, err = Upx("put", localBase, path.Join(base, "FILE"))
   132  	NotNil(t, err)
   133  
   134  	localBase = filepath.Join(pwd, "get")
   135  	os.MkdirAll(localBase, 0755)
   136  	err = os.Chdir(localBase)
   137  	Nil(t, err)
   138  
   139  	// upx get /path/to/file
   140  	getFile(t, path.Join(base, "FILE"), "", filepath.Join(localBase, "FILE"))
   141  
   142  	// upx get ../path/to/file
   143  	getFile(t, "../put/FILE2", "", filepath.Join(localBase, "FILE2"))
   144  
   145  	// upx get /path/to/file /path/to/file
   146  	getFile(t, "FILE4", filepath.Join(localBase, "FILE5"), filepath.Join(localBase, "FILE5"))
   147  
   148  	// upx get /path/to/file /path/to/dir
   149  	getFile(t, "FILE3", localBase, filepath.Join(localBase, "FILE3"))
   150  
   151  	// upx get /path/to/file /path/to/dir/
   152  	localPath = filepath.Join(localBase, "getfile") + string(filepath.Separator)
   153  	getFile(t, "FILE", localPath, filepath.Join(localPath, "FILE"))
   154  
   155  	// upx get ../path/to/dir
   156  	getDir(t, "../put", "", filepath.Join(localBase, "put"))
   157  
   158  	// upx get /path/to/dir /path/to/dir/
   159  	localPath = filepath.Join(localBase, "getdir") + string(filepath.Separator)
   160  	getDir(t, "../put", localPath, localPath)
   161  
   162  	_, err = Upx("get", base, filepath.Join(localBase, "FILE"))
   163  	NotNil(t, err)
   164  
   165  	// upx get FILE*
   166  	localPath = filepath.Join(localBase, "wildcard") + string(filepath.Separator)
   167  	_, err = Upx("get", "FILE*", localPath)
   168  	Nil(t, err)
   169  	files, _ := Upx("ls", "FILE*")
   170  	lfiles, _ := ioutil.ReadDir(localPath)
   171  	NotEqual(t, len(lfiles), 0)
   172  	Equal(t, len(lfiles)+1, len(strings.Split(string(files), "\n")))
   173  }
   174  
   175  func TestRm(t *testing.T) {
   176  	SetUp()
   177  	defer TearDown()
   178  	base := ROOT + "/put/"
   179  	Upx("cd", base)
   180  	_, err := Upx("rm", "put")
   181  	NotNil(t, err)
   182  
   183  	_, err = Upx("rm", "put/FILE")
   184  	Nil(t, err)
   185  	_, err = Upx("ls", "put/FILE")
   186  	NotNil(t, err)
   187  
   188  	_, err = Upx("rm", "put/FILE*")
   189  	Nil(t, err)
   190  	_, err = Upx("ls", "put/FILE*")
   191  	NotNil(t, err)
   192  
   193  	_, err = Upx("rm", "-d", "put/*")
   194  	Nil(t, err)
   195  	_, err = Upx("ls", "-d", "put/*")
   196  	NotNil(t, err)
   197  
   198  	_, err = Upx("rm", "-a", "put")
   199  	Nil(t, err)
   200  	_, err = Upx("ls", "put")
   201  	NotNil(t, err)
   202  }