def __init__ ( self, config ) : global controller #self.base_uri = 'http://172.24.42.141/api' self.base_uri = config.SFA_CLAB_URL controller = Api(self.base_uri) #(config.CLAP_API_URL) try: controller.retrieve() except requests.exceptions.MissingSchema as e: raise MalformedURI(self.base_uri, e.message) except requests.exceptions.ConnectionError as e: raise UnexistingURI(self.base_uri, e.message) except ValueError: raise InvalidURI(self.base_uri) # Use of a default user for the C-Lab SFAWrap #self.username='******' #self.password='******' #self.groupname='vct' self.username = config.SFA_CLAB_USER self.password = config.SFA_CLAB_PASSWORD self.groupname = config.SFA_CLAB_GROUP controller.login(self.username, self.password) self.default_template = config.SFA_CLAB_DEFAULT_TEMPLATE
def test_retrieve_base(self): group = self.api.groups.retrieve()[0] name = 'RandomNode-%s' % random_ascii(10) self.test_login() node = self.api.nodes.create(name=name, group=group) controller = Api(node.uri) controller.retrieve() self.assertEqual(self.api, controller) self.assertEqual(self.api._data, controller._data)
class CouchBaseRetriever: def __init__(self): # connection to CouchBase DB self.cb = Couchbase.connect(bucket=config.COUCHBASE_BUCKET, host=config.COUCHBASE_HOST, port=config.COUCHBASE_PORT) # connection to C-Lab Controller API self.api = Api(config.CLAB_CONTROLLER_API) self.api.retrieve() def get_nodes_monitoring_metric(self, metric): view=View(self.cb, config.DESIGN_VIEW, config.VIEWS[metric], include_docs=True, full_set=True) nodes_info={} for v in view: node_name=v.value['node'] nodes_info[node_name]=v.value if metric == 'availability': return self.get_nodes_availability(nodes_info) return collections.OrderedDict(sorted(nodes_info.items())) def get_nodes_availability(self, nodes_info): nodes = self.api.nodes.retrieve() nodes_availability = {} timestamp = current_epoch_timestamp() for node in nodes: addr = "[{0}]".format(node.mgmt_net.addr) current_state= nodes_info[node.name]['current_state'] if node.name in nodes_info else 'UNKNOWN' up = 1 if current_state=='production' else 0 nodes_availability[node.name]={'node':unicode_normalize(node.name), 'node_addr':addr, 'timestamp':timestamp, 'up':up, 'current_state':current_state} return collections.OrderedDict(sorted(nodes_availability.items()))
class ApiTests(unittest.TestCase): def setUp(self): self.api = Api(os.environ['CONFINE_SERVER_API']) def test_attributes(self): self.assertEqual(['uri'], self.api._data.keys()) def test_self_retrieve(self): self.api.retrieve() self.assertEqual(3, len(self.api._data)) def test_managers(self): self.api.nodes with self.assertRaises(AttributeError): self.api.rata def test_login(self): self.assertRaises(self.api.ResponseStatusError, self.api.login) self.api.username = os.environ['CONFINE_USER'] self.api.password = os.environ['CONFINE_PASSWORD'] self.api.login() auth_header = self.api.DEFAULT_HEADERS['authorization'] self.assertLess(20, auth_header) def test_login_providing_credentials(self): username = os.environ['CONFINE_USER'] password = os.environ['CONFINE_PASSWORD'] self.api.login(username=username, password=password) self.assertEqual(self.api.username, username) self.assertEqual(self.api.password, password) auth_header = self.api.DEFAULT_HEADERS['authorization'] self.assertLess(20, auth_header) def test_logout(self): self.test_login() self.api.logout() self.assertNotIn('authorization', self.api.DEFAULT_HEADERS) def test_retrieve_base(self): group = self.api.groups.retrieve()[0] name = 'RandomNode-%s' % random_ascii(10) self.test_login() node = self.api.nodes.create(name=name, group=group) controller = Api(node.uri) controller.retrieve() self.assertEqual(self.api, controller) self.assertEqual(self.api._data, controller._data) def test_caching(self): api = Api(os.environ['CONFINE_SERVER_API'], cache=True) api.nodes.retrieve() self.assertEqual(0, api.cache.hits) self.assertEqual(2, api.cache.misses) nodes = api.nodes.retrieve() self.assertEqual(1, api.cache.hits) self.assertEqual(2, api.cache.misses) for node in nodes: node.retrieve() self.assertEqual(len(nodes) + 2, api.cache.misses) self.assertEqual(1, api.cache.hits) for node in nodes: node.retrieve() self.assertEqual(len(nodes) + 1, api.cache.hits) self.assertEqual(len(nodes) + 2, api.cache.misses) api.cache.invalidate() self.assertEqual(0, api.stats['conditional']) for node in nodes: node.retrieve() self.assertEqual(len(nodes), api.stats['conditional']) api.cache.remove() for node in nodes: node.retrieve() self.assertEqual(len(nodes), api.stats['conditional']) self.assertEqual((2 * len(nodes)) + 1, api.cache.hits) self.assertEqual((2 * len(nodes)) + 2, api.cache.misses)
class ApiTests(unittest.TestCase): def setUp(self): self.api = Api(os.environ['CONFINE_SERVER_API']) def test_attributes(self): self.assertEqual(['uri'], self.api._data.keys()) def test_self_retrieve(self): self.api.retrieve() self.assertEqual(3, len(self.api._data)) def test_managers(self): self.api.nodes with self.assertRaises(AttributeError): self.api.rata def test_login(self): self.assertRaises(self.api.ResponseStatusError, self.api.login) self.api.username = os.environ['CONFINE_USER'] self.api.password = os.environ['CONFINE_PASSWORD'] self.api.login() auth_header = self.api.DEFAULT_HEADERS['authorization'] self.assertLess(20, auth_header) def test_login_providing_credentials(self): username = os.environ['CONFINE_USER'] password = os.environ['CONFINE_PASSWORD'] self.api.login(username=username, password=password) self.assertEqual(self.api.username, username) self.assertEqual(self.api.password, password) auth_header = self.api.DEFAULT_HEADERS['authorization'] self.assertLess(20, auth_header) def test_logout(self): self.test_login() self.api.logout() self.assertNotIn('authorization', self.api.DEFAULT_HEADERS) def test_retrieve_base(self): group = self.api.groups.retrieve()[0] name = 'RandomNode-%s' % random_ascii(10) self.test_login() node = self.api.nodes.create(name=name, group=group) controller = Api(node.uri) controller.retrieve() self.assertEqual(self.api, controller) self.assertEqual(self.api._data, controller._data) def test_caching(self): api = Api(os.environ['CONFINE_SERVER_API'], cache=True) api.nodes.retrieve() self.assertEqual(0, api.cache.hits) self.assertEqual(2, api.cache.misses) nodes = api.nodes.retrieve() self.assertEqual(1, api.cache.hits) self.assertEqual(2, api.cache.misses) for node in nodes: node.retrieve() self.assertEqual(len(nodes)+2, api.cache.misses) self.assertEqual(1, api.cache.hits) for node in nodes: node.retrieve() self.assertEqual(len(nodes)+1, api.cache.hits) self.assertEqual(len(nodes)+2, api.cache.misses) api.cache.invalidate() self.assertEqual(0, api.stats['conditional']) for node in nodes: node.retrieve() self.assertEqual(len(nodes), api.stats['conditional']) api.cache.remove() for node in nodes: node.retrieve() self.assertEqual(len(nodes), api.stats['conditional']) self.assertEqual((2*len(nodes))+1, api.cache.hits) self.assertEqual((2*len(nodes))+2, api.cache.misses)