From nobody at svn.erp5.org Tue Oct 6 04:51:12 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 02:51:12 +0000 Subject: [Erp5-report] =?utf-8?q?ERP5-MASTER_=3A_4977_Tests=2C_0_Errors=2C?= =?utf-8?q?_3_Failures=2C_203_Skips?= Message-ID: <20151006025112.6C0B3BF0203@mail2.tiolive.com> Test Suite: ERP5-MASTER Revision: slapos=8364-706801f24182715993a7356444cdf5d29c512a7f,erp5=44897-41e39822499569a286cdf38817168729e2b5024f Result: FAIL All tests: 4977 Failures: 3 Errors: 0 Skips: 203 https://nexedi.erp5.net/test_result_module/20151005-5127D6FF/view The following tests failed: erp5_officejs_ui_test:testOfficeJS (1 failures) testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) testFunctionalCore (1 failures, 8 skips) testFunctionalTestRunner (testFunctionalCore.TestZeleniumCore) testFunctionalKM (1 failures, 3 skips) testFunctionalTestRunner (testFunctionalKM.TestZeleniumKM) The following tests were at least partly skipped: erp5_configurator_maxma_demo:testMaxmaDemoConfigurationWorkflow (1 skips) erp5_hal_json_style:testHalJsonStyle (4 skips) test_getRequestBody_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestBody) ... skipped 'TODO' test_getRequestHeader_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestHeader) ... skipped 'TODO' test_getRequestUrl_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestUrl) ... skipped 'TODO' test_getHateoas_drop_restricted (erp5.component.test.erp5_version.testHalJsonStyle.TestERP5Document_getHateoas_general) ... skipped 'TODO' erp5_web_shacache:testShaCache (1 skips) erp5_web_shadir:testShaDir (1 skips) networkcache_erp5:testShaCacheExternal (1 skips) testAccountingRulesSimulationLegacy (22 skips) testAdvancedInvoicing (1 skips) testBPMCore (1 skips) test_payBeforeDelivery (testBPMCore.TestBPMImplementation) ... skipped 'TODO ERP5' testBase (3 skips) check if a document is not indexed where we set isIndexable=0 in the same transaction of newContent(). ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we call edit() and set isIndexable=0 after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we set isIndexable=0 and call edit() after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' testBusinessTemplate (6 skips) test_BusinessTemplateUpgradeDocumentFromFilesystemToZodb (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocument (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentMigrated (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentNonExistingBefore (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' testCRM (1 skips) testCalendar (5 skips) test_2OverlappedLeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingBeforeGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsRepeatedGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' testConstraint (1 skips) testDeliveryBuilderToSupportMultipleLines (2 skips) testDms (1 skips) testDmsWithFlare (1 skips) testDmsWithPreConversion (1 skips) testERP5Base (1 skips) testERP5Catalog (4 skips) Tests that buildSQLQuery works with another query_table than 'catalog' ... skipped 'TODO ERP5' test_49_IndexInOrderedSearchFolder (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' test_SubDocumentsWithAcquireLocalRoleSecurityIndexing (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' testERP5Commerce (1 skips) test_22_createShoppingCartWithAnonymousAndLogin (testERP5Commerce.TestCommerce) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testERP5DocumentSyncML (4 skips) testERP5Interfaces (7 skips) testERP5SyncML (2 skips) testERP5Type (1 skips) testERP5TypeInterfaces (1 skips) testERP5Web (3 skips) test_03_CreateWebSiteUser (testERP5Web.TestERP5Web) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testExternalAccount (1 skips) testFormPrintoutAsODT (1 skips) test_09_FieldReplacementWithValidation (testFormPrintoutAsODT.TestFormPrintoutAsODT) ... skipped 'Disable validation because OOo does not produce compliant xml, and RelaxNG status is still draft' testFunctionalAnonymousSelection (36 skips) So this part is skipped --> So this part is skipped --> So this part is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> testFunctionalCore (8 skips) So this test is skipped --> So this test is skipped --> testFunctionalKM (3 skips) testI18NSearch (1 skips) testIngestion (4 skips) testIngestionWithFlare (4 skips) testInventory (2 skips) testInventoryAPI (2 skips) testInvoice (6 skips) testItem (13 skips) testKM (3 skips) testOpenOrder (3 skips) testOxatisSynchronization (1 skips) testPreferences (1 skips) testProductionOrder (8 skips) testProductionOrderApparel (6 skips) testProductionPackingList (1 skips) testProductionPackingListApparel (1 skips) testProxyField (1 skips) testResource (1 skips) testReturnedSalePackingList (3 skips) testSQLCachedWorklist (2 skips) test_02_related_key (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' test_04_dynamic_variables (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' testSelectionTool (7 skips) testCallSelectionFor (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testPage (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testCallSelectionFor (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testDeleteGlobalSelection (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'To be decided if implementation is required' testPage (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testTaskReportDivergence (1 skips) testTemplate (1 skips) testTradeModelLine (1 skips) testTradeModelLinePurchase (1 skips) testUbercartSynchronisation (1 skips) testVirtuemartSynchronization (1 skips) testWebDavSupport (1 skips) -------------- next part -------------- A non-text attachment was scrubbed... Name: summary.diff Type: text/x-diff Size: 1000 bytes Desc: not available URL: -------------- next part -------------- FAIL: testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test OfficeJS UI FAIL: testFunctionalTestRunner (testFunctionalCore.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test Transactions related to an account, with at date parameter FAIL: testFunctionalTestRunner (testFunctionalKM.TestZeleniumKM) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: testDefaultPadAnonymousMode From nobody at svn.erp5.org Tue Oct 6 13:43:01 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 11:43:01 +0000 Subject: [Erp5-report] =?utf-8?q?ERP5-MASTER_=3A_4977_Tests=2C_0_Errors=2C?= =?utf-8?q?_2_Failures=2C_203_Skips?= Message-ID: <20151006114301.80860BF0307@mail2.tiolive.com> Test Suite: ERP5-MASTER Revision: slapos=8364-706801f24182715993a7356444cdf5d29c512a7f,erp5=44898-9b470608054e1ca21c1b25907d6f30bf0a343a2d Result: FAIL All tests: 4977 Failures: 2 Errors: 0 Skips: 203 https://nexedi.erp5.net/test_result_module/20151006-D4B1DF5/view The following tests failed: erp5_officejs_ui_test:testOfficeJS (1 failures) testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) testERP5BankingUsualCashTransfer (1 failures) test_01_ERP5BankingUsualCashTransfer (testERP5BankingUsualCashTransfer.TestERP5BankingUsualCashTransfer) The following tests were at least partly skipped: erp5_configurator_maxma_demo:testMaxmaDemoConfigurationWorkflow (1 skips) erp5_hal_json_style:testHalJsonStyle (4 skips) test_getRequestBody_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestBody) ... skipped 'TODO' test_getRequestHeader_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestHeader) ... skipped 'TODO' test_getRequestUrl_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestUrl) ... skipped 'TODO' test_getHateoas_drop_restricted (erp5.component.test.erp5_version.testHalJsonStyle.TestERP5Document_getHateoas_general) ... skipped 'TODO' erp5_web_shacache:testShaCache (1 skips) erp5_web_shadir:testShaDir (1 skips) networkcache_erp5:testShaCacheExternal (1 skips) testAccountingRulesSimulationLegacy (22 skips) testAdvancedInvoicing (1 skips) testBPMCore (1 skips) test_payBeforeDelivery (testBPMCore.TestBPMImplementation) ... skipped 'TODO ERP5' testBase (3 skips) check if a document is not indexed where we set isIndexable=0 in the same transaction of newContent(). ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we call edit() and set isIndexable=0 after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we set isIndexable=0 and call edit() after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' testBusinessTemplate (6 skips) test_BusinessTemplateUpgradeDocumentFromFilesystemToZodb (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocument (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentMigrated (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentNonExistingBefore (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' testCRM (1 skips) testCalendar (5 skips) test_2OverlappedLeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingBeforeGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsRepeatedGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' testConstraint (1 skips) testDeliveryBuilderToSupportMultipleLines (2 skips) testDms (1 skips) testDmsWithFlare (1 skips) testDmsWithPreConversion (1 skips) testERP5Base (1 skips) testERP5Catalog (4 skips) Tests that buildSQLQuery works with another query_table than 'catalog' ... skipped 'TODO ERP5' test_49_IndexInOrderedSearchFolder (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' test_SubDocumentsWithAcquireLocalRoleSecurityIndexing (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' testERP5Commerce (1 skips) test_22_createShoppingCartWithAnonymousAndLogin (testERP5Commerce.TestCommerce) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testERP5DocumentSyncML (4 skips) testERP5Interfaces (7 skips) testERP5SyncML (2 skips) testERP5Type (1 skips) testERP5TypeInterfaces (1 skips) testERP5Web (3 skips) test_03_CreateWebSiteUser (testERP5Web.TestERP5Web) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testExternalAccount (1 skips) testFormPrintoutAsODT (1 skips) test_09_FieldReplacementWithValidation (testFormPrintoutAsODT.TestFormPrintoutAsODT) ... skipped 'Disable validation because OOo does not produce compliant xml, and RelaxNG status is still draft' testFunctionalAnonymousSelection (36 skips) So this part is skipped --> So this part is skipped --> So this part is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> testFunctionalCore (8 skips) So this test is skipped --> So this test is skipped --> testFunctionalKM (3 skips) testI18NSearch (1 skips) testIngestion (4 skips) testIngestionWithFlare (4 skips) testInventory (2 skips) testInventoryAPI (2 skips) testInvoice (6 skips) testItem (13 skips) testKM (3 skips) testOpenOrder (3 skips) testOxatisSynchronization (1 skips) testPreferences (1 skips) testProductionOrder (8 skips) testProductionOrderApparel (6 skips) testProductionPackingList (1 skips) testProductionPackingListApparel (1 skips) testProxyField (1 skips) testResource (1 skips) testReturnedSalePackingList (3 skips) testSQLCachedWorklist (2 skips) test_02_related_key (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' test_04_dynamic_variables (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' testSelectionTool (7 skips) testCallSelectionFor (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testPage (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testCallSelectionFor (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testDeleteGlobalSelection (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'To be decided if implementation is required' testPage (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testTaskReportDivergence (1 skips) testTemplate (1 skips) testTradeModelLine (1 skips) testTradeModelLinePurchase (1 skips) testUbercartSynchronisation (1 skips) testVirtuemartSynchronization (1 skips) testWebDavSupport (1 skips) -------------- next part -------------- A non-text attachment was scrubbed... Name: summary.diff Type: text/x-diff Size: 1248 bytes Desc: not available URL: -------------- next part -------------- FAIL: testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test OfficeJS UI FAIL: test_01_ERP5BankingUsualCashTransfer (testERP5BankingUsualCashTransfer.TestERP5BankingUsualCashTransfer) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Banking/tests/testERP5BankingUsualCashTransfer.py", line 514, in test_01_ERP5BankingUsualCashTransfer sequence_list.play(self) File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/Sequence.py", line 206, in play sequence.play(context, sequence_number=i, quiet=quiet) File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/Sequence.py", line 127, in play .play(context, sequence=self, quiet=quiet) Current Sequence: Tic CheckObjects Tic CheckInitialInventory CheckSource CheckDestination CreateUsualCashTransfer CreateValidLine1 CheckSubTotal CreateValidLine2 CheckTotal CheckSource CheckDestination CreateInvalidLine TryConfirmUsualCashTransferWithBadInventory DelInvalidLine Tic CheckTotal ConfirmUsualCashTransfer > CheckSourceDebitPlanned CheckDestinationCreditPlanned CheckSourceDebitPlanned CheckDestinationCreditPlanned ResetSourceInventory Tic DeliverUsualCashTransferFails Tic DeleteResetInventory Tic DeliverUsualCashTransfer CheckSourceDebit CheckDestinationCredit File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/Sequence.py", line 91, in play method(sequence=sequence) File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Banking/tests/testERP5BankingUsualCashTransfer.py", line 404, in stepCheckSourceDebitPlanned self.assertEqual(self.simulation_tool.getFutureInventory(node=self.usual_cash.getRelativeUrl(), resource = self.billet_10000.getRelativeUrl()), 0.0) AssertionError: 5.0 != 0.0 From nobody at svn.erp5.org Tue Oct 6 14:13:02 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 12:13:02 -0000 Subject: [Erp5-report] r46052 jm - in /erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequ... Message-ID: <20151006121302.D7477BF0307@mail2.tiolive.com> Author: jm Date: Tue Oct 6 14:13:01 2015 New Revision: 46052 URL: http://svn.erp5.org?rev=46052&view=rev Log: LongRequestLogger: add support for multiple zthreads and log mysql queries Signed-off-by: Leonardo Rochael Almeida Signed-off-by: J?rome Perrin Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py?rev=46052&r1=46051&r2=46052&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] Tue Oct 6 14:13:01 2015 @@ -15,6 +15,7 @@ import os import os.path import time import traceback +import sys try: from signal import SIGUSR2 @@ -24,10 +25,11 @@ except ImportError: SIGUSR2 = 12 try: - from sys import _current_frames -except ImportError: + sys._current_frames +except AttributeError: # Python 2.4 and older - from threadframe import dict as _current_frames + import threadframe + sys._current_frames = threadframe.dict class NullHandler(logging.Handler): @@ -152,9 +154,6 @@ class Dumper(object): request = self.extract_request(frame) return self.format_request(request) - def get_top_thread_frame(self): - return _current_frames()[self.thread_id] - def get_thread_info(self, frame): request_info = self.extract_request_info(frame) now = time.time() @@ -166,12 +165,22 @@ class Dumper(object): return info def format_thread(self): - frame = self.get_top_thread_frame() + frame = sys._current_frames()[self.thread_id] output = StringIO() thread_info = self.get_thread_info(frame) print >> output, thread_info print >> output, "Traceback:" traceback.print_stack(frame, file=output) + try: + from Products.ZMySQLDA.db import DB + while frame is not None: + code = frame.f_code + if code is DB._query.func_code: + print >> output, "SQL Query:" + print >> output, frame.f_locals['query'] + frame = frame.f_back + except ImportError: + pass del frame return output.getvalue() Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py?rev=46052&r1=46051&r2=46052&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py [utf8] Tue Oct 6 14:13:01 2015 @@ -4,53 +4,56 @@ # ############################################################################## -import fcntl, os +import os from select import select from threading import Thread -from Products.LongRequestLogger import dumper +from Products.LongRequestLogger.dumper import Dumper class Monitor(Thread): """Logs the stack-trace of a thread until it's stopped - m = Monitor() - m.start(thread.get_ident(), timeout=5, interval=2) + m = Monitor(dumper) - Wait 5 seconds before dumping the stack-trace of the identified thread - every 2 seconds. + Wait dumper.timeout seconds before calling dumper() every + dumper.interval seconds. m.stop() Stop the monitoring, whether timed-out or not - - XXX: signal.pthread_kill should be better than a pipe, - but it's new to Python 3.3 """ - def __init__(self): + dumper = None + + def __init__(self, dumper=None): Thread.__init__(self) - self._event_pipe = os.pipe() - r = self._event_pipe[0] - f = fcntl.fcntl(r, fcntl.F_GETFL, 0) - fcntl.fcntl(r, fcntl.F_SETFL, f | os.O_NONBLOCK) - - def start(self, thread_id=None, timeout=None, interval=None): - self.dumper = dumper.Dumper(thread_id=thread_id) - self.timeout = timeout or self.dumper.timeout - self.interval = interval or self.dumper.interval - if self.dumper.is_enabled(): - Thread.start(self) + if dumper is None: + dumper = Dumper() + if dumper.is_enabled(): + self._event_pipe = os.pipe() + self.dumper = dumper + self.start() + + def waiting(self, timeout): + r, _ = self._event_pipe + read_ready_list, _, _ = select([r], [], [], timeout) + if read_ready_list: + os.read(r, 1) + # stop() called by monitored thread. + # Stop waiting: + return False + # Still waiting for the other thread to finish + return True def stop(self): """Stop monitoring the other thread""" - if self.is_alive(): - os.write(self._event_pipe[1], '\0') + if self.dumper is not None: + r, w = self._event_pipe + os.write(w, '\0') self.join() - Thread.__init__(self) + map(os.close, self._event_pipe) def run(self): - r = self._event_pipe[0] - timeout = self.timeout - while not select([r], [], [], timeout)[0]: + timeout = self.dumper.timeout + while self.waiting(timeout): self.dumper() - timeout = self.interval - os.read(r, 1) + timeout = self.dumper.interval Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py?rev=46052&r1=46051&r2=46052&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py [utf8] Tue Oct 6 14:13:01 2015 @@ -10,11 +10,11 @@ from Products.LongRequestLogger.monitor log = getLogger(__name__) -monitor = Monitor() def wrapper(*args, **kw): - monitor.start() + monitor = Monitor() try: - return wrapper.original(*args, **kw) + result = wrapper.original(*args, **kw) + return result finally: monitor.stop() Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py?rev=46052&r1=46051&r2=46052&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] Tue Oct 6 14:13:01 2015 @@ -4,6 +4,7 @@ # ############################################################################## +import sys import unittest from cStringIO import StringIO from doctest import OutputChecker @@ -36,8 +37,6 @@ Traceback: ... File ".../LongRequestLogger/dumper.py", line ..., in format_thread traceback.print_stack(frame, file=output) - File ".../LongRequestLogger/dumper.py", line ..., in get_top_thread_frame - return _current_frames()[self.thread_id] ''') check_log = SimpleOutputChecker(''' @@ -49,8 +48,6 @@ Traceback: self.log.warning(self.format_thread()) File ".../LongRequestLogger/dumper.py", line ..., in format_thread traceback.print_stack(frame, file=output) - File ".../LongRequestLogger/dumper.py", line ..., in get_top_thread_frame - return _current_frames()[self.thread_id] ''') check_monitor_log = SimpleOutputChecker(''' @@ -259,7 +256,8 @@ class TestLongRequestLogger(unittest.Tes from Products.LongRequestLogger.dumper import Dumper def callable(): dumper = Dumper() - return dumper.extract_request(dumper.get_top_thread_frame()) + frame = sys._current_frames()[dumper.thread_id] + return dumper.extract_request(frame) request = self.makeRequest('/foo') retrieved_request = call_object(callable, (), request) @@ -285,9 +283,7 @@ class TestLongRequestLogger(unittest.Tes s = Sleeper(0.01) s.sleep() self.assertTrue(m.isAlive()) - self.assertTrue(m.running) m.stop() - self.assertFalse(m.running) self.assertFalse(m.isAlive()) # unless this test is so slow that there were 2 seconds interval # between starting the monitor and stopping it, there should be no @@ -297,7 +293,7 @@ class TestLongRequestLogger(unittest.Tes def testMonitorStopAfterTimeout(self): from Products.LongRequestLogger.monitor import Monitor m = Monitor() - s = Sleeper(m.timeout + 0.5) + s = Sleeper(m.dumper.timeout + 0.5) # sleep a little more than the timeout to be on the safe side s.sleep() m.stop() @@ -306,7 +302,7 @@ class TestLongRequestLogger(unittest.Tes def testMonitorStopAfterTimeoutAndTwoIntervals(self): from Products.LongRequestLogger.monitor import Monitor m = Monitor() - s = Sleeper(m.timeout + 2 * m.interval + 0.5) + s = Sleeper(m.dumper.timeout + 2 * m.dumper.interval + 0.5) # sleep a little more than timeout + intervals to be on the safe # side s.sleep() @@ -315,27 +311,27 @@ class TestLongRequestLogger(unittest.Tes def testMonitorConfigurationDisabled(self): from Products.LongRequestLogger.monitor import Monitor + from Products.LongRequestLogger.dumper import DEFAULT_TIMEOUT + from Products.LongRequestLogger.dumper import DEFAULT_INTERVAL os.environ['longrequestlogger_file'] = '' m = Monitor() - s = Sleeper(m.timeout + 2 * m.interval + 0.5) + s = Sleeper(DEFAULT_TIMEOUT + 2 * DEFAULT_INTERVAL + 0.5) # sleep a little more than timeout + intervals s.sleep() # the thread shouldn't run disabled self.assertFalse(m.isAlive()) - self.assertFalse(m.running) # stopping shouldn't break nonetheless m.stop() - self.assertFalse(m.running) self.assertFalse(m.isAlive()) # and there should be no records self.assertFalse(self.loghandler.records) - def testMonitorWithEnvorinmentConfiguration(self): + def testMonitorWithEnvironmentConfiguration(self): from Products.LongRequestLogger.monitor import Monitor os.environ['longrequestlogger_timeout'] = '3.5' os.environ['longrequestlogger_interval'] = '2' m = Monitor() - s = Sleeper(m.timeout + m.interval + 0.5) + s = Sleeper(m.dumper.timeout + m.dumper.interval + 0.5) # sleep a little more than the timeout to be on the safe side s.sleep() m.stop() Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt?rev=46052&r1=46051&r2=46052&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt [utf8] Tue Oct 6 14:13:01 2015 @@ -1 +1 @@ -1.0 \ No newline at end of file +1.1dev From nobody at svn.erp5.org Tue Oct 6 14:13:05 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 12:13:05 -0000 Subject: [Erp5-report] r46053 jm - in /erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequ... Message-ID: <20151006121306.14D4CBF031D@mail2.tiolive.com> Author: jm Date: Tue Oct 6 14:13:05 2015 New Revision: 46053 URL: http://svn.erp5.org?rev=46053&view=rev Log: LongRequestLogger: improve support for multiple zthreads - stop instanciating a thread and a logger for each request - drop compatibility with Python < 2.6 - longrequestlogger_file=null has no special meaning anymore and would create a 'null' file - the only way to stop logging is to unpatch Removed: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/__init__.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/__init__.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/__init__.py?rev=46053&r1=46052&r2=46053&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/__init__.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/__init__.py [utf8] Tue Oct 6 14:13:05 2015 @@ -6,10 +6,24 @@ def initialize(context): - from Products.LongRequestLogger.dumper import do_enable - from Products.LongRequestLogger.patch import do_patch - if do_enable(): - # if not enabled on startup, it won't be enabled, period. - # it can be disabled at runtime afterwards, but will not be unpatched. - do_patch() + from . import dumper, monitor + log = dumper.getLogger() + if log: + do_patch(monitor.Monitor(log, **dumper.get_configuration())) +def do_patch(monitor): + from ZPublisher import Publish + import logging + def publish_module_standard(*args, **kw): + with monitor: + return publish_module_standard.original(*args, **kw) + publish_module_standard.original = Publish.publish_module_standard + logging.getLogger(__name__).info('patching %s.%s', + Publish.__name__, + publish_module_standard.__name__) + Publish.publish_module_standard = publish_module_standard + +def do_unpatch(): + from ZPublisher import Publish + publish_module_standard = Publish.publish_module_standard + Publish.publish_module_standard = publish_module_standard.original Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py?rev=46053&r1=46052&r2=46053&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] Tue Oct 6 14:13:05 2015 @@ -12,7 +12,6 @@ import ZConfig.components.logger.loghand import ZServer.BaseLogger import logging import os -import os.path import time import traceback import sys @@ -24,56 +23,19 @@ except ImportError: # numbers are) SIGUSR2 = 12 -try: - sys._current_frames -except AttributeError: - # Python 2.4 and older - import threadframe - sys._current_frames = threadframe.dict - - -class NullHandler(logging.Handler): - def __init__(self): - logging.Handler.__init__(self) - # for comparison purposes below - self.baseFilename = 'null' - - def emit(self, *args, **kw): - pass - - -# we might want to change this name later to something more specific -logger_name = __name__ -log = logging.getLogger(logger_name) -log.propagate = False -handler = NullHandler() -log.addHandler(handler) - formatter = logging.Formatter("%(asctime)s - %(message)s") DEFAULT_TIMEOUT = 2 DEFAULT_INTERVAL = 1 -def do_enable(): - global handler - # this function is not exactly thread-safe, but it shouldn't matter. - # The worse that can happen is that a change in longrequestlogger_file - # will stop or change the logging destination of an already running request +def getLogger(name='LongRequestLogger'): logfile = os.environ.get('longrequestlogger_file') - if not logfile: - return None # so that Dumpers know they are disabled - - if logfile != 'null': + if logfile: + log = logging.getLogger(name) + log.propagate = False # to imitate FileHandler logfile = os.path.abspath(logfile) - - rotate = None - if handler.baseFilename != logfile: - log.removeHandler(handler) - handler.close() - if logfile == 'null': - handler = NullHandler() - elif os.name == 'nt': + if os.name == 'nt': rotate = Signals.Signals.LogfileRotateHandler handler = ZConfig.components.logger.loghandler.Win32FileHandler( logfile) @@ -82,13 +44,12 @@ def do_enable(): handler = ZConfig.components.logger.loghandler.FileHandler( logfile) handler.formatter = formatter + # Register with Zope 2 signal handlers to support log rotation + if Signals.Signals.SignalHandler: + Signals.Signals.SignalHandler.registerHandler( + SIGUSR2, rotate([handler])) log.addHandler(handler) - - # Register with Zope 2 signal handlers to support log rotation - if rotate and Signals.Signals.SignalHandler: - Signals.Signals.SignalHandler.registerHandler( - SIGUSR2, rotate([handler])) - return log # which is also True as boolean + return log def get_configuration(): return dict( @@ -115,14 +76,6 @@ class Dumper(object): thread_id = get_ident() self.thread_id = thread_id self.start = time.time() - # capture it here in case it gets disabled in the future - self.log = do_enable() - conf = get_configuration() - self.timeout = conf['timeout'] - self.interval = conf['interval'] - - def is_enabled(self): - return bool(self.log) def format_request(self, request): if request is None: @@ -183,6 +136,3 @@ class Dumper(object): pass del frame return output.getvalue() - - def __call__(self): - self.log.warning(self.format_thread()) Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py?rev=46053&r1=46052&r2=46053&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py [utf8] Tue Oct 6 14:13:05 2015 @@ -4,56 +4,85 @@ # ############################################################################## -import os +import os, sys, threading, time +from collections import deque from select import select -from threading import Thread -from Products.LongRequestLogger.dumper import Dumper +from thread import get_ident +from .dumper import Dumper -class Monitor(Thread): - """Logs the stack-trace of a thread until it's stopped - - m = Monitor(dumper) - - Wait dumper.timeout seconds before calling dumper() every - dumper.interval seconds. - m.stop() - - Stop the monitoring, whether timed-out or not +class Monitor(threading.Thread): + """Logs the stack-trace of a thread until it's stopped """ - dumper = None - - def __init__(self, dumper=None): - Thread.__init__(self) - if dumper is None: - dumper = Dumper() - if dumper.is_enabled(): - self._event_pipe = os.pipe() - self.dumper = dumper - self.start() - - def waiting(self, timeout): - r, _ = self._event_pipe - read_ready_list, _, _ = select([r], [], [], timeout) - if read_ready_list: - os.read(r, 1) - # stop() called by monitored thread. - # Stop waiting: - return False - # Still waiting for the other thread to finish - return True + def __init__(self, log, timeout, interval): + assert interval > 0, interval + threading.Thread.__init__(self) + self.log = log + self.timeout = timeout + self.interval = interval + self.lock = threading.Lock() + self.dumpers = deque() + self.event_pipe = os.pipe() + self.daemon = True + self.start() def stop(self): - """Stop monitoring the other thread""" - if self.dumper is not None: - r, w = self._event_pipe - os.write(w, '\0') - self.join() - map(os.close, self._event_pipe) + with self.lock: + if not self.event_pipe: + return + os.close(self.event_pipe[1]) + self.event_pipe = None + self.join() def run(self): - timeout = self.dumper.timeout - while self.waiting(timeout): - self.dumper() - timeout = self.dumper.interval + r = self.event_pipe[0] + try: + l = self.lock + dumpers = self.dumpers + t = 0 + while 1: + t = select([r], (), (), t)[0] and (os.read(r, 8) or sys.exit()) + with l: + if dumpers: + while 1: + t = dumpers[0].next_dump - time.time() + if t > 0: + break + dumper = dumpers.popleft() + self.log.warning(dumper.format_thread()) + dumper.next_dump += self.interval + self.push(dumper) + else: + t = None + finally: + os.close(r) + + def push(self, dumper): + dumpers = self.dumpers + i = len(dumpers) + while i and dumper.next_dump < dumpers[-1].next_dump: + dumpers.rotate() + i -= 1 + i -= len(dumpers) + dumpers.append(dumper) + dumpers.rotate(i) + + def __enter__(self): + with self.lock: + if not self.dumpers and self.event_pipe: + os.write(self.event_pipe[1], '\0') + dumper = Dumper() + dumper.next_dump = dumper.start + self.timeout + self.push(dumper) + + def __exit__(self, t, v, tb): + dumpers = self.dumpers + with self.lock: + thread_id = get_ident() + for i, dumper in enumerate(self.dumpers): + if dumper.thread_id == thread_id: + del self.dumpers[i] + if not i and self.event_pipe: + os.write(self.event_pipe[1], '\0') + break Removed: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py?rev=46052&view=auto ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/patch.py (removed) @@ -1,33 +0,0 @@ -############################################################################## -# -# Copyright (c) 2010 Zope Foundation and Contributors. -# -############################################################################## - -import sys -from logging import getLogger -from Products.LongRequestLogger.monitor import Monitor - -log = getLogger(__name__) - -def wrapper(*args, **kw): - monitor = Monitor() - try: - result = wrapper.original(*args, **kw) - return result - finally: - monitor.stop() - -def do_patch(): - from ZPublisher.Publish import publish_module_standard as original - wrapper.original = original - log.info('patching %s.%s' % (wrapper.original.__module__, - wrapper.original.__name__)) - setattr(sys.modules[wrapper.original.__module__], - wrapper.original.__name__, - wrapper) - -def do_unpatch(): - setattr(sys.modules[wrapper.original.__module__], - wrapper.original.__name__, - wrapper.original) Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py?rev=46053&r1=46052&r2=46053&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] Tue Oct 6 14:13:05 2015 @@ -9,8 +9,6 @@ import unittest from cStringIO import StringIO from doctest import OutputChecker from doctest import REPORT_UDIFF, NORMALIZE_WHITESPACE, ELLIPSIS - -from Products.LongRequestLogger.tests.common import Sleeper import os class SimpleOutputChecker(OutputChecker): @@ -39,69 +37,13 @@ Traceback: traceback.print_stack(frame, file=output) ''') -check_log = SimpleOutputChecker(''' -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 0.0 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/dumper.py", line ..., in __call__ - self.log.warning(self.format_thread()) - File ".../LongRequestLogger/dumper.py", line ..., in format_thread - traceback.print_stack(frame, file=output) -''') - -check_monitor_log = SimpleOutputChecker(''' -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 2.0 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) -''') - -check_monitor_2_intervals_log = SimpleOutputChecker(''' -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 2.0 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 3.0 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 4.0 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) -''') - check_publishing_1_interval_log = SimpleOutputChecker(''' -Products.LongRequestLogger.dumper WARNING +LongRequestLogger WARNING Thread ...: Started on ...; Running for 2.0 secs; request: GET http://localhost retry count: 0 form: {} other: {'ACTUAL_URL': 'http://localhost', + 'AcceptLanguage': {}, 'PARENTS': [], 'PUBLISHED': , 'RESPONSE': HTTPResponse(''), @@ -112,8 +54,8 @@ other: {'ACTUAL_URL': 'http://localhost' 'method': 'GET'} Traceback: ... - File ".../LongRequestLogger/patch.py", line ..., in wrapper - result = wrapper.original(*args, **kw) + File ".../LongRequestLogger/__init__.py", line ..., in publish_module_standard + return publish_module_standard.original(*args, **kw) File ".../ZPublisher/Publish.py", line ..., in publish_module_standard response = publish(request, module_name, after_list, debug=debug) ... @@ -125,11 +67,12 @@ Traceback: self._sleep2() File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 time.sleep(self.interval) -Products.LongRequestLogger.dumper WARNING +LongRequestLogger WARNING Thread ...: Started on ...; Running for 3.0 secs; request: GET http://localhost retry count: 0 form: {} other: {'ACTUAL_URL': 'http://localhost', + 'AcceptLanguage': {}, 'PARENTS': [], 'PUBLISHED': , 'RESPONSE': HTTPResponse(''), @@ -140,8 +83,8 @@ other: {'ACTUAL_URL': 'http://localhost' 'method': 'GET'} Traceback: ... - File ".../LongRequestLogger/patch.py", line ..., in wrapper - result = wrapper.original(*args, **kw) + File ".../LongRequestLogger/__init__.py", line ..., in publish_module_standard + return publish_module_standard.original(*args, **kw) File ".../ZPublisher/Publish.py", line ..., in publish_module_standard response = publish(request, module_name, after_list, debug=debug) ... @@ -165,32 +108,9 @@ other: {'RESPONSE': HTTPResponse(''), 'method': 'GET'} ''') -check_monitor_environment_log = SimpleOutputChecker(''' -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 3.5 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) -Products.LongRequestLogger.dumper WARNING - Thread ...: Started on ...; Running for 5.5 secs; [No request] -Traceback: -... - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) -''') - config_env_variables = dict( - longrequestlogger_file='null', + longrequestlogger_file=os.devnull, longrequestlogger_timeout=None, longrequestlogger_interval=None, ) @@ -198,17 +118,19 @@ config_env_variables = dict( class TestLongRequestLogger(unittest.TestCase): def setUp(self): - from Products.LongRequestLogger.patch import do_patch - from Products.LongRequestLogger.dumper import logger_name + from Products.LongRequestLogger import do_patch, monitor, dumper from zope.testing.loggingsupport import InstalledHandler self.setTestEnvironment() - do_patch() - self.loghandler = InstalledHandler(logger_name) + log = dumper.getLogger() + self.monitor = monitor.Monitor(log, **dumper.get_configuration()) + do_patch(self.monitor) + self.loghandler = InstalledHandler(log.name) self.requests = [] def tearDown(self): - from Products.LongRequestLogger.patch import do_unpatch + from Products.LongRequestLogger import do_unpatch do_unpatch() + self.monitor.stop() self.restoreTestEnvironment() self.loghandler.uninstall() for request in self.requests: @@ -269,82 +191,6 @@ class TestLongRequestLogger(unittest.Tes request = self.makeRequest('/foo/bar') check_request_formating(dumper.format_request(request)) - def testDumperLog(self): - from Products.LongRequestLogger.dumper import Dumper - dumper = Dumper() - # check the dumper will log what we expect when called - dumper() - check_log(str(self.loghandler)) - - def testMonitorStopBeforeTimeout(self): - from Products.LongRequestLogger.monitor import Monitor - m = Monitor() - # sleep just a little to let the other thread start - s = Sleeper(0.01) - s.sleep() - self.assertTrue(m.isAlive()) - m.stop() - self.assertFalse(m.isAlive()) - # unless this test is so slow that there were 2 seconds interval - # between starting the monitor and stopping it, there should be no - # logged messages - self.assertFalse(self.loghandler.records) - - def testMonitorStopAfterTimeout(self): - from Products.LongRequestLogger.monitor import Monitor - m = Monitor() - s = Sleeper(m.dumper.timeout + 0.5) - # sleep a little more than the timeout to be on the safe side - s.sleep() - m.stop() - check_monitor_log(str(self.loghandler)) - - def testMonitorStopAfterTimeoutAndTwoIntervals(self): - from Products.LongRequestLogger.monitor import Monitor - m = Monitor() - s = Sleeper(m.dumper.timeout + 2 * m.dumper.interval + 0.5) - # sleep a little more than timeout + intervals to be on the safe - # side - s.sleep() - m.stop() - check_monitor_2_intervals_log(str(self.loghandler)) - - def testMonitorConfigurationDisabled(self): - from Products.LongRequestLogger.monitor import Monitor - from Products.LongRequestLogger.dumper import DEFAULT_TIMEOUT - from Products.LongRequestLogger.dumper import DEFAULT_INTERVAL - os.environ['longrequestlogger_file'] = '' - m = Monitor() - s = Sleeper(DEFAULT_TIMEOUT + 2 * DEFAULT_INTERVAL + 0.5) - # sleep a little more than timeout + intervals - s.sleep() - # the thread shouldn't run disabled - self.assertFalse(m.isAlive()) - # stopping shouldn't break nonetheless - m.stop() - self.assertFalse(m.isAlive()) - # and there should be no records - self.assertFalse(self.loghandler.records) - - def testMonitorWithEnvironmentConfiguration(self): - from Products.LongRequestLogger.monitor import Monitor - os.environ['longrequestlogger_timeout'] = '3.5' - os.environ['longrequestlogger_interval'] = '2' - m = Monitor() - s = Sleeper(m.dumper.timeout + m.dumper.interval + 0.5) - # sleep a little more than the timeout to be on the safe side - s.sleep() - m.stop() - check_monitor_environment_log(str(self.loghandler)) - - def testIsPatched(self): - import ZPublisher.Publish - import Products.LongRequestLogger - self.assertEquals( - ZPublisher.Publish.publish_module_standard, - Products.LongRequestLogger.patch.wrapper - ) - def testPublish(self): from ZPublisher.Publish import publish_module_standard # Before publishing, there should be no slow query records. From nobody at svn.erp5.org Tue Oct 6 14:14:35 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 12:14:35 -0000 Subject: [Erp5-report] r46054 jm - /erp5/trunk/utils/git-helpers/git-new-workdir Message-ID: <20151006121435.388E0BF0307@mail2.tiolive.com> Author: jm Date: Tue Oct 6 14:14:34 2015 New Revision: 46054 URL: http://svn.erp5.org?rev=46054&view=rev Log: git-helpers: fix new-workdir for bare repositories Modified: erp5/trunk/utils/git-helpers/git-new-workdir Modified: erp5/trunk/utils/git-helpers/git-new-workdir URL: http://svn.erp5.org/erp5/trunk/utils/git-helpers/git-new-workdir?rev=46054&r1=46053&r2=46054&view=diff ============================================================================== --- erp5/trunk/utils/git-helpers/git-new-workdir [utf8] (original) +++ erp5/trunk/utils/git-helpers/git-new-workdir [utf8] Tue Oct 6 14:14:34 2015 @@ -58,6 +58,7 @@ fi mkdir -p "$new_workdir/.git" || die "unable to create \"$new_workdir\"!" cd "$git_dir" +mkdir -vp logs/refs # required for bare repositories git_dir=$(pwd) # make sure the links use full paths orig_list=$(echo * info/*) cd - >/dev/null From nobody at svn.erp5.org Tue Oct 6 14:22:58 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 12:22:58 -0000 Subject: [Erp5-report] r46055 jm - in /erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequ... Message-ID: <20151006122259.13D3BBF0324@mail2.tiolive.com> Author: jm Date: Tue Oct 6 14:22:58 2015 New Revision: 46055 URL: http://svn.erp5.org?rev=46055&view=rev Log: LongRequestLogger: output only 1 line to log if the rest does not change This prevents a stuck thread from flooding logs by repeating the same traceback forever. Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py?rev=46055&r1=46054&r2=46055&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] Tue Oct 6 14:22:58 2015 @@ -59,16 +59,18 @@ def get_configuration(): DEFAULT_INTERVAL)), ) -THREAD_FORMAT = "Thread %s: Started on %.1f; Running for %.1f secs; %s" -REQUEST_FORMAT = """ +SUBJECT_FORMAT = "Thread %s: Started on %.1f; Running for %.1f secs; " +REQUEST_FORMAT = """\ request: %(method)s %(url)s retry count: %(retries)s form: %(form)s other: %(other)s -""".strip() +""" class Dumper(object): + _last = None + def __init__(self, thread_id=None): if thread_id is None: # assume we're being called by the thread that wants to be @@ -79,15 +81,15 @@ class Dumper(object): def format_request(self, request): if request is None: - return "[No request]" - url = request.getURL() - if request.get('QUERY_STRING'): - url += '?' + request['QUERY_STRING'] - retries = request.retry_count - method = request['REQUEST_METHOD'] - form = pformat(request.form) - other = pformat(request.other) - return REQUEST_FORMAT % locals() + return "[No request]\n" + query = request.get("QUERY_STRING") + return REQUEST_FORMAT % { + "method": request["REQUEST_METHOD"], + "url": request.getURL() + ("?" + query if query else ""), + "retries": request.retry_count, + "form": pformat(request.form), + "other": pformat(request.other), + } def extract_request(self, frame): # We try to fetch the request from the 'call_object' function because @@ -97,42 +99,36 @@ class Dumper(object): from ZPublisher.Publish import call_object func_code = call_object.func_code #@UndefinedVariable while frame is not None: - code = frame.f_code - if (code is func_code): - request = frame.f_locals.get('request') - return request + if frame.f_code is func_code: + return frame.f_locals.get('request') frame = frame.f_back - def extract_request_info(self, frame): - request = self.extract_request(frame) - return self.format_request(request) - - def get_thread_info(self, frame): - request_info = self.extract_request_info(frame) - now = time.time() - runtime = now - self.start - info = THREAD_FORMAT % (self.thread_id, - self.start, - runtime, - request_info) - return info + def extract_query(self, frame): + try: + from Products.ZMySQLDA.db import DB + except ImportError: + return + while frame is not None: + if frame.f_code is DB._query.func_code: + return frame.f_locals['query'] + frame = frame.f_back def format_thread(self): + subject = SUBJECT_FORMAT % (self.thread_id, self.start, + time.time() - self.start) + body = StringIO() frame = sys._current_frames()[self.thread_id] - output = StringIO() - thread_info = self.get_thread_info(frame) - print >> output, thread_info - print >> output, "Traceback:" - traceback.print_stack(frame, file=output) try: - from Products.ZMySQLDA.db import DB - while frame is not None: - code = frame.f_code - if code is DB._query.func_code: - print >> output, "SQL Query:" - print >> output, frame.f_locals['query'] - frame = frame.f_back - except ImportError: - pass - del frame - return output.getvalue() + body.write(self.format_request(self.extract_request(frame))) + body.write("Traceback:\n") + traceback.print_stack(frame, file=body) + query = self.extract_query(frame) + if query: + body.write("SQL Query:\n%s\n" % query) + finally: + del frame + body = body.getvalue() + if self._last == body: + return subject + "Same.\n" + self._last = body + return subject + body Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py?rev=46055&r1=46054&r2=46055&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/monitor.py [utf8] Tue Oct 6 14:22:58 2015 @@ -77,7 +77,6 @@ class Monitor(threading.Thread): self.push(dumper) def __exit__(self, t, v, tb): - dumpers = self.dumpers with self.lock: thread_id = get_ident() for i, dumper in enumerate(self.dumpers): Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py?rev=46055&r1=46054&r2=46055&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] Tue Oct 6 14:22:58 2015 @@ -30,11 +30,10 @@ class SimpleOutputChecker(OutputChecker) check_dump = SimpleOutputChecker(''' Thread ...: Started on ...; Running for 0.0 secs; [No request] - Traceback: ... File ".../LongRequestLogger/dumper.py", line ..., in format_thread - traceback.print_stack(frame, file=output) + traceback.print_stack(frame, file=body) ''') check_publishing_1_interval_log = SimpleOutputChecker(''' @@ -68,34 +67,7 @@ Traceback: File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 time.sleep(self.interval) LongRequestLogger WARNING - Thread ...: Started on ...; Running for 3.0 secs; request: GET http://localhost -retry count: 0 -form: {} -other: {'ACTUAL_URL': 'http://localhost', - 'AcceptLanguage': {}, - 'PARENTS': [], - 'PUBLISHED': , - 'RESPONSE': HTTPResponse(''), - 'SERVER_URL': 'http://localhost', - 'TraversalRequestNameStack': [], - 'URL': 'http://localhost', - 'interval': 3.5, - 'method': 'GET'} -Traceback: -... - File ".../LongRequestLogger/__init__.py", line ..., in publish_module_standard - return publish_module_standard.original(*args, **kw) - File ".../ZPublisher/Publish.py", line ..., in publish_module_standard - response = publish(request, module_name, after_list, debug=debug) -... - File ".../LongRequestLogger/tests/common.py", line ..., in __call__ - Sleeper(interval).sleep() - File ".../LongRequestLogger/tests/common.py", line ..., in sleep - self._sleep1() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep1 - self._sleep2() - File ".../LongRequestLogger/tests/common.py", line ..., in _sleep2 - time.sleep(self.interval) + Thread ...: Started on ...; Running for 3.0 secs; Same. ''') check_request_formating = SimpleOutputChecker(''' From nobody at svn.erp5.org Tue Oct 6 14:35:03 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 12:35:03 -0000 Subject: [Erp5-report] r46056 jm - in /erp5/trunk/utils/Products.LongRequestLogger: ./ Products/Long... Message-ID: <20151006123503.45439BF032A@mail2.tiolive.com> Author: jm Date: Tue Oct 6 14:35:02 2015 New Revision: 46056 URL: http://svn.erp5.org?rev=46056&view=rev Log: LongRequestLogger: release version 1.2 Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/docs/HISTORY.txt erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt erp5/trunk/utils/Products.LongRequestLogger/README.txt erp5/trunk/utils/Products.LongRequestLogger/setup.py Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/docs/HISTORY.txt URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/docs/HISTORY.txt?rev=46056&r1=46055&r2=46056&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/docs/HISTORY.txt [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/docs/HISTORY.txt [utf8] Tue Oct 6 14:35:02 2015 @@ -1,14 +1,24 @@ Changelog ========= -1.1dev (unreleased) -------------------- +1.2 (2015-10-06) +---------------- + +- Add support for multiple zthreads and log mysql queries. +- Output only 1 line to log if the rest does not change. This prevents a + stuck thread from flooding logs by repeating the same traceback forever. +- longrequestlogger_file=null has no special meaning anymore + and would create a 'null' file. +- Drop compatibility with Python < 2.6 + +1.1 (2012-09-10) +---------------- - Integrate the logging mechanism with Zope's signal handling and ZConfig's rotating file handler so that USR2 signals will cause the long request log to get reopened analogous to the access and event log. -1.0 ---- +1.0 (2010-10-28) +---------------- - Initial release Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt?rev=46056&r1=46055&r2=46056&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/version.txt [utf8] Tue Oct 6 14:35:02 2015 @@ -1 +1 @@ -1.1dev +1.2 Modified: erp5/trunk/utils/Products.LongRequestLogger/README.txt URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/README.txt?rev=46056&r1=46055&r2=46056&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/README.txt [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/README.txt [utf8] Tue Oct 6 14:35:02 2015 @@ -14,13 +14,6 @@ Buildout Installation Add "Products.LongRequestLogger[standalone]" to the list of eggs of the part that defines your Zope instance. -Buildout Installation for Old Zope Versions -------------------------------------------- - -Add "Products.LongRequestLogger[python24]" to the list of eggs of the part -that defines your Zope instance. This will automatically pull in the -'threadframe' module which is needed for Python versions < 2.5. - Manual Installation for Old Zope Versions ----------------------------------------- Modified: erp5/trunk/utils/Products.LongRequestLogger/setup.py URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/setup.py?rev=46056&r1=46055&r2=46056&view=diff ============================================================================== --- erp5/trunk/utils/Products.LongRequestLogger/setup.py [utf8] (original) +++ erp5/trunk/utils/Products.LongRequestLogger/setup.py [utf8] Tue Oct 6 14:35:02 2015 @@ -35,8 +35,6 @@ setup(name='Products.LongRequestLogger', 'setuptools', ], extras_require=dict( - # With Python versions < 2.5, we need the threadframe module - python24=['threadframe'], # we need to work with Zope 2.8 buildouts that might not provide a # Zope2 egg (fake or otherwise). So we declare the full dependency # here. From nobody at svn.erp5.org Tue Oct 6 16:54:17 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 14:54:17 +0000 Subject: [Erp5-report] =?utf-8?q?ERP5-MASTER_=3A_4977_Tests=2C_0_Errors=2C?= =?utf-8?q?_1_Failures=2C_203_Skips?= Message-ID: <20151006145417.51BB3BF0209@mail2.tiolive.com> Test Suite: ERP5-MASTER Revision: slapos=8364-706801f24182715993a7356444cdf5d29c512a7f,erp5=44899-efd144da4895b2daea80b7b8b7fb6e51949a7cac Result: FAIL All tests: 4977 Failures: 1 Errors: 0 Skips: 203 https://nexedi.erp5.net/test_result_module/20151006-2D3D8E69/view The following tests failed: erp5_officejs_ui_test:testOfficeJS (1 failures) testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) The following tests were at least partly skipped: erp5_configurator_maxma_demo:testMaxmaDemoConfigurationWorkflow (1 skips) erp5_hal_json_style:testHalJsonStyle (4 skips) test_getRequestBody_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestBody) ... skipped 'TODO' test_getRequestHeader_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestHeader) ... skipped 'TODO' test_getRequestUrl_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestUrl) ... skipped 'TODO' test_getHateoas_drop_restricted (erp5.component.test.erp5_version.testHalJsonStyle.TestERP5Document_getHateoas_general) ... skipped 'TODO' erp5_web_shacache:testShaCache (1 skips) erp5_web_shadir:testShaDir (1 skips) networkcache_erp5:testShaCacheExternal (1 skips) testAccountingRulesSimulationLegacy (22 skips) testAdvancedInvoicing (1 skips) testBPMCore (1 skips) test_payBeforeDelivery (testBPMCore.TestBPMImplementation) ... skipped 'TODO ERP5' testBase (3 skips) check if a document is not indexed where we set isIndexable=0 in the same transaction of newContent(). ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we call edit() and set isIndexable=0 after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we set isIndexable=0 and call edit() after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' testBusinessTemplate (6 skips) test_BusinessTemplateUpgradeDocumentFromFilesystemToZodb (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocument (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentMigrated (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentNonExistingBefore (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' testCRM (1 skips) testCalendar (5 skips) test_2OverlappedLeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingBeforeGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsRepeatedGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' testConstraint (1 skips) testDeliveryBuilderToSupportMultipleLines (2 skips) testDms (1 skips) testDmsWithFlare (1 skips) testDmsWithPreConversion (1 skips) testERP5Base (1 skips) testERP5Catalog (4 skips) Tests that buildSQLQuery works with another query_table than 'catalog' ... skipped 'TODO ERP5' test_49_IndexInOrderedSearchFolder (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' test_SubDocumentsWithAcquireLocalRoleSecurityIndexing (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' testERP5Commerce (1 skips) test_22_createShoppingCartWithAnonymousAndLogin (testERP5Commerce.TestCommerce) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testERP5DocumentSyncML (4 skips) testERP5Interfaces (7 skips) testERP5SyncML (2 skips) testERP5Type (1 skips) testERP5TypeInterfaces (1 skips) testERP5Web (3 skips) test_03_CreateWebSiteUser (testERP5Web.TestERP5Web) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testExternalAccount (1 skips) testFormPrintoutAsODT (1 skips) test_09_FieldReplacementWithValidation (testFormPrintoutAsODT.TestFormPrintoutAsODT) ... skipped 'Disable validation because OOo does not produce compliant xml, and RelaxNG status is still draft' testFunctionalAnonymousSelection (36 skips) So this part is skipped --> So this part is skipped --> So this part is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> testFunctionalCore (8 skips) So this test is skipped --> So this test is skipped --> testFunctionalKM (3 skips) testI18NSearch (1 skips) testIngestion (4 skips) testIngestionWithFlare (4 skips) testInventory (2 skips) testInventoryAPI (2 skips) testInvoice (6 skips) testItem (13 skips) testKM (3 skips) testOpenOrder (3 skips) testOxatisSynchronization (1 skips) testPreferences (1 skips) testProductionOrder (8 skips) testProductionOrderApparel (6 skips) testProductionPackingList (1 skips) testProductionPackingListApparel (1 skips) testProxyField (1 skips) testResource (1 skips) testReturnedSalePackingList (3 skips) testSQLCachedWorklist (2 skips) test_02_related_key (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' test_04_dynamic_variables (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' testSelectionTool (7 skips) testCallSelectionFor (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testPage (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testCallSelectionFor (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testDeleteGlobalSelection (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'To be decided if implementation is required' testPage (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testTaskReportDivergence (1 skips) testTemplate (1 skips) testTradeModelLine (1 skips) testTradeModelLinePurchase (1 skips) testUbercartSynchronisation (1 skips) testVirtuemartSynchronization (1 skips) testWebDavSupport (1 skips) -------------- next part -------------- A non-text attachment was scrubbed... Name: summary.diff Type: text/x-diff Size: 947 bytes Desc: not available URL: -------------- next part -------------- FAIL: testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart8/srv/testnode/e/soft/56c6164051a28aa1652bc9a5cb986f2e/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test OfficeJS UI From nobody at svn.erp5.org Tue Oct 6 20:01:03 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 18:01:03 +0000 Subject: [Erp5-report] =?utf-8?q?ERP5-MASTER_=3A_4977_Tests=2C_0_Errors=2C?= =?utf-8?q?_7_Failures=2C_203_Skips?= Message-ID: <20151006180103.58B32BF0209@mail2.tiolive.com> Test Suite: ERP5-MASTER Revision: slapos=8364-706801f24182715993a7356444cdf5d29c512a7f,erp5=44909-1953caebd9a44dfc3ee2acdfdea9983573175a1b Result: FAIL All tests: 4977 Failures: 7 Errors: 0 Skips: 203 https://nexedi.erp5.net/test_result_module/20151006-4D08B3B3/view The following tests failed: erp5_officejs_ui_test:testOfficeJS (1 failures) testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) testERP5Commerce (1 failures, 1 skips) test_20_getProductListFromWebSite (testERP5Commerce.TestCommerce) testERP5Discussion (1 failures) test_MultipleForum (testERP5Discussion.TestERP5Discussion) testFunctionalCore (1 failures, 8 skips) testFunctionalTestRunner (testFunctionalCore.TestZeleniumCore) testKM (3 failures, 3 skips) test_10LatestContentGadget (testKM.TestKM) test_11AssignedMembersGadget (testKM.TestKM) test_18_AssignedMembersToProject (testKM.TestKM) The following tests were at least partly skipped: erp5_configurator_maxma_demo:testMaxmaDemoConfigurationWorkflow (1 skips) erp5_hal_json_style:testHalJsonStyle (4 skips) test_getRequestBody_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestBody) ... skipped 'TODO' test_getRequestHeader_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestHeader) ... skipped 'TODO' test_getRequestUrl_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestUrl) ... skipped 'TODO' test_getHateoas_drop_restricted (erp5.component.test.erp5_version.testHalJsonStyle.TestERP5Document_getHateoas_general) ... skipped 'TODO' erp5_web_shacache:testShaCache (1 skips) erp5_web_shadir:testShaDir (1 skips) networkcache_erp5:testShaCacheExternal (1 skips) testAccountingRulesSimulationLegacy (22 skips) testAdvancedInvoicing (1 skips) testBPMCore (1 skips) test_payBeforeDelivery (testBPMCore.TestBPMImplementation) ... skipped 'TODO ERP5' testBase (3 skips) check if a document is not indexed where we set isIndexable=0 in the same transaction of newContent(). ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we call edit() and set isIndexable=0 after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we set isIndexable=0 and call edit() after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' testBusinessTemplate (6 skips) test_BusinessTemplateUpgradeDocumentFromFilesystemToZodb (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocument (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentMigrated (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentNonExistingBefore (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' testCRM (1 skips) testCalendar (5 skips) test_2OverlappedLeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingBeforeGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsRepeatedGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' testConstraint (1 skips) testDeliveryBuilderToSupportMultipleLines (2 skips) testDms (1 skips) testDmsWithFlare (1 skips) testDmsWithPreConversion (1 skips) testERP5Base (1 skips) testERP5Catalog (4 skips) Tests that buildSQLQuery works with another query_table than 'catalog' ... skipped 'TODO ERP5' test_49_IndexInOrderedSearchFolder (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' test_SubDocumentsWithAcquireLocalRoleSecurityIndexing (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' testERP5Commerce (1 skips) test_22_createShoppingCartWithAnonymousAndLogin (testERP5Commerce.TestCommerce) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testERP5DocumentSyncML (4 skips) testERP5Interfaces (7 skips) testERP5SyncML (2 skips) testERP5Type (1 skips) testERP5TypeInterfaces (1 skips) testERP5Web (3 skips) test_03_CreateWebSiteUser (testERP5Web.TestERP5Web) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testExternalAccount (1 skips) testFormPrintoutAsODT (1 skips) test_09_FieldReplacementWithValidation (testFormPrintoutAsODT.TestFormPrintoutAsODT) ... skipped 'Disable validation because OOo does not produce compliant xml, and RelaxNG status is still draft' testFunctionalAnonymousSelection (36 skips) So this part is skipped --> So this part is skipped --> So this part is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> testFunctionalCore (8 skips) So this test is skipped --> So this test is skipped --> testFunctionalKM (3 skips) testI18NSearch (1 skips) testIngestion (4 skips) testIngestionWithFlare (4 skips) testInventory (2 skips) testInventoryAPI (2 skips) testInvoice (6 skips) testItem (13 skips) testKM (3 skips) testOpenOrder (3 skips) testOxatisSynchronization (1 skips) testPreferences (1 skips) testProductionOrder (8 skips) testProductionOrderApparel (6 skips) testProductionPackingList (1 skips) testProductionPackingListApparel (1 skips) testProxyField (1 skips) testResource (1 skips) testReturnedSalePackingList (3 skips) testSQLCachedWorklist (2 skips) test_02_related_key (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' test_04_dynamic_variables (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' testSelectionTool (7 skips) testCallSelectionFor (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testPage (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testCallSelectionFor (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testDeleteGlobalSelection (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'To be decided if implementation is required' testPage (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testTaskReportDivergence (1 skips) testTemplate (1 skips) testTradeModelLine (1 skips) testTradeModelLinePurchase (1 skips) testUbercartSynchronisation (1 skips) testVirtuemartSynchronization (1 skips) testWebDavSupport (1 skips) -------------- next part -------------- A non-text attachment was scrubbed... Name: summary.diff Type: text/x-diff Size: 1422 bytes Desc: not available URL: -------------- next part -------------- FAIL: testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart8/srv/testnode/e/soft/56c6164051a28aa1652bc9a5cb986f2e/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test OfficeJS UI FAIL: test_20_getProductListFromWebSite (testERP5Commerce.TestCommerce) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart8/srv/testnode/e/soft/56c6164051a28aa1652bc9a5cb986f2e/parts/erp5/Products/ERP5/tests/testERP5Commerce.py", line 816, in test_20_getProductListFromWebSite self.assertEqual(5, len(self.website.WebSite_getProductList())) AssertionError: 5 != 0 FAIL: test_MultipleForum (testERP5Discussion.TestERP5Discussion) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testERP5Discussion.py", line 187, in test_MultipleForum self.assertSameSet([discussion_thread_object1], [x.getObject() for x in web_section1.getDocumentValueList()]) File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeTestCase.py", line 501, in assertSameSet self.assertSetEqual(set(a), set(b), msg) AssertionError: Items in the first set but not the second: FAIL: testFunctionalTestRunner (testFunctionalCore.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test Transactions related to an account, with at date parameter FAIL: test_10LatestContentGadget (testKM.TestKM) Check Latest Content Gadgets ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testKM.py", line 630, in test_10LatestContentGadget , self.auth).getBody()) AssertionError: False is not true FAIL: test_11AssignedMembersGadget (testKM.TestKM) Check Assigned Members Gadgets ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testKM.py", line 672, in test_11AssignedMembersGadget , self.auth).getBody()) AssertionError: False is not true FAIL: test_18_AssignedMembersToProject (testKM.TestKM) Test assigned members to a project. Project is defined in a Web Section ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testKM.py", line 878, in test_18_AssignedMembersToProject len( websection.WebSection_searchAssignmentList(portal_type='Assignment'))) AssertionError: 1 != 0 From nobody at svn.erp5.org Tue Oct 6 23:48:53 2015 From: nobody at svn.erp5.org (nobody at svn.erp5.org) Date: Tue, 06 Oct 2015 21:48:53 +0000 Subject: [Erp5-report] =?utf-8?q?ERP5-MASTER_=3A_4977_Tests=2C_0_Errors=2C?= =?utf-8?q?_6_Failures=2C_203_Skips?= Message-ID: <20151006214903.A0044BF0209@mail2.tiolive.com> Test Suite: ERP5-MASTER Revision: slapos=8365-01d5ebd9e0bf364680c912e54e2b17e2537dc5e2,erp5=44912-5220990d0517e7365e3a2db4646ef83760c92667 Result: FAIL All tests: 4977 Failures: 6 Errors: 0 Skips: 203 https://nexedi.erp5.net/test_result_module/20151006-23AA9986/view The following tests failed: erp5_officejs_ui_test:testOfficeJS (1 failures) testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) testERP5Commerce (1 failures, 1 skips) test_20_getProductListFromWebSite (testERP5Commerce.TestCommerce) testERP5Discussion (1 failures) test_MultipleForum (testERP5Discussion.TestERP5Discussion) testKM (3 failures, 3 skips) test_10LatestContentGadget (testKM.TestKM) test_11AssignedMembersGadget (testKM.TestKM) test_18_AssignedMembersToProject (testKM.TestKM) The following tests were at least partly skipped: erp5_configurator_maxma_demo:testMaxmaDemoConfigurationWorkflow (1 skips) erp5_hal_json_style:testHalJsonStyle (4 skips) test_getRequestBody_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestBody) ... skipped 'TODO' test_getRequestHeader_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestHeader) ... skipped 'TODO' test_getRequestUrl_matching_key (erp5.component.test.erp5_version.testHalJsonStyle.TestBase_getRequestUrl) ... skipped 'TODO' test_getHateoas_drop_restricted (erp5.component.test.erp5_version.testHalJsonStyle.TestERP5Document_getHateoas_general) ... skipped 'TODO' erp5_web_shacache:testShaCache (1 skips) erp5_web_shadir:testShaDir (1 skips) networkcache_erp5:testShaCacheExternal (1 skips) testAccountingRulesSimulationLegacy (22 skips) testAdvancedInvoicing (1 skips) testBPMCore (1 skips) test_payBeforeDelivery (testBPMCore.TestBPMImplementation) ... skipped 'TODO ERP5' testBase (3 skips) check if a document is not indexed where we set isIndexable=0 in the same transaction of newContent(). ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we call edit() and set isIndexable=0 after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' check if a document is not indexed where we set isIndexable=0 and call edit() after it is already indexed. ... skipped 'isIndexable is not designed to work like tested here, this test must be rewritten once we know how to handle correctly templates' testBusinessTemplate (6 skips) test_BusinessTemplateUpgradeDocumentFromFilesystemToZodb (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocument (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentMigrated (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' test_BusinessTemplateWithZodbDocumentNonExistingBefore (testBusinessTemplate.TestConstraintTemplateItem) ... skipped 'Not implemented yet' testCRM (1 skips) testCalendar (5 skips) test_2OverlappedLeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingAfterGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestOverlappingBeforeGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' test_LeaveRequestWithSameDateAsRepeatedGroupCalendar (testCalendar.TestCalendar) ... skipped 'Need to check if we want later to support this again. Drop support for now' testConstraint (1 skips) testDeliveryBuilderToSupportMultipleLines (2 skips) testDms (1 skips) testDmsWithFlare (1 skips) testDmsWithPreConversion (1 skips) testERP5Base (1 skips) testERP5Catalog (4 skips) Tests that buildSQLQuery works with another query_table than 'catalog' ... skipped 'TODO ERP5' test_49_IndexInOrderedSearchFolder (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' test_SubDocumentsWithAcquireLocalRoleSecurityIndexing (testERP5Catalog.TestERP5Catalog) ... skipped 'TODO ERP5' testERP5Commerce (1 skips) test_22_createShoppingCartWithAnonymousAndLogin (testERP5Commerce.TestCommerce) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testERP5DocumentSyncML (4 skips) testERP5Interfaces (7 skips) testERP5SyncML (2 skips) testERP5Type (1 skips) testERP5TypeInterfaces (1 skips) testERP5Web (3 skips) test_03_CreateWebSiteUser (testERP5Web.TestERP5Web) ... skipped 'WebSite_createWebSiteAccount is disabled by default.' testExternalAccount (1 skips) testFormPrintoutAsODT (1 skips) test_09_FieldReplacementWithValidation (testFormPrintoutAsODT.TestFormPrintoutAsODT) ... skipped 'Disable validation because OOo does not produce compliant xml, and RelaxNG status is still draft' testFunctionalAnonymousSelection (36 skips) So this part is skipped --> So this part is skipped --> So this part is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> So this test is skipped --> testFunctionalCore (8 skips) So this test is skipped --> So this test is skipped --> testFunctionalKM (3 skips) testI18NSearch (1 skips) testIngestion (4 skips) testIngestionWithFlare (4 skips) testInventory (2 skips) testInventoryAPI (2 skips) testInvoice (6 skips) testItem (13 skips) testKM (3 skips) testOpenOrder (3 skips) testOxatisSynchronization (1 skips) testPreferences (1 skips) testProductionOrder (8 skips) testProductionOrderApparel (6 skips) testProductionPackingList (1 skips) testProductionPackingListApparel (1 skips) testProxyField (1 skips) testResource (1 skips) testReturnedSalePackingList (3 skips) testSQLCachedWorklist (2 skips) test_02_related_key (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' test_04_dynamic_variables (testSQLCachedWorklist.TestSQLCachedWorklist) ... skipped 'TODO ERP5' testSelectionTool (7 skips) testCallSelectionFor (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testPage (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionTool) ... skipped 'Test to be written' testCallSelectionFor (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testDeleteGlobalSelection (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'To be decided if implementation is required' testPage (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testView (testSelectionTool.TestSelectionToolMemcachedStorage) ... skipped 'Test to be written' testTaskReportDivergence (1 skips) testTemplate (1 skips) testTradeModelLine (1 skips) testTradeModelLinePurchase (1 skips) testUbercartSynchronisation (1 skips) testVirtuemartSynchronization (1 skips) testWebDavSupport (1 skips) -------------- next part -------------- A non-text attachment was scrubbed... Name: summary.diff Type: text/x-diff Size: 972 bytes Desc: not available URL: -------------- next part -------------- FAIL: testFunctionalTestRunner (erp5.component.test.erp5_version.testOfficeJS.TestZeleniumCore) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeFunctionalTestCase.py", line 445, in testFunctionalTestRunner self.assertEqual([], error_title_list, '\n'.join(error_title_list)) AssertionError: Test OfficeJS UI FAIL: test_20_getProductListFromWebSite (testERP5Commerce.TestCommerce) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart19/srv/testnode/e/soft/b9633d0607bf712edeb35e1280a6ef25/parts/erp5/Products/ERP5/tests/testERP5Commerce.py", line 816, in test_20_getProductListFromWebSite self.assertEqual(5, len(self.website.WebSite_getProductList())) AssertionError: 5 != 0 FAIL: test_MultipleForum (testERP5Discussion.TestERP5Discussion) ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testERP5Discussion.py", line 187, in test_MultipleForum self.assertSameSet([discussion_thread_object1], [x.getObject() for x in web_section1.getDocumentValueList()]) File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5Type/tests/ERP5TypeTestCase.py", line 501, in assertSameSet self.assertSetEqual(set(a), set(b), msg) AssertionError: Items in the first set but not the second: FAIL: test_10LatestContentGadget (testKM.TestKM) Check Latest Content Gadgets ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testKM.py", line 630, in test_10LatestContentGadget , self.auth).getBody()) AssertionError: False is not true FAIL: test_11AssignedMembersGadget (testKM.TestKM) Check Assigned Members Gadgets ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testKM.py", line 672, in test_11AssignedMembersGadget , self.auth).getBody()) AssertionError: False is not true FAIL: test_18_AssignedMembersToProject (testKM.TestKM) Test assigned members to a project. Project is defined in a Web Section ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/slapgrid/slappart3/srv/testnode/e/soft/82737245a7822308b0fdc68ef62c0784/parts/erp5/Products/ERP5/tests/testKM.py", line 878, in test_18_AssignedMembersToProject len( websection.WebSection_searchAssignmentList(portal_type='Assignment'))) AssertionError: 1 != 0