| OLD | NEW |
| (Empty) |
| 1 # -*- test-case-name: buildbot.test.test_transfer -*- | |
| 2 | |
| 3 import os | |
| 4 from stat import ST_MODE | |
| 5 from twisted.trial import unittest | |
| 6 from buildbot.process.buildstep import WithProperties | |
| 7 from buildbot.steps.transfer import FileUpload, FileDownload, DirectoryUpload | |
| 8 from buildbot.test.runutils import StepTester | |
| 9 from buildbot.status.builder import SUCCESS, FAILURE | |
| 10 | |
| 11 # these steps pass a pb.Referenceable inside their arguments, so we have to | |
| 12 # catch and wrap them. If the LocalAsRemote wrapper were a proper membrane, | |
| 13 # we wouldn't have to do this. | |
| 14 | |
| 15 class UploadFile(StepTester, unittest.TestCase): | |
| 16 | |
| 17 def filterArgs(self, args): | |
| 18 if "writer" in args: | |
| 19 args["writer"] = self.wrap(args["writer"]) | |
| 20 return args | |
| 21 | |
| 22 def testSuccess(self): | |
| 23 self.slavebase = "UploadFile.testSuccess.slave" | |
| 24 self.masterbase = "UploadFile.testSuccess.master" | |
| 25 sb = self.makeSlaveBuilder() | |
| 26 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 27 "build")) | |
| 28 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 29 # files will appear there. Under trial, we're chdir'ed into | |
| 30 # _trial_temp instead, so use a different masterdest= to keep the | |
| 31 # uploaded file in a test-local directory | |
| 32 masterdest = os.path.join(self.masterbase, "dest.text") | |
| 33 step = self.makeStep(FileUpload, | |
| 34 slavesrc="source.txt", | |
| 35 masterdest=masterdest) | |
| 36 slavesrc = os.path.join(self.slavebase, | |
| 37 self.slavebuilderbase, | |
| 38 "build", | |
| 39 "source.txt") | |
| 40 contents = "this is the source file\n" * 1000 | |
| 41 open(slavesrc, "w").write(contents) | |
| 42 f = open(masterdest, "w") | |
| 43 f.write("overwrite me\n") | |
| 44 f.close() | |
| 45 | |
| 46 d = self.runStep(step) | |
| 47 def _checkUpload(results): | |
| 48 step_status = step.step_status | |
| 49 #l = step_status.getLogs() | |
| 50 #if l: | |
| 51 # logtext = l[0].getText() | |
| 52 # print logtext | |
| 53 self.failUnlessEqual(results, SUCCESS) | |
| 54 self.failUnless(os.path.exists(masterdest)) | |
| 55 masterdest_contents = open(masterdest, "r").read() | |
| 56 self.failUnlessEqual(masterdest_contents, contents) | |
| 57 d.addCallback(_checkUpload) | |
| 58 return d | |
| 59 | |
| 60 def testMaxsize(self): | |
| 61 self.slavebase = "UploadFile.testMaxsize.slave" | |
| 62 self.masterbase = "UploadFile.testMaxsize.master" | |
| 63 sb = self.makeSlaveBuilder() | |
| 64 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 65 "build")) | |
| 66 masterdest = os.path.join(self.masterbase, "dest2.text") | |
| 67 step = self.makeStep(FileUpload, | |
| 68 slavesrc="source.txt", | |
| 69 masterdest=masterdest, | |
| 70 maxsize=12345) | |
| 71 slavesrc = os.path.join(self.slavebase, | |
| 72 self.slavebuilderbase, | |
| 73 "build", | |
| 74 "source.txt") | |
| 75 contents = "this is the source file\n" * 1000 | |
| 76 open(slavesrc, "w").write(contents) | |
| 77 f = open(masterdest, "w") | |
| 78 f.write("overwrite me\n") | |
| 79 f.close() | |
| 80 | |
| 81 d = self.runStep(step) | |
| 82 def _checkUpload(results): | |
| 83 step_status = step.step_status | |
| 84 #l = step_status.getLogs() | |
| 85 #if l: | |
| 86 # logtext = l[0].getText() | |
| 87 # print logtext | |
| 88 self.failUnlessEqual(results, FAILURE) | |
| 89 self.failUnless(os.path.exists(masterdest)) | |
| 90 masterdest_contents = open(masterdest, "r").read() | |
| 91 self.failUnlessEqual(len(masterdest_contents), 12345) | |
| 92 self.failUnlessEqual(masterdest_contents, contents[:12345]) | |
| 93 d.addCallback(_checkUpload) | |
| 94 return d | |
| 95 | |
| 96 def testMode(self): | |
| 97 self.slavebase = "UploadFile.testMode.slave" | |
| 98 self.masterbase = "UploadFile.testMode.master" | |
| 99 sb = self.makeSlaveBuilder() | |
| 100 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 101 "build")) | |
| 102 masterdest = os.path.join(self.masterbase, "dest3.text") | |
| 103 step = self.makeStep(FileUpload, | |
| 104 slavesrc="source.txt", | |
| 105 masterdest=masterdest, | |
| 106 mode=0755) | |
| 107 slavesrc = os.path.join(self.slavebase, | |
| 108 self.slavebuilderbase, | |
| 109 "build", | |
| 110 "source.txt") | |
| 111 contents = "this is the source file\n" | |
| 112 open(slavesrc, "w").write(contents) | |
| 113 f = open(masterdest, "w") | |
| 114 f.write("overwrite me\n") | |
| 115 f.close() | |
| 116 | |
| 117 d = self.runStep(step) | |
| 118 def _checkUpload(results): | |
| 119 step_status = step.step_status | |
| 120 #l = step_status.getLogs() | |
| 121 #if l: | |
| 122 # logtext = l[0].getText() | |
| 123 # print logtext | |
| 124 self.failUnlessEqual(results, SUCCESS) | |
| 125 self.failUnless(os.path.exists(masterdest)) | |
| 126 masterdest_contents = open(masterdest, "r").read() | |
| 127 self.failUnlessEqual(masterdest_contents, contents) | |
| 128 # and with 0777 to ignore sticky bits | |
| 129 dest_mode = os.stat(masterdest)[ST_MODE] & 0777 | |
| 130 self.failUnlessEqual(dest_mode, 0755, | |
| 131 "target mode was %o, we wanted %o" % | |
| 132 (dest_mode, 0755)) | |
| 133 d.addCallback(_checkUpload) | |
| 134 return d | |
| 135 | |
| 136 def testMissingFile(self): | |
| 137 self.slavebase = "UploadFile.testMissingFile.slave" | |
| 138 self.masterbase = "UploadFile.testMissingFile.master" | |
| 139 sb = self.makeSlaveBuilder() | |
| 140 step = self.makeStep(FileUpload, | |
| 141 slavesrc="MISSING.txt", | |
| 142 masterdest="dest.txt") | |
| 143 masterdest = os.path.join(self.masterbase, "dest4.txt") | |
| 144 | |
| 145 d = self.runStep(step) | |
| 146 def _checkUpload(results): | |
| 147 step_status = step.step_status | |
| 148 self.failUnlessEqual(results, FAILURE) | |
| 149 self.failIf(os.path.exists(masterdest)) | |
| 150 l = step_status.getLogs() | |
| 151 logtext = l[0].getText().strip() | |
| 152 self.failUnless(logtext.startswith("Cannot open file")) | |
| 153 self.failUnless(logtext.endswith("for upload")) | |
| 154 d.addCallback(_checkUpload) | |
| 155 return d | |
| 156 | |
| 157 def testLotsOfBlocks(self): | |
| 158 self.slavebase = "UploadFile.testLotsOfBlocks.slave" | |
| 159 self.masterbase = "UploadFile.testLotsOfBlocks.master" | |
| 160 sb = self.makeSlaveBuilder() | |
| 161 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 162 "build")) | |
| 163 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 164 # files will appear there. Under trial, we're chdir'ed into | |
| 165 # _trial_temp instead, so use a different masterdest= to keep the | |
| 166 # uploaded file in a test-local directory | |
| 167 masterdest = os.path.join(self.masterbase, "dest.text") | |
| 168 step = self.makeStep(FileUpload, | |
| 169 slavesrc="source.txt", | |
| 170 masterdest=masterdest, | |
| 171 blocksize=15) | |
| 172 slavesrc = os.path.join(self.slavebase, | |
| 173 self.slavebuilderbase, | |
| 174 "build", | |
| 175 "source.txt") | |
| 176 contents = "".join(["this is the source file #%d\n" % i | |
| 177 for i in range(1000)]) | |
| 178 open(slavesrc, "w").write(contents) | |
| 179 f = open(masterdest, "w") | |
| 180 f.write("overwrite me\n") | |
| 181 f.close() | |
| 182 | |
| 183 d = self.runStep(step) | |
| 184 def _checkUpload(results): | |
| 185 step_status = step.step_status | |
| 186 #l = step_status.getLogs() | |
| 187 #if l: | |
| 188 # logtext = l[0].getText() | |
| 189 # print logtext | |
| 190 self.failUnlessEqual(results, SUCCESS) | |
| 191 self.failUnless(os.path.exists(masterdest)) | |
| 192 masterdest_contents = open(masterdest, "r").read() | |
| 193 self.failUnlessEqual(masterdest_contents, contents) | |
| 194 d.addCallback(_checkUpload) | |
| 195 return d | |
| 196 | |
| 197 def testWorkdir(self): | |
| 198 self.slavebase = "Upload.testWorkdir.slave" | |
| 199 self.masterbase = "Upload.testWorkdir.master" | |
| 200 sb = self.makeSlaveBuilder() | |
| 201 | |
| 202 self.workdir = "mybuild" # override default in StepTest | |
| 203 full_workdir = os.path.join( | |
| 204 self.slavebase, self.slavebuilderbase, self.workdir) | |
| 205 os.mkdir(full_workdir) | |
| 206 | |
| 207 masterdest = os.path.join(self.masterbase, "dest.txt") | |
| 208 | |
| 209 step = self.makeStep(FileUpload, | |
| 210 slavesrc="source.txt", | |
| 211 masterdest=masterdest) | |
| 212 | |
| 213 # Testing that the FileUpload's workdir is set when makeStep() | |
| 214 # calls setDefaultWorkdir() is actually enough; carrying on and | |
| 215 # making sure the upload actually succeeds is pure gravy. | |
| 216 self.failUnlessEqual(self.workdir, step.workdir) | |
| 217 | |
| 218 slavesrc = os.path.join(full_workdir, "source.txt") | |
| 219 open(slavesrc, "w").write("upload me\n") | |
| 220 | |
| 221 def _checkUpload(results): | |
| 222 self.failUnlessEqual(results, SUCCESS) | |
| 223 self.failUnless(os.path.isfile(masterdest)) | |
| 224 | |
| 225 d = self.runStep(step) | |
| 226 d.addCallback(_checkUpload) | |
| 227 return d | |
| 228 | |
| 229 def testWithProperties(self): | |
| 230 # test that workdir can be a WithProperties object | |
| 231 self.slavebase = "Upload.testWithProperties.slave" | |
| 232 self.masterbase = "Upload.testWithProperties.master" | |
| 233 sb = self.makeSlaveBuilder() | |
| 234 | |
| 235 step = self.makeStep(FileUpload, | |
| 236 slavesrc="src.txt", | |
| 237 masterdest="dest.txt") | |
| 238 step.workdir = WithProperties("build.%s", "buildnumber") | |
| 239 | |
| 240 self.failUnlessEqual(step._getWorkdir(), "build.1") | |
| 241 | |
| 242 class DownloadFile(StepTester, unittest.TestCase): | |
| 243 | |
| 244 def filterArgs(self, args): | |
| 245 if "reader" in args: | |
| 246 args["reader"] = self.wrap(args["reader"]) | |
| 247 return args | |
| 248 | |
| 249 def testSuccess(self): | |
| 250 self.slavebase = "DownloadFile.testSuccess.slave" | |
| 251 self.masterbase = "DownloadFile.testSuccess.master" | |
| 252 sb = self.makeSlaveBuilder() | |
| 253 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 254 "build")) | |
| 255 mastersrc = os.path.join(self.masterbase, "source.text") | |
| 256 slavedest = os.path.join(self.slavebase, | |
| 257 self.slavebuilderbase, | |
| 258 "build", | |
| 259 "dest.txt") | |
| 260 step = self.makeStep(FileDownload, | |
| 261 mastersrc=mastersrc, | |
| 262 slavedest="dest.txt") | |
| 263 contents = "this is the source file\n" * 1000 # 24kb, so two blocks | |
| 264 open(mastersrc, "w").write(contents) | |
| 265 f = open(slavedest, "w") | |
| 266 f.write("overwrite me\n") | |
| 267 f.close() | |
| 268 | |
| 269 d = self.runStep(step) | |
| 270 def _checkDownload(results): | |
| 271 step_status = step.step_status | |
| 272 self.failUnlessEqual(results, SUCCESS) | |
| 273 self.failUnless(os.path.exists(slavedest)) | |
| 274 slavedest_contents = open(slavedest, "r").read() | |
| 275 self.failUnlessEqual(slavedest_contents, contents) | |
| 276 d.addCallback(_checkDownload) | |
| 277 return d | |
| 278 | |
| 279 def testMaxsize(self): | |
| 280 self.slavebase = "DownloadFile.testMaxsize.slave" | |
| 281 self.masterbase = "DownloadFile.testMaxsize.master" | |
| 282 sb = self.makeSlaveBuilder() | |
| 283 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 284 "build")) | |
| 285 mastersrc = os.path.join(self.masterbase, "source.text") | |
| 286 slavedest = os.path.join(self.slavebase, | |
| 287 self.slavebuilderbase, | |
| 288 "build", | |
| 289 "dest.txt") | |
| 290 step = self.makeStep(FileDownload, | |
| 291 mastersrc=mastersrc, | |
| 292 slavedest="dest.txt", | |
| 293 maxsize=12345) | |
| 294 contents = "this is the source file\n" * 1000 # 24kb, so two blocks | |
| 295 open(mastersrc, "w").write(contents) | |
| 296 f = open(slavedest, "w") | |
| 297 f.write("overwrite me\n") | |
| 298 f.close() | |
| 299 | |
| 300 d = self.runStep(step) | |
| 301 def _checkDownload(results): | |
| 302 step_status = step.step_status | |
| 303 # the file should be truncated, and the step a FAILURE | |
| 304 self.failUnlessEqual(results, FAILURE) | |
| 305 self.failUnless(os.path.exists(slavedest)) | |
| 306 slavedest_contents = open(slavedest, "r").read() | |
| 307 self.failUnlessEqual(len(slavedest_contents), 12345) | |
| 308 self.failUnlessEqual(slavedest_contents, contents[:12345]) | |
| 309 d.addCallback(_checkDownload) | |
| 310 return d | |
| 311 | |
| 312 def testMode(self): | |
| 313 self.slavebase = "DownloadFile.testMode.slave" | |
| 314 self.masterbase = "DownloadFile.testMode.master" | |
| 315 sb = self.makeSlaveBuilder() | |
| 316 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 317 "build")) | |
| 318 mastersrc = os.path.join(self.masterbase, "source.text") | |
| 319 slavedest = os.path.join(self.slavebase, | |
| 320 self.slavebuilderbase, | |
| 321 "build", | |
| 322 "dest.txt") | |
| 323 step = self.makeStep(FileDownload, | |
| 324 mastersrc=mastersrc, | |
| 325 slavedest="dest.txt", | |
| 326 mode=0755) | |
| 327 contents = "this is the source file\n" | |
| 328 open(mastersrc, "w").write(contents) | |
| 329 f = open(slavedest, "w") | |
| 330 f.write("overwrite me\n") | |
| 331 f.close() | |
| 332 | |
| 333 d = self.runStep(step) | |
| 334 def _checkDownload(results): | |
| 335 step_status = step.step_status | |
| 336 self.failUnlessEqual(results, SUCCESS) | |
| 337 self.failUnless(os.path.exists(slavedest)) | |
| 338 slavedest_contents = open(slavedest, "r").read() | |
| 339 self.failUnlessEqual(slavedest_contents, contents) | |
| 340 # and with 0777 to ignore sticky bits | |
| 341 dest_mode = os.stat(slavedest)[ST_MODE] & 0777 | |
| 342 self.failUnlessEqual(dest_mode, 0755, | |
| 343 "target mode was %o, we wanted %o" % | |
| 344 (dest_mode, 0755)) | |
| 345 d.addCallback(_checkDownload) | |
| 346 return d | |
| 347 | |
| 348 def testMissingFile(self): | |
| 349 self.slavebase = "DownloadFile.testMissingFile.slave" | |
| 350 self.masterbase = "DownloadFile.testMissingFile.master" | |
| 351 sb = self.makeSlaveBuilder() | |
| 352 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 353 "build")) | |
| 354 mastersrc = os.path.join(self.masterbase, "MISSING.text") | |
| 355 slavedest = os.path.join(self.slavebase, | |
| 356 self.slavebuilderbase, | |
| 357 "build", | |
| 358 "dest.txt") | |
| 359 step = self.makeStep(FileDownload, | |
| 360 mastersrc=mastersrc, | |
| 361 slavedest="dest.txt") | |
| 362 | |
| 363 d = self.runStep(step) | |
| 364 def _checkDownload(results): | |
| 365 step_status = step.step_status | |
| 366 self.failUnlessEqual(results, FAILURE) | |
| 367 self.failIf(os.path.exists(slavedest)) | |
| 368 l = step_status.getLogs() | |
| 369 logtext = l[0].getText().strip() | |
| 370 self.failUnless(logtext.endswith(" not available at master")) | |
| 371 d.addCallbacks(_checkDownload) | |
| 372 | |
| 373 return d | |
| 374 | |
| 375 def testLotsOfBlocks(self): | |
| 376 self.slavebase = "DownloadFile.testLotsOfBlocks.slave" | |
| 377 self.masterbase = "DownloadFile.testLotsOfBlocks.master" | |
| 378 sb = self.makeSlaveBuilder() | |
| 379 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 380 "build")) | |
| 381 mastersrc = os.path.join(self.masterbase, "source.text") | |
| 382 slavedest = os.path.join(self.slavebase, | |
| 383 self.slavebuilderbase, | |
| 384 "build", | |
| 385 "dest.txt") | |
| 386 step = self.makeStep(FileDownload, | |
| 387 mastersrc=mastersrc, | |
| 388 slavedest="dest.txt", | |
| 389 blocksize=15) | |
| 390 contents = "".join(["this is the source file #%d\n" % i | |
| 391 for i in range(1000)]) | |
| 392 open(mastersrc, "w").write(contents) | |
| 393 f = open(slavedest, "w") | |
| 394 f.write("overwrite me\n") | |
| 395 f.close() | |
| 396 | |
| 397 d = self.runStep(step) | |
| 398 def _checkDownload(results): | |
| 399 step_status = step.step_status | |
| 400 self.failUnlessEqual(results, SUCCESS) | |
| 401 self.failUnless(os.path.exists(slavedest)) | |
| 402 slavedest_contents = open(slavedest, "r").read() | |
| 403 self.failUnlessEqual(slavedest_contents, contents) | |
| 404 d.addCallback(_checkDownload) | |
| 405 return d | |
| 406 | |
| 407 def testWorkdir(self): | |
| 408 self.slavebase = "Download.testWorkdir.slave" | |
| 409 self.masterbase = "Download.testWorkdir.master" | |
| 410 sb = self.makeSlaveBuilder() | |
| 411 | |
| 412 # As in Upload.testWorkdir(), it's enough to test that makeStep()'s | |
| 413 # call of setDefaultWorkdir() actually sets step.workdir. | |
| 414 self.workdir = "mybuild" | |
| 415 step = self.makeStep(FileDownload, | |
| 416 mastersrc="foo", | |
| 417 slavedest="foo") | |
| 418 self.failUnlessEqual(step.workdir, self.workdir) | |
| 419 | |
| 420 def testWithProperties(self): | |
| 421 # test that workdir can be a WithProperties object | |
| 422 self.slavebase = "Download.testWithProperties.slave" | |
| 423 self.masterbase = "Download.testWithProperties.master" | |
| 424 sb = self.makeSlaveBuilder() | |
| 425 | |
| 426 step = self.makeStep(FileDownload, | |
| 427 mastersrc="src.txt", | |
| 428 slavedest="dest.txt") | |
| 429 step.workdir = WithProperties("build.%s", "buildnumber") | |
| 430 | |
| 431 self.failUnlessEqual(step._getWorkdir(), "build.1") | |
| 432 | |
| 433 | |
| 434 | |
| 435 class UploadDirectory(StepTester, unittest.TestCase): | |
| 436 | |
| 437 def filterArgs(self, args): | |
| 438 if "writer" in args: | |
| 439 args["writer"] = self.wrap(args["writer"]) | |
| 440 return args | |
| 441 | |
| 442 def testSuccess(self): | |
| 443 self.slavebase = "UploadDirectory.testSuccess.slave" | |
| 444 self.masterbase = "UploadDirectory.testSuccess.master" | |
| 445 sb = self.makeSlaveBuilder() | |
| 446 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 447 "build")) | |
| 448 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 449 # files will appear there. Under trial, we're chdir'ed into | |
| 450 # _trial_temp instead, so use a different masterdest= to keep the | |
| 451 # uploaded file in a test-local directory | |
| 452 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 453 step = self.makeStep(DirectoryUpload, | |
| 454 slavesrc="source_dir", | |
| 455 masterdest=masterdest) | |
| 456 slavesrc = os.path.join(self.slavebase, | |
| 457 self.slavebuilderbase, | |
| 458 "build", | |
| 459 "source_dir") | |
| 460 dircount = 5 | |
| 461 content = [] | |
| 462 content.append("this is one source file\n" * 1000) | |
| 463 content.append("this is a second source file\n" * 978) | |
| 464 content.append("this is a third source file\n" * 473) | |
| 465 os.mkdir(slavesrc) | |
| 466 for i in range(dircount): | |
| 467 os.mkdir(os.path.join(slavesrc, "d%i" % (i))) | |
| 468 for j in range(dircount): | |
| 469 curdir = os.path.join("d%i" % (i), "e%i" % (j)) | |
| 470 os.mkdir(os.path.join(slavesrc, curdir)) | |
| 471 for h in range(3): | |
| 472 open(os.path.join(slavesrc, curdir, "file%i" % (h)), "w").wr
ite(content[h]) | |
| 473 for j in range(dircount): | |
| 474 #empty dirs, must be uploaded too | |
| 475 curdir = os.path.join("d%i" % (i), "f%i" % (j)) | |
| 476 os.mkdir(os.path.join(slavesrc, curdir)) | |
| 477 | |
| 478 d = self.runStep(step) | |
| 479 def _checkUpload(results): | |
| 480 step_status = step.step_status | |
| 481 #l = step_status.getLogs() | |
| 482 #if l: | |
| 483 # logtext = l[0].getText() | |
| 484 # print logtext | |
| 485 self.failUnlessEqual(results, SUCCESS) | |
| 486 self.failUnless(os.path.exists(masterdest)) | |
| 487 for i in range(dircount): | |
| 488 for j in range(dircount): | |
| 489 curdir = os.path.join("d%i" % (i), "e%i" % (j)) | |
| 490 self.failUnless(os.path.exists(os.path.join(masterdest, curd
ir))) | |
| 491 for h in range(3): | |
| 492 masterdest_contents = open(os.path.join(masterdest, curd
ir, "file%i" % (h)), "r").read() | |
| 493 self.failUnlessEqual(masterdest_contents, content[h]) | |
| 494 for j in range(dircount): | |
| 495 curdir = os.path.join("d%i" % (i), "f%i" % (j)) | |
| 496 self.failUnless(os.path.exists(os.path.join(masterdest, curd
ir))) | |
| 497 d.addCallback(_checkUpload) | |
| 498 return d | |
| 499 | |
| 500 def testOneEmptyDir(self): | |
| 501 self.slavebase = "UploadDirectory.testOneEmptyDir.slave" | |
| 502 self.masterbase = "UploadDirectory.testOneEmptyDir.master" | |
| 503 sb = self.makeSlaveBuilder() | |
| 504 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 505 "build")) | |
| 506 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 507 # files will appear there. Under trial, we're chdir'ed into | |
| 508 # _trial_temp instead, so use a different masterdest= to keep the | |
| 509 # uploaded file in a test-local directory | |
| 510 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 511 step = self.makeStep(DirectoryUpload, | |
| 512 slavesrc="source_dir", | |
| 513 masterdest=masterdest) | |
| 514 slavesrc = os.path.join(self.slavebase, | |
| 515 self.slavebuilderbase, | |
| 516 "build", | |
| 517 "source_dir") | |
| 518 os.mkdir(slavesrc) | |
| 519 | |
| 520 d = self.runStep(step) | |
| 521 def _checkUpload(results): | |
| 522 step_status = step.step_status | |
| 523 #l = step_status.getLogs() | |
| 524 #if l: | |
| 525 # logtext = l[0].getText() | |
| 526 # print logtext | |
| 527 self.failUnlessEqual(results, SUCCESS) | |
| 528 self.failUnless(os.path.exists(masterdest)) | |
| 529 d.addCallback(_checkUpload) | |
| 530 return d | |
| 531 | |
| 532 def testManyEmptyDirs(self): | |
| 533 self.slavebase = "UploadDirectory.testManyEmptyDirs.slave" | |
| 534 self.masterbase = "UploadDirectory.testManyEmptyDirs.master" | |
| 535 sb = self.makeSlaveBuilder() | |
| 536 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 537 "build")) | |
| 538 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 539 # files will appear there. Under trial, we're chdir'ed into | |
| 540 # _trial_temp instead, so use a different masterdest= to keep the | |
| 541 # uploaded file in a test-local directory | |
| 542 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 543 step = self.makeStep(DirectoryUpload, | |
| 544 slavesrc="source_dir", | |
| 545 masterdest=masterdest) | |
| 546 slavesrc = os.path.join(self.slavebase, | |
| 547 self.slavebuilderbase, | |
| 548 "build", | |
| 549 "source_dir") | |
| 550 dircount = 25 | |
| 551 os.mkdir(slavesrc) | |
| 552 for i in range(dircount): | |
| 553 os.mkdir(os.path.join(slavesrc, "d%i" % (i))) | |
| 554 for j in range(dircount): | |
| 555 curdir = os.path.join("d%i" % (i), "e%i" % (j)) | |
| 556 os.mkdir(os.path.join(slavesrc, curdir)) | |
| 557 curdir = os.path.join("d%i" % (i), "f%i" % (j)) | |
| 558 os.mkdir(os.path.join(slavesrc, curdir)) | |
| 559 | |
| 560 d = self.runStep(step) | |
| 561 def _checkUpload(results): | |
| 562 step_status = step.step_status | |
| 563 #l = step_status.getLogs() | |
| 564 #if l: | |
| 565 # logtext = l[0].getText() | |
| 566 # print logtext | |
| 567 self.failUnlessEqual(results, SUCCESS) | |
| 568 self.failUnless(os.path.exists(masterdest)) | |
| 569 for i in range(dircount): | |
| 570 for j in range(dircount): | |
| 571 curdir = os.path.join("d%i" % (i), "e%i" % (j)) | |
| 572 self.failUnless(os.path.exists(os.path.join(masterdest, curd
ir))) | |
| 573 curdir = os.path.join("d%i" % (i), "f%i" % (j)) | |
| 574 self.failUnless(os.path.exists(os.path.join(masterdest, curd
ir))) | |
| 575 d.addCallback(_checkUpload) | |
| 576 return d | |
| 577 | |
| 578 def testOneDirOneFile(self): | |
| 579 self.slavebase = "UploadDirectory.testOneDirOneFile.slave" | |
| 580 self.masterbase = "UploadDirectory.testOneDirOneFile.master" | |
| 581 sb = self.makeSlaveBuilder() | |
| 582 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 583 "build")) | |
| 584 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 585 # files will appear there. Under trial, we're chdir'ed into | |
| 586 # _trial_temp instead, so use a different masterdest= to keep the | |
| 587 # uploaded file in a test-local directory | |
| 588 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 589 step = self.makeStep(DirectoryUpload, | |
| 590 slavesrc="source_dir", | |
| 591 masterdest=masterdest) | |
| 592 slavesrc = os.path.join(self.slavebase, | |
| 593 self.slavebuilderbase, | |
| 594 "build", | |
| 595 "source_dir") | |
| 596 os.mkdir(slavesrc) | |
| 597 content = "this is one source file\n" * 1000 | |
| 598 open(os.path.join(slavesrc, "srcfile"), "w").write(content) | |
| 599 | |
| 600 d = self.runStep(step) | |
| 601 def _checkUpload(results): | |
| 602 step_status = step.step_status | |
| 603 #l = step_status.getLogs() | |
| 604 #if l: | |
| 605 # logtext = l[0].getText() | |
| 606 # print logtext | |
| 607 self.failUnlessEqual(results, SUCCESS) | |
| 608 self.failUnless(os.path.exists(masterdest)) | |
| 609 masterdest_contents = open(os.path.join(masterdest, "srcfile"), "r")
.read() | |
| 610 self.failUnlessEqual(masterdest_contents, content) | |
| 611 d.addCallback(_checkUpload) | |
| 612 return d | |
| 613 | |
| 614 def testOneDirManyFiles(self): | |
| 615 self.slavebase = "UploadDirectory.testOneDirManyFile.slave" | |
| 616 self.masterbase = "UploadDirectory.testOneDirManyFile.master" | |
| 617 sb = self.makeSlaveBuilder() | |
| 618 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 619 "build")) | |
| 620 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 621 # files will appear there. Under trial, we're chdir'ed into | |
| 622 # _trial_temp instead, so use a different masterdest= to keep the | |
| 623 # uploaded file in a test-local directory | |
| 624 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 625 step = self.makeStep(DirectoryUpload, | |
| 626 slavesrc="source_dir", | |
| 627 masterdest=masterdest) | |
| 628 slavesrc = os.path.join(self.slavebase, | |
| 629 self.slavebuilderbase, | |
| 630 "build", | |
| 631 "source_dir") | |
| 632 filecount = 20 | |
| 633 os.mkdir(slavesrc) | |
| 634 content = [] | |
| 635 content.append("this is one source file\n" * 1000) | |
| 636 content.append("this is a second source file\n" * 978) | |
| 637 content.append("this is a third source file\n" * 473) | |
| 638 for i in range(3): | |
| 639 for j in range(filecount): | |
| 640 open(os.path.join(slavesrc, "srcfile%i_%i" % (i, j)), "w").write
(content[i]) | |
| 641 | |
| 642 d = self.runStep(step) | |
| 643 def _checkUpload(results): | |
| 644 step_status = step.step_status | |
| 645 #l = step_status.getLogs() | |
| 646 #if l: | |
| 647 # logtext = l[0].getText() | |
| 648 # print logtext | |
| 649 self.failUnlessEqual(results, SUCCESS) | |
| 650 self.failUnless(os.path.exists(masterdest)) | |
| 651 for i in range(3): | |
| 652 for j in range(filecount): | |
| 653 masterdest_contents = open(os.path.join(masterdest, "srcfile
%i_%i" % (i, j)), "r").read() | |
| 654 self.failUnlessEqual(masterdest_contents, content[i]) | |
| 655 d.addCallback(_checkUpload) | |
| 656 return d | |
| 657 | |
| 658 def testManyDirsManyFiles(self): | |
| 659 self.slavebase = "UploadDirectory.testManyDirsManyFile.slave" | |
| 660 self.masterbase = "UploadDirectory.testManyDirsManyFile.master" | |
| 661 sb = self.makeSlaveBuilder() | |
| 662 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 663 "build")) | |
| 664 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 665 # files will appear there. Under trial, we're chdir'ed into | |
| 666 # _trial_temp instead, so use a different masterdest= to keep the | |
| 667 # uploaded file in a test-local directory | |
| 668 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 669 step = self.makeStep(DirectoryUpload, | |
| 670 slavesrc="source_dir", | |
| 671 masterdest=masterdest) | |
| 672 slavesrc = os.path.join(self.slavebase, | |
| 673 self.slavebuilderbase, | |
| 674 "build", | |
| 675 "source_dir") | |
| 676 dircount = 10 | |
| 677 os.mkdir(slavesrc) | |
| 678 for i in range(dircount): | |
| 679 os.mkdir(os.path.join(slavesrc, "d%i" % (i))) | |
| 680 for j in range(dircount): | |
| 681 curdir = os.path.join("d%i" % (i), "e%i" % (j)) | |
| 682 os.mkdir(os.path.join(slavesrc, curdir)) | |
| 683 curdir = os.path.join("d%i" % (i), "f%i" % (j)) | |
| 684 os.mkdir(os.path.join(slavesrc, curdir)) | |
| 685 | |
| 686 filecount = 5 | |
| 687 content = [] | |
| 688 content.append("this is one source file\n" * 1000) | |
| 689 content.append("this is a second source file\n" * 978) | |
| 690 content.append("this is a third source file\n" * 473) | |
| 691 for i in range(dircount): | |
| 692 for j in range(dircount): | |
| 693 for k in range(3): | |
| 694 for l in range(filecount): | |
| 695 open(os.path.join(slavesrc, "d%i" % (i), "e%i" % (j), "s
rcfile%i_%i" % (k, l)), "w").write(content[k]) | |
| 696 | |
| 697 d = self.runStep(step) | |
| 698 def _checkUpload(results): | |
| 699 step_status = step.step_status | |
| 700 #l = step_status.getLogs() | |
| 701 #if l: | |
| 702 # logtext = l[0].getText() | |
| 703 # print logtext | |
| 704 self.failUnlessEqual(results, SUCCESS) | |
| 705 self.failUnless(os.path.exists(masterdest)) | |
| 706 for i in range(dircount): | |
| 707 for j in range(dircount): | |
| 708 for k in range(3): | |
| 709 for l in range(filecount): | |
| 710 masterdest_contents = open(os.path.join(masterdest,
"d%i" % (i), "e%i" % (j), "srcfile%i_%i" % (k, l)), "r").read() | |
| 711 self.failUnlessEqual(masterdest_contents, content[k]
) | |
| 712 d.addCallback(_checkUpload) | |
| 713 return d | |
| 714 | |
| 715 | |
| 716 def testBigFile(self): | |
| 717 self.slavebase = "UploadDirectory.testBigFile.slave" | |
| 718 self.masterbase = "UploadDirectory.testBigFile.master" | |
| 719 sb = self.makeSlaveBuilder() | |
| 720 os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase, | |
| 721 "build")) | |
| 722 # the buildmaster normally runs chdir'ed into masterbase, so uploaded | |
| 723 # files will appear there. Under trial, we're chdir'ed into | |
| 724 # _trial_temp instead, so use a different masterdest= to keep the | |
| 725 # uploaded file in a test-local directory | |
| 726 masterdest = os.path.join(self.masterbase, "dest_dir") | |
| 727 step = self.makeStep(DirectoryUpload, | |
| 728 slavesrc="source_dir", | |
| 729 masterdest=masterdest) | |
| 730 slavesrc = os.path.join(self.slavebase, | |
| 731 self.slavebuilderbase, | |
| 732 "build", | |
| 733 "source_dir") | |
| 734 content = 'x' * 1024*1024*8 | |
| 735 os.mkdir(slavesrc) | |
| 736 open(os.path.join(slavesrc, "file"), "w").write(content) | |
| 737 | |
| 738 d = self.runStep(step) | |
| 739 def _checkUpload(results): | |
| 740 step_status = step.step_status | |
| 741 self.failUnlessEqual(results, SUCCESS) | |
| 742 self.failUnless(os.path.exists(masterdest)) | |
| 743 masterdest_contents = open(os.path.join(masterdest, "file"), "r").re
ad() | |
| 744 self.failUnlessEqual(masterdest_contents, content) | |
| 745 d.addCallback(_checkUpload) | |
| 746 return d | |
| 747 | |
| 748 | |
| 749 # TODO: | |
| 750 # test relative paths, ~/paths | |
| 751 # need to implement expanduser() for slave-side | |
| 752 # test error message when master-side file is in a missing directory | |
| 753 # remove workdir= default? | |
| 754 | |
| OLD | NEW |