def pack(jobname, jobdict, worker, workdir): import cStringIO zmem = cStringIO.StringIO() z = zipfile.ZipFile(zmem, "w") # FIXME: Strip off leading pathname elements from zipped paths if not workdir: z.write(worker) else: def walker(arg, dirname, names): z.write(dirname) for n in names: z.write(os.path.join(dirname, n)) os.path.walk(workdir, walker, None) z.close() def contents(*t): offset = JobPack.HEADER_SIZE for segment in t: yield offset, segment offset += len(segment) offsets, fields = zip(*contents(json.dumps(jobdict), json.dumps({}), zmem.getvalue(), '')) hdr = JobPack.header(offsets) return hdr + ''.join(fields)
def test_badheader(self): offsets = [hdr_size + 1, hdr_size + 2, hdr_size + 2, hdr_size + 2] jobpack = JobPack.header(offsets) + b'0'*3 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error') offsets = [hdr_size, hdr_size, hdr_size + 1, hdr_size + 1] jobpack = JobPack.header(offsets) + b'0'*2 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error') offsets = [hdr_size, hdr_size+1, hdr_size, hdr_size + 1] jobpack = JobPack.header(offsets) + b'0'*2 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error') offsets = [hdr_size, hdr_size+1, hdr_size+1, hdr_size] jobpack = JobPack.header(offsets) + b'0'*2 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error')
def test_badheader(self): offsets = [hdr_size + 1, hdr_size + 2, hdr_size + 2, hdr_size + 2] jobpack = JobPack.header(offsets) + b'0' * 3 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error') offsets = [hdr_size, hdr_size, hdr_size + 1, hdr_size + 1] jobpack = JobPack.header(offsets) + b'0' * 2 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error') offsets = [hdr_size, hdr_size + 1, hdr_size, hdr_size + 1] jobpack = JobPack.header(offsets) + b'0' * 2 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error') offsets = [hdr_size, hdr_size + 1, hdr_size + 1, hdr_size] jobpack = JobPack.header(offsets) + b'0' * 2 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error')
def test_badmagic(self): offsets = [hdr_size, hdr_size + 1, hdr_size + 2, hdr_size + 3] jobpack = JobPack.header(offsets, magic=0) + b'0'*4 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error')
def test_badmagic(self): offsets = [hdr_size, hdr_size + 1, hdr_size + 2, hdr_size + 3] jobpack = JobPack.header(offsets, magic=0) + b'0' * 4 status, response = loads(self.disco.request('/disco/job/new', jobpack)) self.assertEquals(status, 'error')