def _startThreeAgents(self): self.c = Chat((Chat.DEFAULT_LISTEN_IP, getUnusedListenPort())) self.c.start() self.c.createGroup() self._registerStartedChatSession(self.c) self.c2 = Chat((Chat.DEFAULT_LISTEN_IP, getUnusedListenPort())) self.c2.start() self._registerStartedChatSession(self.c2) self.c.addUser(self.c2.getListenAddress()) time.sleep(0.1) self.assertTrue(self.c2.groupView.isInGroup()) self.c3 = Chat((Chat.DEFAULT_LISTEN_IP, getUnusedListenPort())) self.c3.start() self._registerStartedChatSession(self.c3) self.c.addUser(self.c3.getListenAddress()) time.sleep(0.3) assert(self.c.groupView.isInGroup()) assert(self.c2.groupView.isInGroup()) assert(self.c3.groupView.isInGroup()) self.assertEqual(self.c.groupView.getGroup(), self.c2.groupView.getGroup()) self.assertEqual(self.c.groupView.getGroup(), self.c3.groupView.getGroup()) self.assertEqual(Chat.ONLINE, self.c2.userStatus(self.c3.getListenAddress())) self.assertEqual(Chat.ONLINE, self.c2.userStatus(self.c.getListenAddress())) self.assertEqual(Chat.ONLINE, self.c.userStatus(self.c2.getListenAddress())) self.assertEqual(Chat.ONLINE, self.c.userStatus(self.c3.getListenAddress())) self.assertEqual(Chat.ONLINE, self.c3.userStatus(self.c.getListenAddress())) self.assertEqual(Chat.ONLINE, self.c3.userStatus(self.c2.getListenAddress()))
def start(): global threads, master if not os.path.exists('sentences.txt'): os.system('gunzip sentences.txt.gz -c > sentences.txt') sentences = [s.strip() for s in open('sentences.txt').read().split('%')] for i in range(THREADS): newport = getUnusedListenPort() if not newport: break cs = ChatSimulator(Chat((Chat.DEFAULT_LISTEN_IP, newport), enable_logging=ENABLE_LOGGING, _periodicPingInterval=60000), sentences, master) if not master: print 'adding master' master = cs cs.start() time.sleep(0.5) # give it time to create the group else: cs.start() #print 'aa' threads.append(cs) while cs.chat.getListenAddress() not in master.chat.groupView.getGroup(): time.sleep(0.1) #pint = int(PERIODIC_PING_INTERVAL * cs._seed) + 1 #print 'b' #cs.chat.setPeriodicPingSleep(600) #print 'c' print 'created agent %d' % i #time.sleep(random.random()) #print 'd' #cs.chat.setPeriodicPingSleep(62) FinalizeStart().start()
def run(self): clients = self.clients method = self.method args = self.args print 'Experiment(%d, %s, %s)' % (clients, method, str(args)) chats = {} for i in range(clients): chats[i] = Chat((Chat.DEFAULT_LISTEN_IP, getUnusedListenPort()), enable_logging=False, _periodicPingInterval=60000) chats[0].start() chats[0].createGroup() offline_users = 0 for i in range(clients - 1): chats[0].addUser(chats[i+1].getListenAddress()) offline_users += 1 while len(chats[0].getOfflineUsers()) != offline_users: #print '%d != %d' % (len(chats[0].getOfflineUsers()), offline_users) time.sleep(0.1) for i in range(clients - 1): print 'starting %d' % (i + 1) chats[i+1].start() print 'sleeping for %d' % (0.1 * clients) time.sleep(0.1 * clients) chats[0]._timeForPeriodicPing() for i in range(clients): while len(chats[i].getOnlineUsers()) < clients: print 'sleeping before another periodic ping..' time.sleep(0.03* clients) #chats[0]._timeForPeriodicPing() # lock .. l_waiting = Lock() l_waiting.acquire() cfthread = CommandFinishedThread(l_waiting) # ready .. chats[0].notifyAfterNextDeliveryOfType(cfthread, 'Message') # Go! t_start = time.time() chats[0].__getattribute__(method)(*args) l_waiting.acquire() # block until chat notifies us (TODO: timeout) t_end = time.time() l_waiting.release() print 'experiment finished' # wait for command to end #time.sleep(1.0) # collect statistics self.results = {'total_messages': 0, 'time_taken': t_end - t_start, 'offline_agents': 0} messages_count = 0 bw_used = 0 for c in chats.keys(): for packet in chats[c].storedPackets: if packet.delivery_time < t_start or packet.delivery_time > t_end: continue messages_count += 1 print 'adding packet %s, %s' % (str(chats[c].getListenAddress()), str(packet)) bw_used += packet.size_bytes self.results['total_messages'] = messages_count self.results['bw_used'] = bw_used online = chats[0].getOnlineUsers() for i in chats: if chats[i].getListenAddress() not in online: self.results['offline_agents'] += 1 for i in chats: chats[i].stop() return True
def setUp(self): self._clearLogDir() self.c = Chat((Chat.DEFAULT_LISTEN_IP, getUnusedListenPort())) # default chat session self._chat_sessions = []