def pack_unpack(self, ddf, input): type_class = getattr(tdcli, "type_{0}".format(ddf["Type"].lower()))(ddf) rph = tdcli.row_pack_handler() type_class.pack(rph, input) rph.define_null(False) data = rph.pack_row(1) # format is # 2 bytes - row length # .. bytes - row data row_length = struct.unpack("H", data[:2])[0] ruh = tdcli.row_unpack_handler(data[2:], 1) td_types = [] unpack_type = getattr(tdcli, "type_{0}".format(ddf["Type"].lower()))(ddf) td_types.append(unpack_type) row_items = ruh.unpack_row(td_types, data[2:], row_length) self.assertEqual(len(row_items), 1) output = row_items[0] self.assertNotEqual(output, None) self.assertEqual(input, output)
def pack_unpack(self,ddf,input): type_class = getattr(tdcli,'type_{0}'.format(ddf['Type'].lower()))(ddf) rph = tdcli.row_pack_handler() type_class.pack(rph,input) rph.define_null(False) data = rph.pack_row(1) # format is # 2 bytes - row length # .. bytes - row data row_length = struct.unpack('H',data[:2])[0] ruh = tdcli.row_unpack_handler(data[2:],1) td_types = [] unpack_type = getattr(tdcli,'type_{0}'.format(ddf['Type'].lower()))(ddf) td_types.append(unpack_type) row_items = ruh.unpack_row(td_types,data[2:],row_length) self.assertEqual(len(row_items),1) output = row_items[0] self.assertNotEqual(output,None) self.assertEqual(input,output)
def test_multirow(self): """pack/unpack multiple rows and columns""" n_rows = random.randint(1, 10) n_columns = random.randint(1, 100) i = 0 cols = [] prev_type = type = None for c in range(0, n_columns): while type == prev_type: type = random.choice(tdcli.SUPPORTED_TYPES) cols.append(type) prev_type = type while i < n_rows: rph = tdcli.row_pack_handler() td_types = [] items = [] row_size = 0 for c in range(0, n_columns): ddf, data = getattr(self, "gen_{0}".format(cols[c].lower()))() td_type = getattr(tdcli, "type_{0}".format(cols[c].lower())) null = bool(random.randint(0, 1)) instance = td_type(ddf) if ddf["Type"] in ["CHAR", "VARCHAR"]: l = len(data) else: l = 10 if rph.row_len + l + instance.data_length + len(items) > 65534: self.assertRaises(OverflowError, rph.pack, instance, data) else: rph.pack(instance, data) td_types.append(instance) rph.define_null(null) if null is True: items.append(None) else: items.append(data) row_data = rph.pack_row(len(items)) row_length = struct.unpack("H", row_data[:2])[0] self.assertTrue(row_length < 65535) ruh = tdcli.row_unpack_handler(row_data[2:], len(items)) row_items = ruh.unpack_row(td_types, row_data[2:], row_length) for input in items: output = row_items.pop(0) self.assertEqual(input, output) i += 1
def test_multirow(self): """pack/unpack multiple rows and columns""" n_rows = random.randint(1,10) n_columns = random.randint(1,100) i=0 cols=[] prev_type= type=None for c in range(0,n_columns): while type == prev_type: type = random.choice(tdcli.SUPPORTED_TYPES) cols.append(type) prev_type = type while i < n_rows: rph = tdcli.row_pack_handler() td_types=[] items=[] row_size = 0 for c in range(0,n_columns): ddf,data = getattr(self,'gen_{0}'.format(cols[c].lower()))() td_type = getattr(tdcli,'type_{0}'.format(cols[c].lower())) null = bool(random.randint(0,1)) instance = td_type(ddf) if ddf['Type'] in ['CHAR','VARCHAR']: l = len(data) else: l = 10 if rph.row_len + l + instance.data_length + len(items) > 65534: self.assertRaises(OverflowError,rph.pack,instance,data) else: rph.pack(instance,data) td_types.append(instance) rph.define_null(null) if null is True: items.append(None) else: items.append(data) row_data = rph.pack_row(len(items)) row_length = struct.unpack('H',row_data[:2])[0] self.assertTrue(row_length < 65535) ruh = tdcli.row_unpack_handler(row_data[2:],len(items)) row_items = ruh.unpack_row(td_types,row_data[2:],row_length) for input in items: output = row_items.pop(0) self.assertEqual(input,output) i += 1