def get_server_info(self): ''' Gets the server info''' from biicode.server.conf import BII_DOWNLOAD_URL from biicode.server.conf import BII_GREET_MSG si = ServerInfo(message=BII_GREET_MSG) si.last_compatible = BII_LAST_COMPATIBLE_CLIENT si.download_url = BII_DOWNLOAD_URL return si
def model_serialization_test(self): server_info = ServerInfo(ClientVersion("0.9"), 'Hey!', "0.9") now = datetime.datetime.utcnow() info = UpdateInfo(server_info, now) seri = info.serialize() dese = UpdateInfo.deserialize(seri) self.assertEquals(info, dese)
def test_save_and_load(self): server_info = ServerInfo(ClientVersion("0.9"), 'Hey!', "0.9") now = datetime.datetime.utcnow() info = UpdateInfo(server_info, now) self.store.save(info) self.assertTrue(os.path.exists(self.file_path)) update_info = self.store.load() self.assertEquals(update_info.server_info, server_info) self.assertEquals(update_info.time, info.time)
def test_higher_version_ok(self): server_info = ServerInfo(version="0.9", message='Hey!', last_compatible="0.5") self.biiapi.get_server_info = Mock(return_value=server_info) manager = UpdatesManager(self.store, self.biiapi, ClientVersion("1.0")) last_time = self._save_info(manager, server_info, datetime.timedelta(days=-365)) biiout = OutputStream() manager.check_for_updates(biiout) self.assert_not_in_response(biiout, "There is a new version of biicode")
def check_for_updates(self, biiout): """Calls get_server_info in remote api if TIME_BETWEEN_CHECKS have passed""" update_info = self.store.load() server_info = update_info.server_info last_check = update_info.time now = datetime.datetime.utcnow() # If we don't have information yet or its old information if last_check is None or (last_check + self.time_between_checks) <= now: try: server_info = self.biiapi.get_server_info() except Exception as e: # Don't care if we can't call. continue working logger.debug(e) server_info = ServerInfo() self.store.save(UpdateInfo(server_info, now)) # If have not passed TIME_BETWEEN_CHECKS, process old server_info return self._process_server_info(server_info, biiout)
def test_not_checked_ever(self): """Even out client is obsolete its not time to check yet""" server_info = ServerInfo("0.9", 'Hey!', "0.9") self.biiapi.get_server_info = Mock(return_value=server_info) obsolete_client = ClientVersion("0.8") manager = UpdatesManager( self.store, self.biiapi, obsolete_client, time_between_checks=datetime.timedelta(days=10)) self.assertRaises(ObsoleteClient, manager.check_for_updates, self.user_io.out) self.assertEquals(self.user_io.out.stream.buf, "") # Information is saved self.assertEquals(self.store.load().server_info, server_info) # Now check again (not needed), it must be the same info and get_server_info # was not called self.biiapi.get_server_info.call_count = 0 self.assertRaises(ObsoleteClient, manager.check_for_updates, self.user_io.out) self.assertEquals(self.biiapi.get_server_info.call_count, 0) self.assertEquals(self.store.load().server_info, server_info)
def test_serialize(self): sut = ServerInfo() sut.download_url = 'https://www.biicode.com/downloads' serial = sut.serialize() deserialized = ServerInfo.deserialize(serial) self.assertEquals(sut, deserialized)
def deserialize(data): """Loads date and server info""" server_info = ServerInfo.deserialize(data[0]) time = datetime.datetime.strptime(data[1], UpdateInfo.DATE_PATTERN) return UpdateInfo(server_info, time)