Beispiel #1
0
    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()))
Beispiel #2
0
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()
Beispiel #3
0
 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
Beispiel #4
0
 def setUp(self):
     self._clearLogDir()
     self.c = Chat((Chat.DEFAULT_LISTEN_IP, getUnusedListenPort())) # default chat session
     self._chat_sessions = []