def test_without_image_id(self): """ Create server that has missing image in it in various ways. (for the case of BFV) """ for image in ({}, {'id': None}, ""): self.servers[0]['image'] = image self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.ACTIVE, image_id=None, flavor_id='valid_flavor', created=self.createds[0], servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0]))) del self.servers[0]['image'] self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.ACTIVE, image_id=None, flavor_id='valid_flavor', created=self.createds[0], servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0])))
def test_matches_only_if_server_address_matches_node_address(self): """ :func:`CLBNode.matches` returns True only if the :class:`NovaServer` has the same ServiceNet address as the node address """ node = CLBNode(node_id='1234', description=self.desc, address='10.1.1.1') self.assertFalse(node.matches( NovaServer(id='1', state=ServerState.ACTIVE, created=0.0, servicenet_address="10.1.1.2", image_id='image', flavor_id='flavor'))) self.assertTrue(node.matches( NovaServer(id='1', state=ServerState.ACTIVE, created=0.0, servicenet_address="10.1.1.1", image_id='image', flavor_id='flavor')))
def _create_servers(self, n, state=ServerState.ACTIVE): """ Create some dummy test servers. """ return pset([ NovaServer(id=str(i), state=state, created=123456789., image_id='image', flavor_id='flavor') for i in xrange(n) ])
def server(id, state, created=0, image_id='image', flavor_id='flavor', json=None, metadata=pmap(), **kwargs): """Convenience for creating a :obj:`NovaServer`.""" json = pmap(json) or pmap({'id': id, 'status': state.name}) if state is ServerState.UNKNOWN_TO_OTTER: json = json.set('status', 'blargho') elif state is ServerState.DELETED: json = json.set('status', 'ACTIVE') json = json.set('OS-EXT-STS:task_state', 'deleting') if metadata: json = json.set('metadata', pmap(metadata)) return NovaServer(id=id, state=state, created=created, image_id=image_id, flavor_id=flavor_id, json=json, **kwargs)
def test_with_servicenet(self): """ Create server that has servicenet IP in it. """ self.assertEqual( NovaServer.from_server_details_json(self.servers[1]), NovaServer(id='b', state=ServerState.BUILD, image_id='valid_image', flavor_id='valid_flavor', created=self.createds[1], servicenet_address='10.0.0.1', links=freeze(self.servers[1]['links']), json=freeze(self.servers[1])))
def test_without_address(self): """ Handles server json that does not have "addresses" in it. """ self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.ACTIVE, image_id='valid_image', flavor_id='valid_flavor', created=self.createds[0], servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0])))
def test_without_private(self): """ Creates server that does not have private/servicenet IP in it. """ self.servers[0]['addresses'] = {'public': 'p'} self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.ACTIVE, image_id='valid_image', flavor_id='valid_flavor', created=self.createds[0], servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0])))
def test_deleting_server(self): """ A server whose "OS-EXT-STS:task_state" is "deleting" will be considered as DELETED """ self.servers[0]["OS-EXT-STS:task_state"] = "deleting" self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.DELETED, image_id='valid_image', flavor_id='valid_flavor', created=self.createds[0], desired_lbs=pset(), servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0])))
def test_lbs_from_metadata_ignores_unsupported_lb_types(self): """ Creating from server json ignores unsupported LB types """ self.servers[0]['metadata'] = { "rax:autoscale:lb:1": '[{"port":80},{"port":90}]', "rax:autoscale:lb:RackConnect:{0}".format(uuid4()): None, "rax:autoscale:lb:Neutron:456": None } self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.ACTIVE, image_id='valid_image', flavor_id='valid_flavor', created=self.createds[0], desired_lbs=pset(), servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0])))
def test_with_lb_metadata(self): """ Create a server that has load balancer config metadata in it. The only desired load balancers created are the ones with valid data. """ self.servers[0]['metadata'] = { # correct clb config 'rax:autoscale:lb:CloudLoadBalancer:1': '[{"port":80},{"port":90}]', # invalid because there is no port "rax:autoscale:lb:CloudLoadBalancer:2": '[{}]', # two correct lbconfigs and one incorrect one 'rax:autoscale:lb:CloudLoadBalancer:3': '[{"port":80},{"bad":"1"},{"port":90}]', # a dictionary instead of a list 'rax:autoscale:lb:CloudLoadBalancer:4': '{"port": 80}', # not even valid json 'rax:autoscale:lb:CloudLoadBalancer:5': 'invalid json string', # RCv3 with same LB id as CLB 'rax:autoscale:lb:RackConnectV3:1': '' } self.assertEqual( NovaServer.from_server_details_json(self.servers[0]), NovaServer(id='a', state=ServerState.ACTIVE, image_id='valid_image', flavor_id='valid_flavor', created=self.createds[0], desired_lbs=pset([ CLBDescription(lb_id='1', port=80), CLBDescription(lb_id='1', port=90), RCv3Description(lb_id='1')]), servicenet_address='', links=freeze(self.servers[0]['links']), json=freeze(self.servers[0])))