You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by ju...@apache.org on 2013/02/11 11:04:31 UTC
svn commit: r1444707 - in
/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct:
multiproduct/config.py multiproduct/dbcursor.py multiproduct/env.py
tests/config.py tests/env.py
Author: jure
Date: Mon Feb 11 10:04:31 2013
New Revision: 1444707
URL: http://svn.apache.org/r1444707
Log:
#355, patch t355_r1442601_trac_test_env_cmp_enabled.diff (from Olemis) applied, improve algorithm to determine whether component is enabled/disabled in product scope
Modified:
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/config.py
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/config.py
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/env.py
Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/config.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/config.py?rev=1444707&r1=1444706&r2=1444707&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/config.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/config.py Mon Feb 11 10:04:31 2013
@@ -298,7 +298,7 @@ class Section(Section):
setting.delete()
else:
# Update existing record
- setting.value = value
+ setting._data['value'] = value
setting.update()
# Helper methods
Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py?rev=1444707&r1=1444706&r2=1444707&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py Mon Feb 11 10:04:31 2013
@@ -65,6 +65,8 @@ class BloodhoundIterableCursor(trac.db.u
TRANSLATE_TABLES,
PRODUCT_COLUMN,
product_prefix)
+ if self.log:
+ self.log.debug('Original SQl: %s', sql)
return self._translator.translate(sql) if (self._translator is not None) else sql
def execute(self, sql, args=None):
Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py?rev=1444707&r1=1444706&r2=1444707&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py Mon Feb 11 10:04:31 2013
@@ -117,6 +117,42 @@ class EnvironmentStub(trac.test.Environm
except OperationalError:
pass
+ @staticmethod
+ def enable_component_in_config(env, cls):
+ """Keep track of enabled state in configuration as well
+ during test runs. This is closer to reality than
+ inherited `enable_component` method.
+ """
+ env.config['components'].set(env._component_name(cls), 'enabled')
+ env.enabled.clear()
+ env.components.pop(cls, None)
+ try:
+ del env._rules
+ except AttributeError:
+ pass
+ # FIXME: Shall we ?
+ #env.config.save()
+
+ @staticmethod
+ def disable_component_in_config(env, component):
+ """Keep track of disabled state in configuration as well
+ during test runs. This is closer to reality than
+ inherited `disable_component` method.
+ """
+ if isinstance(component, type):
+ cls = component
+ else:
+ cls = component.__class__
+ env.config['components'].set(env._component_name(cls), 'disabled')
+ env.enabled.clear()
+ env.components.pop(cls, None)
+ try:
+ del env._rules
+ except AttributeError:
+ pass
+ # FIXME: Shall we ?
+ #env.config.save()
+
def reset_db(self, default_data=None):
from multiproduct.api import DB_VERSION
schema_version = -1
@@ -127,6 +163,7 @@ class EnvironmentStub(trac.test.Environm
with self.db_direct_transaction as db:
self.mpsystem._update_db_version(db, DB_VERSION)
+
# replace trac.test.EnvironmentStub
trac.test.EnvironmentStub = EnvironmentStub
@@ -337,7 +374,7 @@ class ProductEnvironment(Component, Comp
`None`, the component only gets activated if it is located in
the `plugins` directory of the environment.
"""
- if not self.parent.is_component_enabled(cls):
+ if self.parent[cls] is None:
return False
return self.is_component_enabled_local(cls)
Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/config.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/config.py?rev=1444707&r1=1444706&r2=1444707&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/config.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/config.py Mon Feb 11 10:04:31 2013
@@ -188,6 +188,12 @@ class ProductConfigTestCase(Configuratio
self.assertEquals(u"Voilà l'été", config2.get('a', 'option2'))
self._test_with_inherit(testcb)
+ def test_overwrite(self):
+ config = self._read()
+ config.set('a', 'option', 'value1')
+ self.assertEquals('value1', config.get('a', 'option'))
+ config.set('a', 'option', 'value2')
+ self.assertEquals('value2', config.get('a', 'option'))
def test_suite():
return unittest.makeSuite(ProductConfigTestCase,'test')
Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/env.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/env.py?rev=1444707&r1=1444706&r2=1444707&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/env.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/env.py Mon Feb 11 10:04:31 2013
@@ -38,6 +38,8 @@ from trac.core import Component
from trac.env import Environment
from trac.test import EnvironmentStub
from trac.tests.env import EnvironmentTestCase
+from trac.ticket.report import ReportModule
+from trac.ticket.web_ui import TicketModule
from multiproduct.api import MultiProductSystem
from multiproduct.env import ProductEnvironment
@@ -159,6 +161,8 @@ class MultiproductTestCase(unittest.Test
def _upgrade_mp(self, env):
r"""Apply multi product upgrades
"""
+ env.disable_component(TicketModule)
+ env.disable_component(ReportModule)
self.mpsystem = MultiProductSystem(env)
try:
self.mpsystem.upgrade_environment(env.db_transaction)
@@ -215,6 +219,13 @@ class ProductEnvApiTestCase(Multiproduct
def tearDown(self):
# Release reference to transient environment mock object
+ if self.env is not None:
+ try:
+ self.env.reset_db()
+ except OperationalError:
+ # "Database not found ...",
+ # "OperationalError: no such table: system" or the like
+ pass
self.env = None
self.product_env = None
@@ -303,53 +314,102 @@ class ProductEnvApiTestCase(Multiproduct
global_env = self.env
product_env = self.product_env
-
- def clear_component_rules(env):
- del env._rules
- env.enabled.clear()
-
- # C initially disabled in both envs
- self.assertFalse(global_env.is_component_enabled(C))
- self.assertFalse(product_env.is_component_enabled_local(C))
- self.assertIs(global_env[C], None)
- self.assertIs(product_env[C], None)
-
- clear_component_rules(global_env)
- clear_component_rules(product_env)
-
- # C enabled in product env but not in global env
- product_env.enable_component(C)
- self.assertFalse(global_env.is_component_enabled(C))
- self.assertTrue(product_env.is_component_enabled_local(C))
- self.assertIs(global_env[C], None)
- self.assertIs(product_env[C], None)
-
- clear_component_rules(global_env)
- clear_component_rules(product_env)
-
- # C enabled in both envs
- product_env.enable_component(C)
- global_env.enable_component(C)
- self.assertTrue(global_env.is_component_enabled(C))
- self.assertTrue(product_env.is_component_enabled_local(C))
- self.assertIsNot(global_env[C], None)
- self.assertIsNot(product_env[C], None)
-
- clear_component_rules(global_env)
- clear_component_rules(product_env)
-
- # C enabled in global env but not in product env
- global_env.enable_component(C)
- self.assertTrue(global_env.is_component_enabled(C))
- self.assertFalse(product_env.is_component_enabled_local(C))
- self.assertIsNot(global_env[C], None)
- self.assertIs(product_env[C], None)
+
+ def _test_component_enabled(cls):
+ cname = global_env._component_name(cls)
+ disable_component_in_config = global_env.disable_component_in_config
+ enable_component_in_config = global_env.enable_component_in_config
+
+ # cls initially disabled in both envs
+ disable_component_in_config(global_env, cls)
+ disable_component_in_config(product_env, cls)
+
+ expected_rules = {
+ 'multiproduct' : True,
+ 'trac' : True,
+ 'trac.db' : True,
+ cname : False,
+ }
+ self.assertEquals(expected_rules, global_env._component_rules)
+ self.assertEquals(expected_rules, product_env._component_rules)
+
+ self.assertFalse(global_env.is_component_enabled(cls))
+ self.assertFalse(product_env.is_component_enabled_local(cls))
+ self.assertIs(global_env[cls], None)
+ self.assertIs(product_env[cls], None)
+
+ # cls enabled in product env but not in global env
+ disable_component_in_config(global_env, cls)
+ enable_component_in_config(product_env, cls)
+
+ expected_rules[cname] = False
+ self.assertEquals(expected_rules, global_env._component_rules)
+ expected_rules[cname] = True
+ self.assertEquals(expected_rules, product_env._component_rules)
+
+ self.assertFalse(global_env.is_component_enabled(cls))
+ self.assertTrue(product_env.is_component_enabled_local(cls))
+ self.assertIs(global_env[cls], None)
+ self.assertIs(product_env[cls], None)
+
+ # cls enabled in both envs
+ enable_component_in_config(global_env, cls)
+ enable_component_in_config(product_env, cls)
+
+ expected_rules[cname] = True
+ self.assertEquals(expected_rules, global_env._component_rules)
+ expected_rules[cname] = True
+ self.assertEquals(expected_rules, product_env._component_rules)
+
+ self.assertTrue(global_env.is_component_enabled(cls))
+ self.assertTrue(product_env.is_component_enabled_local(cls))
+ self.assertIsNot(global_env[cls], None)
+ self.assertIsNot(product_env[cls], None)
+
+ # cls enabled in global env but not in product env
+ enable_component_in_config(global_env, cls)
+ disable_component_in_config(product_env, cls)
+
+ expected_rules[cname] = True
+ self.assertEquals(expected_rules, global_env._component_rules)
+ expected_rules[cname] = False
+ self.assertEquals(expected_rules, product_env._component_rules)
+
+ self.assertTrue(global_env.is_component_enabled(cls))
+ self.assertFalse(product_env.is_component_enabled_local(cls))
+ self.assertIsNot(global_env[cls], None)
+ self.assertIs(product_env[cls], None)
+
+ # Test the rules against custom , external component
+ _test_component_enabled(C)
+
+ for env in (global_env, product_env):
+ env.config.remove('components', env._component_name(C))
+
+ # Test the rules against Trac component class
+ _test_component_enabled(TicketModule)
def test_path(self):
"""Testing env.path"""
self.assertEqual(self.product_env.path,
os.path.join(self.env.path, 'products', self.default_product))
+ def test_env_config_inheritance(self):
+ """Testing env.config"""
+ global_config = self.env.config
+ product_config = self.product_env.config
+
+ # By default inherit global settings ...
+ global_config['section'].set('key', 'value1')
+ self.assertEquals('value1', global_config['section'].get('key'))
+ self.assertEquals('value1', product_config['section'].get('key'))
+
+ # ... but allow for overrides in product scope
+ product_config['section'].set('key', 'value2')
+ self.assertEquals('value1', global_config['section'].get('key'))
+ self.assertEquals('value2', product_config['section'].get('key'))
+
+
def test_suite():
return unittest.TestSuite([
unittest.makeSuite(ProductEnvTestCase,'test'),