Пример #1
0
class TestEtcdManager(unittest.TestCase):

    def __init__(self, method_name='runTest'):
        self.setUp = self.set_up
        super(TestEtcdManager, self).__init__(method_name)

    def set_up(self):
        requests.get = requests_get
        boto.ec2.connect_to_region = boto_ec2_connect_to_region
        self.manager = EtcdManager()
        self.manager.find_my_instace()

    def test_get_autoscaling_members(self):
        self.assertEqual(len(self.manager.get_autoscaling_members()), 3)
        self.assertEqual(self.manager.instance_id, 'i-deadbeef3')
        self.assertEqual(self.manager.region, 'eu-west-1')

    def test_clean_data_dir(self):
        self.manager.clean_data_dir()
        os.mkdir(self.manager.DATA_DIR)
        self.manager.clean_data_dir()
        open(self.manager.DATA_DIR, 'w').close()
        self.manager.clean_data_dir()
        os.symlink('foo', self.manager.DATA_DIR)
        old_unlink = os.unlink
        os.unlink = raise_exception
        self.manager.clean_data_dir()
        os.unlink = old_unlink
        self.manager.clean_data_dir()

    def test_load_my_identities(self):
        requests.get = requests_get_bad_status
        self.assertRaises(Exception, self.manager.load_my_identities)

    def test_run(self):
        os.execv = raise_exception
        os.fork = lambda: 0
        time.sleep = raise_exception
        self.assertRaises(Exception, self.manager.run)
        os.fork = lambda: 1
        os.waitpid = lambda a, b: (1, 0)
        self.assertRaises(Exception, self.manager.run)
class TestEtcdManager(unittest.TestCase):

    @patch('boto3.resource')
    @patch('requests.get', requests_get)
    def setUp(self, res):
        self.manager = EtcdManager()
        res.return_value.instances.filter.return_value = instances()
        self.manager.find_my_instance()

    @patch('boto3.resource')
    def test_get_autoscaling_members(self, res):
        res.return_value.instances.filter.return_value = instances()
        self.assertEqual(len(self.manager.get_autoscaling_members()), 3)
        self.assertEqual(self.manager.instance_id, 'i-deadbeef3')
        self.assertEqual(self.manager.region, 'eu-west-1')

    def test_clean_data_dir(self):
        self.manager.clean_data_dir()
        os.mkdir(self.manager.DATA_DIR)
        self.manager.clean_data_dir()
        open(self.manager.DATA_DIR, 'w').close()
        self.manager.clean_data_dir()
        os.symlink('foo', self.manager.DATA_DIR)
        with patch('os.unlink', Mock(side_effect=Exception)):
            self.manager.clean_data_dir()
        self.manager.clean_data_dir()

    @patch('requests.get', requests_get_bad_status)
    def test_load_my_identities(self):
        self.assertRaises(EtcdClusterException, self.manager.load_my_identities)

    @patch('time.sleep', Mock())
    @patch('requests.get', requests_get)
    @patch('boto3.resource')
    def test_register_me(self, res):
        res.return_value.instances.filter.return_value = instances()
        cluster = EtcdCluster(self.manager)
        cluster.load_members()
        self.manager.me.id = '1'
        self.manager.register_me(cluster)

        self.manager.me.id = None
        cluster.accessible_member.add_member = Mock(return_value=False)
        self.assertRaises(EtcdClusterException, self.manager.register_me, cluster)

        self.manager.me.client_urls = ['a']
        cluster.accessible_member.delete_member = Mock(return_value=False)
        self.assertRaises(EtcdClusterException, self.manager.register_me, cluster)

        cluster.accessible_member.delete_member = cluster.accessible_member.add_member = Mock(return_value=True)
        self.manager.register_me(cluster)

        cluster.leader_id = None
        self.assertRaises(EtcdClusterException, self.manager.register_me, cluster)

        cluster.accessible_member = None
        self.manager.register_me(cluster)

    @patch('boto3.resource')
    @patch('os.path.exists', Mock(return_value=True))
    @patch('os.execv', Mock(side_effect=Exception))
    @patch('os.fork', Mock(return_value=0))
    @patch('time.sleep', Mock(side_effect=SleepException))
    @patch('requests.get', requests_get)
    def test_run(self, res):
        res.return_value.instances.filter.return_value = instances()
        self.assertRaises(SleepException, self.manager.run)

        with patch('os.fork', Mock(return_value=1)):
            with patch('os.waitpid', Mock(return_value=(1, 0))):
                self.assertRaises(SleepException, self.manager.run)
                with patch.object(EtcdCluster, 'load_members', Mock(side_effect=SystemExit)):
                    self.manager.run()
class TestEtcdManager(unittest.TestCase):

    def __init__(self, method_name='runTest'):
        self.setUp = self.set_up
        super(TestEtcdManager, self).__init__(method_name)

    def set_up(self):
        time.sleep = lambda e: None
        requests.get = requests_get
        boto.ec2.connect_to_region = boto_ec2_connect_to_region
        self.manager = EtcdManager()
        self.manager.find_my_instace()

    def test_get_autoscaling_members(self):
        self.assertEqual(len(self.manager.get_autoscaling_members()), 3)
        self.assertEqual(self.manager.instance_id, 'i-deadbeef3')
        self.assertEqual(self.manager.region, 'eu-west-1')

    def test_clean_data_dir(self):
        self.manager.clean_data_dir()
        os.mkdir(self.manager.DATA_DIR)
        self.manager.clean_data_dir()
        open(self.manager.DATA_DIR, 'w').close()
        self.manager.clean_data_dir()
        os.symlink('foo', self.manager.DATA_DIR)
        old_unlink = os.unlink
        os.unlink = raise_exception
        self.manager.clean_data_dir()
        os.unlink = old_unlink
        self.manager.clean_data_dir()

    def test_load_my_identities(self):
        requests.get = requests_get_bad_status
        self.assertRaises(EtcdClusterException, self.manager.load_my_identities)

    def test_register_me(self):
        cluster = EtcdCluster(self.manager)
        cluster.load_members()
        self.manager.me.id = '1'
        self.manager.register_me(cluster)

        self.manager.me.id = None
        cluster.accessible_member.add_member = lambda e: False
        self.assertRaises(EtcdClusterException, self.manager.register_me, cluster)

        self.manager.me.client_urls = ['a']
        cluster.accessible_member.delete_member = lambda e: False
        self.assertRaises(EtcdClusterException, self.manager.register_me, cluster)

        cluster.accessible_member.delete_member = cluster.accessible_member.add_member = lambda e: True
        self.manager.register_me(cluster)

        cluster.leader_id = None
        self.assertRaises(EtcdClusterException, self.manager.register_me, cluster)

        cluster.accessible_member = None
        self.manager.register_me(cluster)

    def test_run(self):
        os.path.exists = lambda e: True
        os.execv = raise_exception
        os.fork = lambda: 0
        time.sleep = sleep_exception
        self.assertRaises(SleepException, self.manager.run)

        os.fork = lambda: 1
        os.waitpid = lambda a, b: (1, 0)
        self.assertRaises(SleepException, self.manager.run)

        load_members = EtcdCluster.load_members
        EtcdCluster.load_members = system_exit
        self.manager.run()
        EtcdCluster.load_members = load_members
Пример #4
0
class TestEtcdManager(unittest.TestCase):
    @patch('boto3.resource')
    @patch('requests.get', requests_get)
    def setUp(self, res):
        self.manager = EtcdManager()
        res.return_value.instances.filter.return_value = instances()
        self.manager.find_my_instance()

    @patch('boto3.resource')
    def test_get_autoscaling_members(self, res):
        res.return_value.instances.filter.return_value = instances()
        self.assertEqual(len(self.manager.get_autoscaling_members()), 3)
        self.assertEqual(self.manager.instance_id, 'i-deadbeef3')
        self.assertEqual(self.manager.region, 'eu-west-1')

    def test_clean_data_dir(self):
        self.manager.clean_data_dir()
        os.mkdir(self.manager.DATA_DIR)
        self.manager.clean_data_dir()
        open(self.manager.DATA_DIR, 'w').close()
        self.manager.clean_data_dir()
        os.symlink('foo', self.manager.DATA_DIR)
        with patch('os.unlink', Mock(side_effect=Exception)):
            self.manager.clean_data_dir()
        self.manager.clean_data_dir()

    @patch('requests.get', requests_get_bad_status)
    def test_load_my_identities(self):
        self.assertRaises(EtcdClusterException,
                          self.manager.load_my_identities)

    @patch('time.sleep', Mock())
    @patch('requests.get', requests_get)
    @patch('boto3.resource')
    def test_register_me(self, res):
        res.return_value.instances.filter.return_value = instances()
        cluster = EtcdCluster(self.manager)
        cluster.load_members()
        self.manager.me.id = '1'
        self.manager.register_me(cluster)

        self.manager.me.id = None
        cluster.accessible_member.add_member = Mock(return_value=False)
        self.assertRaises(EtcdClusterException, self.manager.register_me,
                          cluster)

        self.manager.me.client_urls = ['a']
        cluster.accessible_member.delete_member = Mock(return_value=False)
        self.assertRaises(EtcdClusterException, self.manager.register_me,
                          cluster)

        cluster.accessible_member.delete_member = cluster.accessible_member.add_member = Mock(
            return_value=True)
        self.manager.register_me(cluster)

        cluster.leader_id = None
        self.assertRaises(EtcdClusterException, self.manager.register_me,
                          cluster)

        cluster.accessible_member = None
        self.manager.register_me(cluster)

    @patch('boto3.resource')
    @patch('os.path.exists', Mock(return_value=True))
    @patch('os.execv', Mock(side_effect=Exception))
    @patch('os.fork', Mock(return_value=0))
    @patch('time.sleep', Mock(side_effect=SleepException))
    @patch('requests.get', requests_get)
    def test_run(self, res):
        res.return_value.instances.filter.return_value = instances()
        self.assertRaises(SleepException, self.manager.run)

        with patch('os.fork', Mock(return_value=1)):
            with patch('os.waitpid', Mock(return_value=(1, 0))):
                self.assertRaises(SleepException, self.manager.run)
                with patch.object(EtcdCluster, 'load_members',
                                  Mock(side_effect=SystemExit)):
                    self.manager.run()