def test_new_term_follower_update(self): self.raft.state.votedFor = 'second' message = UpdateMessage(term=2, prevLogIndex=-1, prevLogTerm=-1, entries=[Command('1', 1)], leaderCommit=1, fromLeader='second') actions = self.raft.receive(message) self.assertEqual(actions, [ Ack(term=2, reply_to=message), StateUpdate( [Command('1', term=1)], commitIndex=1, term=2, prevLogIndex=-1) ])
def test_answers_negative_when_log_desnt_match(self): action = StateUpdate( log=[Command('w', 1), Command('y', 2), Command('q', 2)], prevLogIndex=-1) # action.perform(None, self.raft.state) message = UpdateMessage(term=3, leaderCommit=2, fromLeader='first', prevLogIndex=2, prevLogTerm=3, entries=[Command('q', 3), Command('z', 3)]) answer = self.raft.receive(message) self.assertEqual(answer[0].__class__, Nack) self.assertEqual(self.raft.state.log, [])
def test_old_term_follower_ignore(self): self.raft.state.votedFor = 'second' self.raft.state.term = 1 message = UpdateMessage(term=0, prevLogIndex=0, prevLogTerm=0, entries=[Command('1', 1)], leaderCommit=1, fromLeader='second') actions = self.raft.receive(message) self.assertEqual(actions, [Nack(term=1, reply_to=message)])
def test_follower_match_log_vote(self): self.raft.state.votedFor = 'second' self.raft.state.term = 0 self.raft.state.log = [Command('1', term=1)] message = RequestVoteMessage( term=1, name='third', lastLogIndex=0, lastLogTerm=1, ) actions = self.raft.receive(message) self.assertEqual(actions, [ ElectionVote( name='first', term=1, reply_to=message, voteGranted=True), StateUpdate(votedFor='third', term=1) ])
def __init__(self, parent=None): # pyqt必要的代码 self.app = QApplication(sys.argv) QMainWindow.__init__(self, parent) self.ui = main_gui.Ui_MainWindow() self.ui.setupUi(self) # 程序功能模块(core.py)初始化 self.afk = Command() # 让功能模块(core.py)也能访问UI self.afk.utils.ui = self.ui # GUI数值初始化 self.init_interface() # 信号初始化 self.init_signal() # 显示GUI self.show() self.write_log("程序核心初始化完成!") # 加载图片资源 self.afk.utils.load_res() self.write_log("图片资源加载完成!") self.write_log("afk-arena-tools是开源软件,如果有任何问题建议想法,欢迎提issue或PR~") # 检查更新 Thread(target=self.check_update).start() sys.exit(self.app.exec_())
def init_core(self): self.afk = Command()