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 }