def test_basic_db_function(self): # Get a random db name: db_name = generat_name() frame_endpoint = TCPFrameClient(remote) dbe = DBEndpoint(frame_endpoint,db_name) try: c = lite.connect('deko.db') cur = c.cursor() cur.execute("SELECT * FROM disas") dataa = cur.fetchall() i=0 for d in dataa : # print type(str(d[3])) dbe.add_function(str(d[0]),str(d[1]),str(d[3])) # dbe.add_function(d[0],d[1],d[3]) dbe.request_similars(str(d[3]),2) # Check if the amount of returned functions is reasonable: similars = dbe.response_similars() print("+" + (150 * "-")) print ("|%s:"%d[0]) print similars print("+" + (150 * "-")) i+=1 c.commit() except lite.Error, e: if c: c.rollback() print "Error %s:" % e.args[0] sys.exit(1)
def test_basic_db_function(self): # Get a random db name: db_name = generat_name() frame_endpoint = TCPFrameClient(remote) dbe = DBEndpoint(frame_endpoint, db_name) try: c = lite.connect('deko.db') cur = c.cursor() cur.execute("SELECT * FROM disas") dataa = cur.fetchall() i = 0 for d in dataa: # print type(str(d[3])) dbe.add_function(str(d[0]), str(d[1]), str(d[3])) # dbe.add_function(d[0],d[1],d[3]) dbe.request_similars(str(d[3]), 2) # Check if the amount of returned functions is reasonable: similars = dbe.response_similars() print("+" + (150 * "-")) print("|%s:" % d[0]) print similars print("+" + (150 * "-")) i += 1 c.commit() except lite.Error, e: if c: c.rollback() print "Error %s:" % e.args[0] sys.exit(1)
def test_request_similars(self): """ Check basic operation of DBEndpoint """ mfe = MockFrameEndpoint() dbe = DBEndpoint(mfe,'my_db_name') # We expect the CHOOSE_DB message to be here: self.assertEqual(len(mfe.out_list),1) frame = mfe.out_list.pop(0) assert 'my_db_name' in frame func_data = '029348509238459kldfjaklsdjflkasjdfklasdf' num_similars = 8 # Prepare a response for the REQUEST_SIMILARS message ahead of time: # Two results: name1 = 'name1' comment1 = 'comment1' sim_grade1 = 7 name2 = 'name1' comment2 = 'comment1' sim_grade2 = 7 msg = "" # Two records: msg += struct.pack('I',2) # First record: msg += struct.pack('I',len(name1)) msg += name1 msg += struct.pack('I',len(comment1)) msg += comment1 msg += struct.pack('I',sim_grade1) # Second record: msg += struct.pack('I',len(name2)) msg += name2 msg += struct.pack('I',len(comment2)) msg += comment2 msg += struct.pack('I',sim_grade2) # Add message type: frame = dword_pack(MsgTypes.RESPONSE_SIMILARS,msg) mfe.in_list.append(frame) dbe.request_similars(func_data,num_similars) similars = dbe.response_similars() self.assertEqual(len(mfe.out_list),1) frame = mfe.out_list.pop(0) assert func_data in frame # We expect two results: self.assertEqual(len(similars),2) self.assertIsInstance(similars[0],FSimilar) dbe.close()
def test_basic_db_function(self): # Get a random db name: db_name = rand_db_name() frame_endpoint = TCPFrameClient(remote) dbe = DBEndpoint(frame_endpoint,db_name) # A three somewhat similar functions: func_name1 = 'func_name1' func_comment1 = 'func_comment1' func_data1 = '230948509238459238459283409582309458230945' func_name2 = 'func_name2' func_comment2 = 'func_comment2' func_data2 = '230948509218459238459223409582309458230945' func_name3 = 'func_name3' func_comment3 = 'func_comment3' func_data3 = '230948509018459238459223409280309458030945' # A very different function: func_name4 = 'func_name4' func_comment4 = 'func_comment4' func_data4 = 'kasjflkasjfdlkasjdfoiuweoriuqwioreuwqioekaskldfjaslk' dbe.add_function(func_name1,func_comment1,func_data1) dbe.add_function(func_name2,func_comment2,func_data2) dbe.add_function(func_name3,func_comment3,func_data3) dbe.add_function(func_name4,func_comment4,func_data4) # Check if the amount of returned functions is reasonable: dbe.request_similars(func_data1,1) similars = dbe.response_similars() self.assertEqual(len(similars),1) dbe.request_similars(func_data1,2) similars = dbe.response_similars() self.assertEqual(len(similars),2) dbe.request_similars(func_data1,3) similars = dbe.response_similars() self.assertEqual(len(similars),3) dbe.request_similars(func_data1,4) similars = dbe.response_similars() self.assertEqual(len(similars),3) self.assertEqual(similars[0].name,func_name1) self.assertEqual(similars[0].comment,func_comment1) self.assertEqual(similars[0].sim_grade,NUM_HASHES) # Function 2 is second place with respect to similarity to function 1: self.assertEqual(similars[1].name,func_name2) self.assertLess(similars[1].sim_grade,NUM_HASHES) # Function 3 is third place: self.assertEqual(similars[2].name,func_name3) self.assertLess(similars[2].sim_grade,NUM_HASHES) # function 4 is the only function that looks like function 4 in this # dataset: dbe.request_similars(func_data4,3) similars = dbe.response_similars() self.assertEqual(len(similars),1) self.assertEqual(similars[0].name,func_name4) dbe.close() # Check persistency of the database by opening the same one again and # running a query: frame_endpoint = TCPFrameClient(remote) dbe = DBEndpoint(frame_endpoint,db_name) dbe.request_similars(func_data1,4) similars = dbe.response_similars() self.assertEqual(len(similars),3) self.assertEqual(similars[0].name,func_name1) self.assertEqual(similars[0].comment,func_comment1) self.assertEqual(similars[0].sim_grade,NUM_HASHES) dbe.close()