def test_success(self): """ Executes the plan and returns SUCCESS when that's the most severe result. """ dgs = get_desired_group_state(self.group_id, self.lc, 2) deleted = server( 'c', ServerState.DELETED, servicenet_address='10.0.0.3', desired_lbs=self.desired_lbs, links=freeze([{'href': 'link3', 'rel': 'self'}])) self.servers += (deleted,) steps = [ TestStep( Effect( {'dgs': dgs, 'servers': self.servers, 'lb_nodes': (), 'now': 0}) .on(lambda _: (StepResult.SUCCESS, [])))] def plan(dgs, servers, lb_nodes, now, build_timeout): self.assertEqual(build_timeout, 3600) return steps sequence = [ parallel_sequence([]), (Log('execute-convergence', dict(servers=self.servers, lb_nodes=(), steps=steps, now=self.now, desired=dgs)), noop), parallel_sequence([ [({'dgs': dgs, 'servers': self.servers, 'lb_nodes': (), 'now': 0}, noop)] ]), (Log('execute-convergence-results', {'results': [{'step': steps[0], 'result': StepResult.SUCCESS, 'reasons': []}], 'worst_status': 'SUCCESS'}), noop), # Note that servers arg is non-deleted servers (UpdateServersCache( "tenant-id", "group-id", self.now, [thaw(self.servers[0].json.set("_is_as_active", True)), thaw(self.servers[1].json.set("_is_as_active", True))]), noop) ] # all the servers updated in cache in beginning self.cache.append(thaw(deleted.json)) self.assertEqual( perform_sequence(self.get_seq() + sequence, self._invoke(plan)), (StepResult.SUCCESS, ScalingGroupStatus.ACTIVE))
def test_convert(self): """ An Otter launch config a :obj:`DesiredGroupState`, ignoring extra config information. """ server_config = {'name': 'test', 'flavorRef': 'f'} lc = {'args': {'server': server_config, 'loadBalancers': [ {'loadBalancerId': 23, 'port': 80, 'whatsit': 'invalid'}, {'loadBalancerId': 23, 'port': 90}, {'loadBalancerId': 23, 'type': 'RackConnectV3'}, {'loadBalancerId': '12', 'type': 'RackConnectV3'}]}} expected_server_config = { 'server': { 'name': 'test', 'flavorRef': 'f', 'metadata': { 'rax:auto_scaling_group_id': 'uuid', 'rax:autoscale:group:id': 'uuid', 'rax:autoscale:lb:CloudLoadBalancer:23': json.dumps( [{"port": 80}, {"port": 90}]), 'rax:autoscale:lb:RackConnectV3:23': '', 'rax:autoscale:lb:RackConnectV3:12': '' } } } state = get_desired_group_state('uuid', lc, 2) self.assertEqual( state, DesiredGroupState( server_config=expected_server_config, capacity=2, desired_lbs=pset([ CLBDescription(lb_id='23', port=80), CLBDescription(lb_id='23', port=90), RCv3Description(lb_id='23'), RCv3Description(lb_id='12')]))) self.assert_server_config_hashable(state)
def test_no_lbs(self): """ When no loadBalancers are specified, the returned DesiredGroupState has an empty mapping for desired_lbs. """ server_config = {'name': 'test', 'flavorRef': 'f'} lc = {'args': {'server': server_config}} expected_server_config = { 'server': { 'name': 'test', 'flavorRef': 'f', 'metadata': { 'rax:auto_scaling_group_id': 'uuid', 'rax:autoscale:group:id': 'uuid'}}} state = get_desired_group_state('uuid', lc, 2) self.assertEqual( state, DesiredGroupState( server_config=expected_server_config, capacity=2, desired_lbs=pset())) self.assert_server_config_hashable(state)