marvin_refactor: include apiclient as part of factory The apiclient is required for creation of any factory and should be the in the FACTORY_ARGS list. This is useful for post_generation hooks to call other methods on the resulting object. For eg: A network creation triggers a networkoffering creation and so the enabling of the networkoffering.
Signed-off-by: Prasanna Santhanam <t...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4268f24a Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4268f24a Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4268f24a Branch: refs/heads/marvin_refactor Commit: 4268f24aca5c1310429e2acefecd542492154621 Parents: 422c7b0 Author: Prasanna Santhanam <t...@apache.org> Authored: Wed Sep 11 20:00:05 2013 +0530 Committer: Prasanna Santhanam <t...@apache.org> Committed: Thu Oct 31 13:54:24 2013 +0530 ---------------------------------------------------------------------- tools/marvin/marvin/factory/data/network.py | 1 - tools/marvin/marvin/factory/data/networkoffering.py | 6 +++--- tools/marvin/marvin/generate/entity.py | 5 +++-- tools/marvin/marvin/generate/factory.py | 4 +++- tools/marvin/marvin/test/test_factories.py | 6 +++--- tools/marvin/pom.xml | 1 + 6 files changed, 13 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4268f24a/tools/marvin/marvin/factory/data/network.py ---------------------------------------------------------------------- diff --git a/tools/marvin/marvin/factory/data/network.py b/tools/marvin/marvin/factory/data/network.py index 962d24f..ad6101c 100644 --- a/tools/marvin/marvin/factory/data/network.py +++ b/tools/marvin/marvin/factory/data/network.py @@ -30,7 +30,6 @@ class GuestIsolatedNetworkFactory(NetworkFactory): DefaultIsolatedNetworkOfferingWithSourceNatServiceFactory, apiclient=factory.SelfAttribute('..apiclient'), name=factory.Sequence(lambda n: 'GuestIsolatedNetworkOffering-%s' % random_gen()), - enable__apiclient=factory.SelfAttribute('..apiclient') ) networkofferingid = factory.LazyAttribute(lambda no: no.networkoffering.id if no.networkoffering else no.networkoffering) zoneid = None http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4268f24a/tools/marvin/marvin/factory/data/networkoffering.py ---------------------------------------------------------------------- diff --git a/tools/marvin/marvin/factory/data/networkoffering.py b/tools/marvin/marvin/factory/data/networkoffering.py index 96f77cf..41cda56 100644 --- a/tools/marvin/marvin/factory/data/networkoffering.py +++ b/tools/marvin/marvin/factory/data/networkoffering.py @@ -48,7 +48,7 @@ class DefaultIsolatedNetworkOfferingWithSourceNatServiceFactory(NetworkOfferingF def enable(self, create, extracted, **kwargs): if not create: return - self.update(apiclient=kwargs['apiclient'], id=self.id, state='Enabled') + self.update(apiclient=self.apiclient, id=self.id, state='Enabled') class DefaultSharedNetworkOfferingWithSGServiceFactory(NetworkOfferingFactory): @@ -83,7 +83,7 @@ class DefaultSharedNetworkOfferingWithSGServiceFactory(NetworkOfferingFactory): def enable(self, create, extracted, **kwargs): if not create: return - self.update(apiclient=kwargs['apiclient'], id=self.id, state='Enabled') + self.update(apiclient=self.apiclient, id=self.id, state='Enabled') @@ -115,4 +115,4 @@ class DefaultSharedNetworkOfferingFactory(NetworkOfferingFactory): def enable(self, create, extracted, **kwargs): if not create: return - self.update(apiclient=kwargs['apiclient'], id=self.id, state='Enabled') + self.update(apiclient=self.apiclient, id=self.id, state='Enabled') http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4268f24a/tools/marvin/marvin/generate/entity.py ---------------------------------------------------------------------- diff --git a/tools/marvin/marvin/generate/entity.py b/tools/marvin/marvin/generate/entity.py index 76316ef..dc96a14 100644 --- a/tools/marvin/marvin/generate/entity.py +++ b/tools/marvin/marvin/generate/entity.py @@ -96,11 +96,12 @@ class Entity(object): m.signature = 'def __init__(self, apiclient=None, %s, factory=None, **kwargs):' % ( ', '.join(map(lambda arg: arg + '=None', list(set(details['args']))))) else: - m.signature = 'def %s(cls, apiclient=None, factory=None, **kwargs):' % action + m.signature = 'def %s(cls, apiclient, factory=None, **kwargs):' % action + m.body.append(self.tabspace + 'self.__update__(kwargs)') m.body.append(self.tabspace + 'if not apiclient:') - m.body.append(self.tabspace * 2 + 'self.__update__(kwargs)') m.body.append(self.tabspace*2 + 'return') + m.body.append(self.tabspace + 'self.apiclient = apiclient') m.body.append(self.tabspace + 'cmd = %(module)s.%(command)s()' % {"module": details["apimodule"], "command": details["apicmd"]}) http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4268f24a/tools/marvin/marvin/generate/factory.py ---------------------------------------------------------------------- diff --git a/tools/marvin/marvin/generate/factory.py b/tools/marvin/marvin/generate/factory.py index d31f916..7c717f0 100644 --- a/tools/marvin/marvin/generate/factory.py +++ b/tools/marvin/marvin/generate/factory.py @@ -52,7 +52,9 @@ class Factory(object): code += '\n\n' code += 'class %sFactory(Factory):' % entity code += '\n\n' - code += tabspace + 'FACTORY_FOR = %s\n\n' % entity + code += tabspace + 'FACTORY_FOR = %s\n' % entity + code += tabspace + 'FACTORY_ARG_PARAMETERS = (\'apiclient\',)\n\n' + code += tabspace + 'apiclient = None\n' for arg in factory_defaults: code += tabspace + '%s = None\n' % arg self.name = entity http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4268f24a/tools/marvin/marvin/test/test_factories.py ---------------------------------------------------------------------- diff --git a/tools/marvin/marvin/test/test_factories.py b/tools/marvin/marvin/test/test_factories.py index 2dd5069..81e78a7 100644 --- a/tools/marvin/marvin/test/test_factories.py +++ b/tools/marvin/marvin/test/test_factories.py @@ -107,9 +107,9 @@ class NetworkOfferingFactoryTest(unittest.TestCase): self.assert_(snatOffering is not None, msg = "no network offering was created") self.assert_(snatOffering.name is not None, msg="error in network offering creation") + @attr(tags='offering') def test_defaultSGOfferingEnable(self): - sgOffering = DefaultSharedNetworkOfferingWithSGServiceFactory(apiclient=self.apiClient) - sgOffering.update(self.apiClient, state='Enabled', name=sgOffering.name, id=sgOffering.id) + DefaultSharedNetworkOfferingWithSGServiceFactory(apiclient=self.apiClient) def tearDown(self): pass @@ -201,7 +201,7 @@ class NetworkFactoryTest(unittest.TestCase): logging=logging.getLogger('factory.cloudstack')).getApiClient() def tearDown(self): - self.accnt.delete() + self.accnt.delete(apiclient=self.apiClient) @attr(tags='network') def test_isolatedGuestNetwork(self): http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4268f24a/tools/marvin/pom.xml ---------------------------------------------------------------------- diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml index 9876122..053a1a1 100644 --- a/tools/marvin/pom.xml +++ b/tools/marvin/pom.xml @@ -62,6 +62,7 @@ <argument>codegenerator.py</argument> <argument>-s</argument> <argument>${basedir}/commands.xml</argument> + <argument>-y</argument> </arguments> </configuration> </execution>