def test_log_steps(self): """The steps to be executed are logged to cloud feeds.""" step = CreateServer(server_config=pmap({"foo": "bar"})) step.as_effect = lambda: Effect("create-server") def plan(*args, **kwargs): return pbag([step]) sequence = [ parallel_sequence([ [parallel_sequence([ [(Log('convergence-create-servers', {'num_servers': 1, 'server_config': {'foo': 'bar'}, 'cloud_feed': True}), noop)] ])] ]), (Log(msg='execute-convergence', fields=mock.ANY), noop), parallel_sequence([ [("create-server", lambda i: (StepResult.RETRY, []))] ]), (Log(msg='execute-convergence-results', fields=mock.ANY), noop) ] self.assertEqual( perform_sequence(self.get_seq() + sequence, self._invoke(plan)), (StepResult.RETRY, ScalingGroupStatus.ACTIVE))
def test_create_server_noname(self): """ :obj:`CreateServer.as_effect`, when no name is provided in the launch config, will generate the name will from scratch. This only verifies intent; result reporting is tested in :meth:`test_create_server`. """ create = CreateServer( server_config=freeze({'server': {'flavorRef': '1'}})) eff = create.as_effect() self.assertEqual(eff.intent, Func(generate_server_name)) eff = resolve_effect(eff, 'random-name') self.assertEqual( eff.intent, service_request( ServiceType.CLOUD_SERVERS, 'POST', 'servers', data={'server': {'name': 'random-name', 'flavorRef': '1'}}, success_pred=has_code(202), reauth_codes=(401,)).intent)
def test_create_server_request_with_name(self): """ :obj:`CreateServer.as_effect` produces a request for creating a server. If the name is given, a randomly generated suffix is appended to the server name. """ create = CreateServer( server_config=freeze({'server': {'name': 'myserver', 'flavorRef': '1'}})) eff = create.as_effect() self.assertEqual(eff.intent, Func(generate_server_name)) eff = resolve_effect(eff, 'random-name') self.assertEqual( eff.intent, service_request( ServiceType.CLOUD_SERVERS, 'POST', 'servers', data={'server': {'name': 'myserver-random-name', 'flavorRef': '1'}}, success_pred=has_code(202), reauth_codes=(401,)).intent)