def testUpdateRegistrantStatus(self): """ Tests if update of registrant status works properly """ storage = getAvatarConferenceStorage() registrant1 = Registrant() registrant1.setAvatar(self._avatar1) registrant1.setEmail("*****@*****.**") self._conf1.addRegistrant(registrant1, self._avatar1) self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") registrant2 = Registrant() registrant2.setAvatar(self._avatar2) registrant2.setEmail("*****@*****.**") self._conf1.addRegistrant(registrant2, self._avatar2) self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar2.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") self._conf1.removeRegistrant(registrant2.getId()) self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(storage[self._avatar2.getId() + '_' + self._conf1.getId()][1]["eventType"], "removed") self._conf1.removeRegistrant(registrant1.getId()) self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][1]["eventType"], "removed")
def testUpdateConference(self): """ Tests if update works properly after making changes in the conference """ storage = getAvatarConferenceStorage() participant1 = Participant(self._conf1, self._avatar1) participant2 = Participant(self._conf1, self._avatar2) participant3 = Participant(self._conf2, self._avatar2) self._conf1.getParticipation().addParticipant(participant1) self._conf1.getParticipation().addParticipant(participant2) self._conf2.getParticipation().addParticipant(participant3) self._conf1.setTitle('title') self.assertEqual(len(storage), 3) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf2.getId()]), 1) self._conf1.setDescription('description') self.assertEqual(len(storage), 3) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf2.getId()]), 1) self._conf2.setTitle('title') self.assertEqual(len(storage), 3) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf2.getId()]), 2)
def run(self): logger = self.getLogger() storage = getAvatarConferenceStorage() keysToDelete = [] # Send the requests for key, eventList in storage.iteritems(): for event in eventList: logger.info("Processing: {}:{}".format(key, event)) if not event.get( 'request_sent', False): # only the ones that are not already sent result = ExternalOperationsManager.execute( self, 'sendEventRequest{}{}'.format(key, event['eventType']), self._sendEventRequest, key, event['eventType'], event['avatar'], event['conference']) if result is None: logger.error("Request failed") break elif result.status_code != 200: logger.error( 'Request unsuccessful({})\nPayload: {}\nResponse: {}' .format(result.status_code, self.payload, result.content)) break else: logger.debug("Processed successfully") event['request_sent'] = True else: keysToDelete.append(key) self._clearAvatarConferenceStorage(keysToDelete)
def run(self): logger = self.getLogger() storage = getAvatarConferenceStorage() keysToDelete = [] # Send the requests for key, eventList in storage.iteritems(): for event in eventList: logger.info("Processing: {}:{}".format(key, event)) if not event.get('request_sent', False): # only the ones that are not already sent result = ExternalOperationsManager.execute(self, 'sendEventRequest{}{}'.format(key, event['eventType']), self._sendEventRequest, key, event['eventType'], event['avatar'], event['conference']) if result is None: logger.error("Request failed") break elif result.status_code != 200: logger.error('Request unsuccessful({})\nPayload: {}\nResponse: {}' .format(result.status_code, self.payload, result.content)) break else: logger.debug("Processed successfully") event['request_sent'] = True else: keysToDelete.append(key) self._clearAvatarConferenceStorage(keysToDelete)
def _clearAvatarConferenceStorage(self, keysToDelete): dbi = DBMgr.getInstance() dbi.commit() # Ensure that the status 'request_sent' is kept and requests are not sent twice storage = getAvatarConferenceStorage() for i, key in enumerate(keysToDelete): del storage[key] if i % 1000 == 999: dbi.commit() dbi.commit()
def testOutlookRunTask(self): """ Tests outlook notification scheduler task. Using mock to avoid running real POST requests. """ mockReturn = [] def mock_sendEventRequest(self, key, eventType, avatar, conference): if avatar.getName() == 'fake-2' and conference.getId() == '0': mockReturn.append(200) return 200 if avatar.getName() == 'fake-2' and conference.getId( ) == '1' and eventType == "added": mockReturn.append(200) return 200 mockReturn.append(None) return None OutlookUpdateCalendarNotificationTask._sendEventRequest = mock_sendEventRequest outlookTask = OutlookUpdateCalendarNotificationTask(MINUTELY) storage = getAvatarConferenceStorage() addAvatarConference(self._avatar1, self._conf1, "added") addAvatarConference(self._avatar1, self._conf1, "removed") addAvatarConference(self._avatar2, self._conf2, "added") outlookTask.run() self.assertEqual(mockReturn, [None, 200]) self.assertEqual(len(storage), 1) self.assertEqual( len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) mockReturn = [] addAvatarConference(self._avatar1, self._conf2, "added") addAvatarConference(self._avatar1, self._conf2, "removed") outlookTask.run() self.assertEqual(mockReturn, [None]) self.assertEqual(len(storage), 2) self.assertEqual( len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual( len(storage[self._avatar1.getId() + '_' + self._conf2.getId()]), 2) mockReturn = [] outlookTask._clearAvatarConferenceStorage( [self._avatar1.getId() + '_' + self._conf2.getId()]) outlookTask._clearAvatarConferenceStorage( [self._avatar1.getId() + '_' + self._conf1.getId()]) self.assertEqual(len(storage), 0)
def testUpdateParticipantStatus(self): """ Tests if update of participant status works properly """ storage = getAvatarConferenceStorage() participant1 = Participant(self._conf1, self._avatar1) self._conf1.getParticipation().addParticipant(participant1) self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") participant1.setStatusAdded() self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") participant1.setStatusRefused() self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][1]["eventType"], "removed") participant2 = Participant(self._conf1, self._avatar2) participant2.setStatusInvited() self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) participant2.setStatusAccepted() self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar2.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") participant3 = Participant(self._conf2, self._avatar1) participant3.setStatusInvited() self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 1) participant3.setStatusRejected() self.assertEqual(len(storage), 3) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf2.getId()]), 1) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf2.getId()][0]["eventType"], "removed")
def testOutlookRunTask(self): """ Tests outlook notification scheduler task. Using mock to avoid running real POST requests. """ mockReturn = [] def mock_sendEventRequest(self, key, eventType, avatar, conference): if avatar.getName() == 'fake-2' and conference.getId() == '0': mockReturn.append(200) return 200 if avatar.getName() == 'fake-2' and conference.getId() == '1' and eventType == "added": mockReturn.append(200) return 200 mockReturn.append(None) return None OutlookUpdateCalendarNotificationTask._sendEventRequest = mock_sendEventRequest outlookTask = OutlookUpdateCalendarNotificationTask(MINUTELY) storage = getAvatarConferenceStorage() addAvatarConference(self._avatar1, self._conf1, "added") addAvatarConference(self._avatar1, self._conf1, "removed") addAvatarConference(self._avatar2, self._conf2, "added") outlookTask.run() self.assertEqual(mockReturn, [None, 200]) self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) mockReturn = [] addAvatarConference(self._avatar1, self._conf2, "added") addAvatarConference(self._avatar1, self._conf2, "removed") outlookTask.run() self.assertEqual(mockReturn, [None]) self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf2.getId()]), 2) mockReturn = [] outlookTask._clearAvatarConferenceStorage([self._avatar1.getId() + '_' + self._conf2.getId()]) outlookTask._clearAvatarConferenceStorage([self._avatar1.getId() + '_' + self._conf1.getId()]) self.assertEqual(len(storage), 0)
def testAddStorageElements(self): """ Tests adding elements to the storage """ storage = getAvatarConferenceStorage() self.assertEqual(len(storage), 0) addAvatarConference(self._avatar1, self._conf1, "added") self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") addAvatarConference(self._avatar1, self._conf1, "removed") self.assertEqual(len(storage), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf1.getId()][1]["eventType"], "removed") addAvatarConference(self._avatar1, self._conf2, "added") self.assertEqual(len(storage), 2) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf2.getId()]), 1) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2) self.assertEqual(storage[self._avatar1.getId() + '_' + self._conf2.getId()][0]["eventType"], "added") addAvatarConference(self._avatar2, self._conf1, "added") self.assertEqual(len(storage), 3) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf1.getId()]), 1) self.assertEqual(storage[self._avatar2.getId() + '_' + self._conf1.getId()][0]["eventType"], "added") addAvatarConference(self._avatar2, self._conf2, "added") self.assertEqual(len(storage), 4) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf2.getId()]), 1) self.assertEqual(storage[self._avatar2.getId() + '_' + self._conf2.getId()][0]["eventType"], "added") addAvatarConference(self._avatar2, self._conf2, "removed") self.assertEqual(len(storage), 4) self.assertEqual(len(storage[self._avatar2.getId() + '_' + self._conf2.getId()]), 2) self.assertEqual(storage[self._avatar2.getId() + '_' + self._conf2.getId()][1]["eventType"], "removed") addAvatarConference(self._avatar1, self._conf1, "added") addAvatarConference(self._avatar1, self._conf1, "removed") self.assertEqual(len(storage), 4) self.assertEqual(len(storage[self._avatar1.getId() + '_' + self._conf1.getId()]), 2)
def run(self): logger = self.getLogger() storage = getAvatarConferenceStorage() keysToDelete = [] # Send the requests for key, eventList in storage.iteritems(): for event in eventList: logger.info("processing: %s:%s" % (key, event)) if not event.get('request_sent', False): # only the ones that are not already sent result = ExternalOperationsManager.execute(self, 'sendEventRequest' + key + event['eventType'], self._sendEventRequest, key, event['eventType'], event['avatar'], event['conference']) if result != 200: logger.debug("POST failed") break else: logger.debug("processing successful") event['request_sent'] = True else: keysToDelete.append(key) self._clearAvatarConferenceStorage(keysToDelete)