def test_update(self): # Make a SyncStore that holds 20 objects tid = ''.join(chr(random.randint(0, 255)) for _ in range(20)) dbc = dbconn.DbConn(":memory:") store = SyncStore(tid, dbc, 21 * (len('text/plain') + RECORD_OVERHEAD)) recs = [] # Make 20 random entries and insert them for i in range(20): (hid, summary, data) = record.make_worktoken_record('text/plain', str(i)) recs.append((hid, str(i))) store.on_record(record.RT_WORKTOKEN, hid, summary, data) # 'Increase score' for the first 10 and update WT for i in range(10): (_, summary) = record.mine_worktoken(recs[i][0], 1000) store.on_summary(record.RT_WORKTOKEN, recs[i][0], summary) # Now add 10 more 'premined' values for i in range(10): (hid, summary, data) = record.make_worktoken_record('text/plain', str(20+i)) (_, summary) = record.mine_worktoken(hid, 1000) store.on_record(record.RT_WORKTOKEN, hid, summary, data) recs.append((hid, str(20+i))) # Check that right elements survived for i in range(10): self.assertTrue(store.get_data(record.RT_WORKTOKEN, recs[i][0])[1] == recs[i][1]) for i in range(10, 20): self.assertTrue(store.get_data(record.RT_WORKTOKEN, recs[i][0])[1] is None) for i in range(20, 30): self.assertTrue(store.get_data(record.RT_WORKTOKEN, recs[i][0])[1] == recs[i][1])
def test_get_summary(self): # Make a SyncStore that holds 20 objects tid = ''.join(chr(random.randint(0, 255)) for _ in range(20)) dbc = dbconn.DbConn(":memory:") store = SyncStore(tid, dbc, 21 * (len('text/plain') + RECORD_OVERHEAD)) recs = [] # Make 20 random entries and insert them for i in range(20): (hid, summary, data) = record.make_worktoken_record('text/plain', str(i)) recs.append((hid, str(i))) store.on_record(record.RT_WORKTOKEN, hid, summary, data) # 'Mine' for the first 10 and update WT for i in range(10): (_, summary) = record.mine_worktoken(recs[i][0], 1000) store.on_summary(record.RT_WORKTOKEN, recs[i][0], summary) # Check for order of 'events' seq = 0 for i in range(10): (seq, rtype, hid, _) = store.get_summary(seq) self.assertTrue(rtype == record.RT_WORKTOKEN) self.assertTrue(hid == recs[i + 10][0]) for i in range(10, 20): (seq, rtype, hid, _) = store.get_summary(seq) self.assertTrue(rtype == record.RT_WORKTOKEN) self.assertTrue(hid == recs[i - 10][0]) self.assertTrue(store.get_summary(seq)[0] is None)
def tact_add_record(self, tid, obj): logger.info('Got a add_record: tid = %s, val= %s', tid.encode('hex'), obj) the_store = self.node.get_store(tid) if the_store is None: raise HttpException(404, "Not Found") (hid, _, body) = record.make_worktoken_record('application/json', json.dumps(obj)) (_, summary) = record.mine_worktoken(hid, 1000) the_store.on_record(record.RT_WORKTOKEN, hid, summary, body) self.node.poke(tid) return {'success' : True, 'id' : hid.encode('base64')[:-1]}
def test_ordered(self): # Make a SyncStore that holds 20 objects tid = ''.join(chr(random.randint(0, 255)) for _ in range(20)) dbc = dbconn.DbConn(":memory:") store = SyncStore(tid, dbc, 21 * (len('text/plain') + RECORD_OVERHEAD)) recs = [] # Make 30 random entries and insert them for i in range(30): (hid, summary, data) = record.make_worktoken_record('text/plain', str(i)) score = record.score_record(record.RT_WORKTOKEN, hid, summary) recs.append((score, hid, str(i))) store.on_record(record.RT_WORKTOKEN, hid, summary, data) # Sort entries by score recs.sort(key=lambda x: x[0]) # Check the the right elements are there for i in range(10): self.assertTrue(store.get_data(record.RT_WORKTOKEN, recs[i][1])[1] == None) for i in range(10, 30): self.assertTrue(store.get_data(record.RT_WORKTOKEN, recs[i][1])[1] == recs[i][2])
def add_data(all_data, sstore, num): (hid, summary, body) = record.make_worktoken_record('text/plain', str(num)) all_data.append(hid) sstore.on_record(record.RT_WORKTOKEN, hid, summary, body)