示例#1
0
 def test_load_config(self):
     #Testing fail case
     with self.assertRaises(IOError) as err:
         self.cluster = HerdCluster(config='/etc/etc/sdfsdfasdiff.conf')
         self.cluster._sock.close()
     missing_exception = err.exception
     self.assertEqual(missing_exception.errno, 2)
     
     #Testing load works
     self.cluster = HerdCluster(config=self.config_path)
     self.assertEqual(self.cluster.address, "127.0.0.1:77777")
     self.assertEqual(self.cluster.seeds[0], '127.0.0.2:77777')
     self.assertEqual(self.cluster.seeds[1], '127.0.0.3:77777')
     self.assertEqual(self.cluster._groups[0], 'phalliday')
     self.assertEqual(self.cluster.ping_time, 600000)
     self.assertEqual(self.cluster.managers[0], '127.0.0.4:88888')
     self.cluster._sock.close()
     
     #Testing passing arguments in
     self.cluster = HerdCluster(seeds=["127.0.0.2:8888"], address="127.0.0.3:8899", groups=['asdf'], ping_time=11, managers=['127.0.0.44:9999'], config=self.config_path)
     self.assertEqual(self.cluster.address, "127.0.0.3:8899")
     self.assertEqual(self.cluster.seeds, ["127.0.0.2:8888"])
     self.assertEqual(self.cluster._groups[0], 'asdf')
     self.assertEqual(self.cluster.ping_time, 11)
     self.assertEqual(self.cluster.managers[0], '127.0.0.44:9999')
     self.cluster._sock.close()
     
     with self.assertRaises(AttributeError):
         self.cluster = HerdCluster(config="%s/configs/failed.conf" % (self.real_path))
         self.cluster._sock.close()
示例#2
0
def node2():
    groups=['drizzt51','phalliday']
    managers = ['127.0.0.1:8338']
    seeds = []
    address = '127.0.0.3:14922'
    cluster = HerdCluster(seeds=seeds, address=address, groups=groups, ping_time=5000, managers=managers)
    cluster.start()
示例#3
0
 def test_add_groups(self):
     self.cluster = HerdCluster(config=self.config_path)
     self.assertEqual(len(self.cluster._groups), 1)
     self.assertEqual(self.cluster.add_group('blah'), True)
     self.assertEqual(len(self.cluster._groups), 2)
     self.assertEqual('blah' in self.cluster._groups, True)
     self.cluster._sock.close()
示例#4
0
 def test_get_local_data(self):
     self.cluster = HerdCluster(config=self.config_path)
     self.cluster._local_data['foo'] = 'bar'
     self.cluster._groups = ['foo']
     self.assertEqual(self.cluster.get_local_data('foo'), 'bar')
     self.assertEqual(self.cluster.get_local_data('baz'), None)
     self.cluster._sock.close()
示例#5
0
 def test_update_local_data(self):
     self.cluster = HerdCluster(config=self.config_path)
     self.cluster._local_data['foo'] = 'bar'
     self.cluster._groups = ['foo']
     self.cluster.update_local_data('foo', 'baz')
     self.assertEqual(self.cluster._local_data['foo'], 'baz')
     self.cluster._groups = ['baz']
     self.cluster.update_local_data('baz', 'foo')
     self.assertEqual(self.cluster._local_data['baz'], 'foo')
     self.cluster._sock.close()
示例#6
0
 def test_remove_group(self):
     self.cluster = HerdCluster(config=self.config_path)
     self.assertEqual(len(self.cluster._groups), 1)
     self.cluster._groups.append('foo')
     test = { 'foo': int() }
     self.cluster._gossiper._application_state_publishers.append(test['foo'])
     self.cluster._publishers['foo'] = test['foo']
     self.assertEqual(len(self.cluster._groups), 2)
     self.assertEqual(self.cluster.remove_group('foo'), True)
     self.assertEqual(len(self.cluster._groups), 1)
     self.assertEqual(self.cluster.remove_group('blah'), False)
     self.cluster._sock.close()
示例#7
0
 def test_ping_managers(self):
     with mock.patch('herd.cluster.server.HerdClient') as MockClient:
         instance = MockClient.return_value
         instance.request.return_value = 'foo'      
         self.cluster = HerdCluster(config=self.config_path)
         self.assertEqual(len(self.cluster.managers), 1)
         sent_to = self.cluster._ping_managers()
         self.assertEqual(sent_to, '127.0.0.4:88888')
         self.assertEqual(MockClient.called, True)
         self.assertEqual(instance.request.called, True)
         instance.request.assert_called_once_with({ 'command': 'ping', 'data': { 'ip': '127.0.0.1:77777', 'groups': [ 'phalliday'] } })
         MockClient.assert_called_once_with(seed='127.0.0.4:88888')
         self.cluster._sock.close()
示例#8
0
class ClusterTest(TestCase):
    def setUp(self):
        real_path = os.path.dirname(os.path.realpath(__file__))
        self.config_path = "%s/configs/herd_cluster.conf" % (real_path)
    
    def test_load_config(self):
        #Testing fail case
        with self.assertRaises(IOError) as err:
            self.cluster = HerdCluster(config='/etc/etc/sdfsdfasdiff.conf')
            self.cluster._sock.close()
        missing_exception = err.exception
        self.assertEqual(missing_exception.errno, 2)
        
        #Testing load works
        self.cluster = HerdCluster(config=self.config_path)
        self.assertEqual(self.cluster.address, "127.0.0.1:77777")
        self.assertEqual(self.cluster.seeds[0], '127.0.0.2:77777')
        self.assertEqual(self.cluster.seeds[1], '127.0.0.3:77777')
        self.assertEqual(self.cluster._groups[0], 'phalliday')
        self.assertEqual(self.cluster.ping_time, 600000)
        self.assertEqual(self.cluster.managers[0], '127.0.0.4:88888')
        self.cluster._sock.close()
        
        #Testing passing arguments in
        self.cluster = HerdCluster(seeds=["127.0.0.2:8888"], address="127.0.0.3:8899", groups=['asdf'], ping_time=11, managers=['127.0.0.44:9999'], config=self.config_path)
        self.assertEqual(self.cluster.address, "127.0.0.3:8899")
        self.assertEqual(self.cluster.seeds, ["127.0.0.2:8888"])
        self.assertEqual(self.cluster._groups[0], 'asdf')
        self.assertEqual(self.cluster.ping_time, 11)
        self.assertEqual(self.cluster.managers[0], '127.0.0.44:9999')
        self.cluster._sock.close()
        
        with self.assertRaises(AttributeError):
            self.cluster = HerdCluster(config="%s/configs/failed.conf" % (self.real_path))
            self.cluster._sock.close()
        
    
    def test_get_local_data(self):
        self.cluster = HerdCluster(config=self.config_path)
        self.cluster._local_data['foo'] = 'bar'
        self.cluster._groups = ['foo']
        self.assertEqual(self.cluster.get_local_data('foo'), 'bar')
        self.assertEqual(self.cluster.get_local_data('baz'), None)
        self.cluster._sock.close()
    
    def test_update_local_data(self):
        self.cluster = HerdCluster(config=self.config_path)
        self.cluster._local_data['foo'] = 'bar'
        self.cluster._groups = ['foo']
        self.cluster.update_local_data('foo', 'baz')
        self.assertEqual(self.cluster._local_data['foo'], 'baz')
        self.cluster._groups = ['baz']
        self.cluster.update_local_data('baz', 'foo')
        self.assertEqual(self.cluster._local_data['baz'], 'foo')
        self.cluster._sock.close()
    
    def test_add_groups(self):
        self.cluster = HerdCluster(config=self.config_path)
        self.assertEqual(len(self.cluster._groups), 1)
        self.assertEqual(self.cluster.add_group('blah'), True)
        self.assertEqual(len(self.cluster._groups), 2)
        self.assertEqual('blah' in self.cluster._groups, True)
        self.cluster._sock.close()
    
    def test_remove_group(self):
        self.cluster = HerdCluster(config=self.config_path)
        self.assertEqual(len(self.cluster._groups), 1)
        self.cluster._groups.append('foo')
        test = { 'foo': int() }
        self.cluster._gossiper._application_state_publishers.append(test['foo'])
        self.cluster._publishers['foo'] = test['foo']
        self.assertEqual(len(self.cluster._groups), 2)
        self.assertEqual(self.cluster.remove_group('foo'), True)
        self.assertEqual(len(self.cluster._groups), 1)
        self.assertEqual(self.cluster.remove_group('blah'), False)
        self.cluster._sock.close()
    
    def test_ping_managers(self):
        with mock.patch('herd.cluster.server.HerdClient') as MockClient:
            instance = MockClient.return_value
            instance.request.return_value = 'foo'      
            self.cluster = HerdCluster(config=self.config_path)
            self.assertEqual(len(self.cluster.managers), 1)
            sent_to = self.cluster._ping_managers()
            self.assertEqual(sent_to, '127.0.0.4:88888')
            self.assertEqual(MockClient.called, True)
            self.assertEqual(instance.request.called, True)
            instance.request.assert_called_once_with({ 'command': 'ping', 'data': { 'ip': '127.0.0.1:77777', 'groups': [ 'phalliday'] } })
            MockClient.assert_called_once_with(seed='127.0.0.4:88888')
            self.cluster._sock.close()
示例#9
0
import logging
import random

from herd.cluster.server import HerdCluster
from herd.manager.client import HerdClient

logger = logging.getLogger('')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())

groups=['phalliday']
managers = ['127.0.0.1:8338']
msg = { 'command': 'init', 'data': { 'groups': groups } }
seeds = []
address = '127.0.0.2:14922'

client = HerdClient(seed=random.choice(managers))
response = client.request(msg)
if response and len(response['data']['groups']):
    for item in response['data']['groups']:        
        for value in item.values():
            for ip in value:
                if ip not in seeds and address != ip:
                    seeds.append(ip)


cluster = HerdCluster(seeds=seeds, address=address, groups=groups, ping_time=5000, managers=managers)
cluster.start()