def _do_upload(self, res, size, files, uris): name = '%d' % size print print "uploading %s" % name if self.mode in ("upload", "upload-self"): files[name] = self.create_data(name, size) d = self.control_rref.callRemote("upload_from_file_to_uri", files[name].encode("utf-8"), convergence="check-memory") def _done(uri): os.remove(files[name]) del files[name] return uri d.addCallback(_done) elif self.mode == "upload-POST": data = "a" * size url = "/uri" d = self.POST(url, t="upload", file=("%d.data" % size, data)) elif self.mode in ("receive", "download", "download-GET", "download-GET-slow"): # mode=receive: upload the data from a local peer, so that the # client-under-test receives and stores the shares # # mode=download*: upload the data from a local peer, then have # the client-under-test download it. # # we need to wait until the uploading node has connected to all # peers, since the wait_for_client_connections() above doesn't # pay attention to our self.nodes[] and their connections. files[name] = self.create_data(name, size) u = self.nodes[0].getServiceNamed("uploader") d = self.nodes[0].debug_wait_for_client_connections(self.numnodes + 1) d.addCallback(lambda res: u.upload( upload.FileName(files[name], convergence="check-memory"))) d.addCallback(lambda results: results.uri) else: raise ValueError("unknown mode=%s" % self.mode) def _complete(uri): uris[name] = uri print "uploaded %s" % name d.addCallback(_complete) return d
def _upload_one_file(ignored, i): if i >= self.count: return fn = os.path.join(self.basedir, str(i)) if self.mutable_mode == "create": data = open(fn, "rb").read() d1 = self.parent.create_mutable_file(data) d1.addCallback(lambda n: n.get_uri()) elif self.mutable_mode == "upload": data = open(fn, "rb").read() d1 = self._n.overwrite(MutableData(data)) d1.addCallback(lambda res: self._n.get_uri()) else: up = upload.FileName(fn, convergence=None) d1 = self.parent.upload(up) d1.addCallback(lambda results: results.get_uri()) d1.addCallback(_record_uri, i) d1.addCallback(_upload_one_file, i + 1) return d1
def remote_upload_random_data_from_file(self, size, convergence): tempdir = tempfile.mkdtemp() filename = os.path.join(tempdir, "data") f = open(filename, "wb") block = "a" * 8192 while size > 0: l = min(size, 8192) f.write(block[:l]) size -= l f.close() uploader = self.parent.getServiceNamed("uploader") u = upload.FileName(filename, convergence=convergence) d = uploader.upload(u) d.addCallback(lambda results: results.get_uri()) def _done(uri): os.remove(filename) os.rmdir(tempdir) return uri d.addCallback(_done) return d
def remote_upload_from_file_to_uri(self, filename, convergence): uploader = self.parent.getServiceNamed("uploader") u = upload.FileName(filename, convergence=convergence) d = uploader.upload(u) d.addCallback(lambda results: results.get_uri()) return d