def test_bad_name(self): '''Tries to born a robot with an invalid name. Should be fail.''' population_control = PopulationControl() database = MemcachedDatabase() database.add_password("OIkdj981HJDJHcnm_1") database.add_password("OIkdj981HJDJHcnm_2") database.add_password("OIkdj981HJDJHcnm_3") database.add_password("OIkdj981HJDJHcnm_4") database.commit() long_name = "n" * (MAX_ROBOT_NAME + 1) with self.assertRaises(LongRobotNameError): population_control.execute_command("OIkdj981HJDJHcnm_1", "born", [None, long_name]) database.rollback() with self.assertRaises(LongRobotNameError): population_control.execute_command("OIkdj981HJDJHcnm_2", "born", [None, None]) database.rollback() with self.assertRaises(LongRobotNameError): population_control.execute_command("OIkdj981HJDJHcnm_3", "born", [None, b"some bytes"]) database.rollback() with self.assertRaises(LongRobotNameError): population_control.execute_command("OIkdj981HJDJHcnm_4", "born", [None, database]) database.rollback()
def test_bad_parent_id(self): '''Tests with an invalid parent ID.''' population_control = PopulationControl() with self.assertRaises(InvalidArgumentsError): population_control.execute_command("123", "born", [1334]) with self.assertRaises(InvalidArgumentsError): population_control.execute_command("123", "born", [b"some bytes"])
def test_locked_robot(self): '''Tests with a locked robot.''' population_control = PopulationControl() database = MemcachedDatabase() database.get_robot(TestGiveBirth.ROBOT_ID, for_update=True) with self.assertRaises(LockAlreadyAquiredError): population_control.execute_command("123", "give_birth", [TestGiveBirth.ROBOT_ID]) database.rollback()
def test_with_parent(self): '''Tests borning a robot with a parent.''' population_control = PopulationControl() database = MemcachedDatabase() database.add_password("oijdnnh76153WEd") robot = Robot("test_with_parent_18873", "123") database.add_robot(robot, (14, 1)) database.commit() population_control.execute_command("oijdnnh76153WEd", "born", ["test_with_parent_18873", "My Child"]) database.rollback()
def test_ok(self): '''Tests a good scenario.''' population_control = PopulationControl() database = MemcachedDatabase() database.add_password("iujeh87UYh6512ewQ") robot_info = population_control.execute_command("iujeh87UYh6512ewQ", "born", [None, "RDaniel"]) database.commit() gotted_robot = database.get_robot(robot_info['robot_id']) self.assertEqual(gotted_robot.get_name(), "RDaniel")
def test_not_enough_honor(self): '''Tests a robot with few honors, trying to give birth.''' population_control = PopulationControl() database = MemcachedDatabase() configs = Configs() robot = database.get_robot(TestGiveBirth.ROBOT_ID, for_update=True) robot.set_honor(configs.get_robots_birth_required_honor() - 1) database.commit() with self.assertRaises(NotEnoughHonorError): population_control.execute_command("123", "give_birth", [TestGiveBirth.ROBOT_ID]) database.rollback()
def test_with_parent(self): '''Tests borning a robot with a parent.''' population_control = PopulationControl() database = MemcachedDatabase() database.add_password("oijdnnh76153WEd") robot = Robot("test_with_parent_18873", "123") database.add_robot(robot, (14, 1)) database.commit() population_control.execute_command( "oijdnnh76153WEd", "born", ["test_with_parent_18873", "My Child"]) database.rollback()
def test_ok(self): '''Tests a good scenario.''' population_control = PopulationControl() database = MemcachedDatabase() database.add_password("iujeh87UYh6512ewQ") robot_info = population_control.execute_command( "iujeh87UYh6512ewQ", "born", [None, "RDaniel"]) database.commit() gotted_robot = database.get_robot(robot_info['robot_id']) self.assertEqual(gotted_robot.get_name(), "RDaniel")
class Communicator(Singleton): '''Interface between listeners and the application.''' def _initialize(self): self._database = MemcachedDatabase() self._action_manager = ActionManager() self._population_control = PopulationControl() self._admin_handler = AdminHandler() def execute_command(self, password, command, args): '''Execute client's command.''' try: if command in ["born", "give_birth"]: result = self._population_control.execute_command(password, command, args) elif command == "map_data": result = self._admin_handler.execute_command(password, command, args) else: result = self._action_manager.do_action(password, command, args) # Committing or rollbacking all changes after the completion of execution. self._database.commit() return result except Exception: self._database.rollback() raise
def test_ok(self): '''Tests a valid situation.''' population_control = PopulationControl() database = MemcachedDatabase() configs = Configs() robot = database.get_robot(TestGiveBirth.ROBOT_ID, for_update=True) robot.set_honor(configs.get_robots_birth_required_honor() + 1) database.commit() new_password = population_control.execute_command("123", "give_birth", [TestGiveBirth.ROBOT_ID]) database.commit() updated_robot = database.get_robot(TestGiveBirth.ROBOT_ID, for_update=False) self.assertEqual(updated_robot.get_honor(), 1) self.assertTrue(isinstance(new_password, str)) self.assertEqual(len(new_password), 16)
def test_ok(self): '''Tests a valid situation.''' population_control = PopulationControl() database = MemcachedDatabase() configs = Configs() robot = database.get_robot(TestGiveBirth.ROBOT_ID, for_update=True) robot.set_honor(configs.get_robots_birth_required_honor() + 1) database.commit() new_password = population_control.execute_command( "123", "give_birth", [TestGiveBirth.ROBOT_ID]) database.commit() updated_robot = database.get_robot(TestGiveBirth.ROBOT_ID, for_update=False) self.assertEqual(updated_robot.get_honor(), 1) self.assertTrue(isinstance(new_password, str)) self.assertEqual(len(new_password), 16)
def test_invalid_args(self): '''Tests the method with some invalid arguments.''' population_control = PopulationControl() with self.assertRaises(InvalidArgumentsError): population_control.execute_command("123", "give_birth", [None]) with self.assertRaises(InvalidArgumentsError): population_control.execute_command( "123", "give_birth", [TestGiveBirth.ROBOT_ID, "Extra arg"]) with self.assertRaises(InvalidArgumentsError): population_control.execute_command(None, "give_birth", [TestGiveBirth.ROBOT_ID])
def test_invalid_args(self): '''Tests the method with some invalid arguments.''' population_control = PopulationControl() with self.assertRaises(InvalidArgumentsError): population_control.execute_command("123", "give_birth", [None]) with self.assertRaises(InvalidArgumentsError): population_control.execute_command("123", "give_birth", [TestGiveBirth.ROBOT_ID, "Extra arg"]) with self.assertRaises(InvalidArgumentsError): population_control.execute_command(None, "give_birth", [TestGiveBirth.ROBOT_ID])
def test_wrong_password(self): '''Tests borning a robot with wrong password.''' population_control = PopulationControl() with self.assertRaises(InvalidPasswordError): population_control.execute_command("wrong_pass_1273", "born", [])
def _initialize(self): self._database = MemcachedDatabase() self._action_manager = ActionManager() self._population_control = PopulationControl() self._admin_handler = AdminHandler()