Java Code Examples for org.springframework.test.context.transaction.TestTransaction#flagForCommit()

The following examples show how to use org.springframework.test.context.transaction.TestTransaction#flagForCommit() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ProgrammaticTxMgmtTests.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Test
public void commitTxAndStartNewTx() {
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
	assertUsers("Dilbert");
	deleteFromTables("user");
	assertUsers();

	// Commit
	TestTransaction.flagForCommit();
	assertFalse(TestTransaction.isFlaggedForRollback());
	TestTransaction.end();
	assertInTransaction(false);
	assertFalse(TestTransaction.isActive());
	assertUsers();

	executeSqlScript("classpath:/org/springframework/test/context/jdbc/data-add-dogbert.sql", false);
	assertUsers("Dogbert");

	TestTransaction.start();
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
}
 
Example 2
Source File: ProgrammaticTxMgmtTests.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@Test
public void commitTxButDoNotStartNewTx() {
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
	assertUsers("Dilbert");
	deleteFromTables("user");
	assertUsers();

	// Commit
	TestTransaction.flagForCommit();
	assertFalse(TestTransaction.isFlaggedForRollback());
	TestTransaction.end();
	assertFalse(TestTransaction.isActive());
	assertInTransaction(false);
	assertUsers();

	executeSqlScript("classpath:/org/springframework/test/context/jdbc/data-add-dogbert.sql", false);
	assertUsers("Dogbert");
}
 
Example 3
Source File: ActionServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 6 votes vote down vote up
public void xtestAsyncLoadTest()
{
    // TODO this is very weak .. how do we improve this ???
    
    Action action = this.actionService.createAction(AddFeaturesActionExecuter.NAME);
    action.setParameterValue(AddFeaturesActionExecuter.PARAM_ASPECT_NAME, ContentModel.ASPECT_VERSIONABLE);
    action.setExecuteAsynchronously(true);
    
    for (int i = 0; i < 1000; i++)
    {
        this.actionService.executeAction(action, this.nodeRef);
    }

    TestTransaction.flagForCommit();
    TestTransaction.end();
    
    // TODO how do we assess whether the large number of actions stacked cause a problem ??
}
 
Example 4
Source File: ProgrammaticTxMgmtTestNGTests.java    From java-technology-stack with MIT License 6 votes vote down vote up
@Test
public void commitTxButDoNotStartNewTx() {
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
	assertUsers("Dilbert");
	deleteFromTables("user");
	assertUsers();

	// Commit
	TestTransaction.flagForCommit();
	assertFalse(TestTransaction.isFlaggedForRollback());
	TestTransaction.end();
	assertFalse(TestTransaction.isActive());
	assertInTransaction(false);
	assertUsers();

	executeSqlScript("classpath:/org/springframework/test/context/jdbc/data-add-dogbert.sql", false);
	assertUsers("Dogbert");
}
 
Example 5
Source File: ProgrammaticTxMgmtTestNGTests.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
@Test
public void commitTxAndStartNewTx() {
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
	assertUsers("Dilbert");
	deleteFromTables("user");
	assertUsers();

	// Commit
	TestTransaction.flagForCommit();
	assertFalse(TestTransaction.isFlaggedForRollback());
	TestTransaction.end();
	assertInTransaction(false);
	assertFalse(TestTransaction.isActive());
	assertUsers();

	executeSqlScript("classpath:/org/springframework/test/context/jdbc/data-add-dogbert.sql", false);
	assertUsers("Dogbert");

	TestTransaction.start();
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
}
 
Example 6
Source File: ProgrammaticTxMgmtTestNGTests.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Test
public void commitTxButDoNotStartNewTx() {
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
	assertUsers("Dilbert");
	deleteFromTables("user");
	assertUsers();

	// Commit
	TestTransaction.flagForCommit();
	assertFalse(TestTransaction.isFlaggedForRollback());
	TestTransaction.end();
	assertFalse(TestTransaction.isActive());
	assertInTransaction(false);
	assertUsers();

	executeSqlScript("classpath:/org/springframework/test/context/jdbc/data-add-dogbert.sql", false);
	assertUsers("Dogbert");
}
 
Example 7
Source File: ProgrammaticTxMgmtTestNGTests.java    From spring-analysis-note with MIT License 6 votes vote down vote up
@Test
public void commitTxAndStartNewTx() {
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
	assertUsers("Dilbert");
	deleteFromTables("user");
	assertUsers();

	// Commit
	TestTransaction.flagForCommit();
	assertFalse(TestTransaction.isFlaggedForRollback());
	TestTransaction.end();
	assertInTransaction(false);
	assertFalse(TestTransaction.isActive());
	assertUsers();

	executeSqlScript("classpath:/org/springframework/test/context/jdbc/data-add-dogbert.sql", false);
	assertUsers("Dogbert");

	TestTransaction.start();
	assertInTransaction(true);
	assertTrue(TestTransaction.isActive());
}
 
Example 8
Source File: VersionServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 5 votes vote down vote up
@Test
public void testAutoVersionOff()
{
    // Create a versionable node
    final NodeRef versionableNode = createNewVersionableNode();
    
    this.dbNodeService.setProperty(versionableNode, ContentModel.PROP_AUTO_VERSION, false);

    TestTransaction.flagForCommit();
    TestTransaction.end();

    // The initial version should have been created now
    
    transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Object>()
    {
        public Object execute() throws Exception
        {
            // Add some content 
            ContentWriter contentWriter = contentService.getWriter(versionableNode, ContentModel.PROP_CONTENT, true);
            assertNotNull(contentWriter);
            contentWriter.putContent(UPDATED_CONTENT_1);
            
            return null;
        }
    });
    
    // Now lets have a look and make sure we have the correct number of entries in the version history
    transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Object>()
    {
        public Object execute() throws Exception
        {
            VersionHistory versionHistory = versionService.getVersionHistory(versionableNode);
            assertNotNull(versionHistory);
            assertEquals(1, versionHistory.getAllVersions().size());
            
            return null;
        }
    
    });
}
 
Example 9
Source File: VersionServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 5 votes vote down vote up
@Test
public void testAddVersionableAspectWithNoVersionType()
{
    // No version-type specified when adding the aspect
    NodeRef nodeRef = createNodeWithVersionType(null);
    TestTransaction.flagForCommit();
    TestTransaction.end();
    assertCorrectVersionLabel(nodeRef, "1.0");
}
 
Example 10
Source File: DbNodeServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 5 votes vote down vote up
/**
 * Deletes a child node and then iterates over the children of the parent node,
 * getting the QName.  This caused some issues after we did some optimization
 * using lazy loading of the associations.
 */
public void testLazyLoadIssue() throws Exception
{
    Map<QName, ChildAssociationRef> assocRefs = buildNodeGraph();
    // commit results
    TestTransaction.flagForCommit();
    TestTransaction.end();

    UserTransaction userTransaction = txnService.getUserTransaction();
    
    try
    {
        userTransaction.begin();
        
        ChildAssociationRef n6pn8Ref = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "n6_p_n8"));
        NodeRef n6Ref = n6pn8Ref.getParentRef();
        NodeRef n8Ref = n6pn8Ref.getChildRef();
        
        // delete n8
        nodeService.deleteNode(n8Ref);
        
        // get the parent children
        List<ChildAssociationRef> assocs = nodeService.getChildAssocs(n6Ref);
        for (ChildAssociationRef assoc : assocs)
        {
            // just checking
        }
        
        userTransaction.commit();
    }
    catch(Exception e)
    {
        try { userTransaction.rollback(); } catch (IllegalStateException ee) {}
        throw e;
    }
}
 
Example 11
Source File: ThumbnailServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 5 votes vote down vote up
/**
 * See REPO-2519, MNT-17113
 *
 * @throws IOException
 */
@Test
public void testIfNodesExistsAfterCreateThumbnail() throws IOException
{
    // Add the log appender to the root logger
    LogErrorAppender logErrorAppender = new LogErrorAppender();
    Logger.getRootLogger().addAppender(logErrorAppender);

    // create content node for thumbnail node
    NodeRef pdfOrig = createOriginalContent(folder, MimetypeMap.MIMETYPE_PDF);

    QName qname = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "doclib");
    ThumbnailDefinition details = thumbnailService.getThumbnailRegistry().getThumbnailDefinition(qname.getLocalName());

    TestTransaction.flagForCommit();
    TestTransaction.end();

    // create thumbnail
    transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
    {
        public Void execute() throws Throwable
        {
            // Delete the content node (pdfOrig) before the afterCommit code is executed
            TestNodeDeleterListener testNodeDeleterListener = new TestNodeDeleterListener(pdfOrig);
            // It needs to have a higher priority as the implemented afterCommit. The priority in order are (0,1,2,3,4)
            AlfrescoTransactionSupport.bindListener(testNodeDeleterListener, 1);

            thumbnailService.createThumbnail(pdfOrig, ContentModel.PROP_CONTENT, MimetypeMap.MIMETYPE_IMAGE_JPEG, details.getTransformationOptions(), "doclib");
            return null;
        }
    }, false, true);

    assertEquals("There should be no error anymore", 0, logErrorAppender.getLog().size());
}
 
Example 12
Source File: ExecuteAllRulesActionExecuterTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Test for MNT-13055:
 * 
 * We create a folder structure thus:
 * <pre>
 * rootFolder (rule: add an aspect)
 * |
 * +- folderA ("do not inherit rules" + link to rootFolder's rule set) 
 *    |
 *    +- fileA
 *    |
 *    +- folderB
 *       |
 *       +- fileB 
 * </pre>
 * This test case specifies a rule on rootFolder that adds an aspect to all files within.
 * folderA has the ignoreInheritedRules aspect applied, but also links to rootFolder's rule set.
 * <p>
 * We then explicitly execute folderA's rules, including for subfolders. Ultimately, we want to
 * know that fileB did indeed have the ruleset executed on it, and therefore gained the classifiable aspect.
 */
public void testRulesFireOnNonInheritedFolderUsingLinkedRuleSetInstead()
{
    final NodeRef rootFolder = this.nodeService.createNode(
            this.rootNodeRef,
            ContentModel.ASSOC_CHILDREN,
            QName.createQName("{test}rootFolderForTest"),
            ContentModel.TYPE_FOLDER).getChildRef();
    
    final NodeRef folderA = fileFolderService.
            create(rootFolder, "folderA", ContentModel.TYPE_FOLDER).getNodeRef();
    
    // Set folderA to "Don't Inherit Rules".
    nodeService.addAspect(folderA, ASPECT_IGNORE_INHERITED_RULES, Collections.emptyMap());
    
    NodeRef fileA = createFile(folderA, "fileA.txt").getNodeRef();
    
    final NodeRef folderB = fileFolderService.
            create(folderA, "folderB", ContentModel.TYPE_FOLDER).getNodeRef();
    
    NodeRef fileB = createFile(folderB, "fileB.txt").getNodeRef();
    
    // Create a rule on rootFolder
    Rule rule = new Rule();
    rule.setRuleType(RuleType.INBOUND);
    Action action = actionService.createAction(AddFeaturesActionExecuter.NAME);
    action.setParameterValue(AddFeaturesActionExecuter.PARAM_ASPECT_NAME, ContentModel.ASPECT_CLASSIFIABLE);
    rule.setAction(action);
    // It mustn't matter whether this rule "applies to children", since we'll explicitly
    // run it on "the folder and its subfolders".
    rule.applyToChildren(false);
    rule.setExecuteAsynchronously(false);
    ruleService.enableRule(rule);
    ruleService.saveRule(rootFolder, rule);

    // Link to Rule Set of rootFolder to folderA
    Action linkAction = actionService.createAction(LinkRules.NAME);
    linkAction.setParameterValue(LinkRules.PARAM_LINK_FROM_NODE, rootFolder);
    linkAction.setExecuteAsynchronously(false);
    actionService.executeAction(linkAction, folderA);
    
    TestTransaction.flagForCommit();
    TestTransaction.end();

    transactionHelper.doInTransaction(() -> {
        assertFalse(nodeService.hasAspect(folderA, ContentModel.ASPECT_CLASSIFIABLE));
        assertFalse(nodeService.hasAspect(fileA, ContentModel.ASPECT_CLASSIFIABLE));
        assertFalse(nodeService.hasAspect(folderB, ContentModel.ASPECT_CLASSIFIABLE));
        assertFalse(nodeService.hasAspect(fileB, ContentModel.ASPECT_CLASSIFIABLE));
        return null;
    });
    
    
    // rootFolder: "Run rule for this folder and its subfolders".
    transactionHelper.doInTransaction(() -> {
        Map<String, Serializable> actionParams = new HashMap<>();
        actionParams.put(ExecuteAllRulesActionExecuter.PARAM_RUN_ALL_RULES_ON_CHILDREN, true);
        // In Share, when you manually trigger rules on a folder, this parameter (execute-inherited-rules)
        // will be false if the aspect rule:ignoreInheritedRules is present, and true otherwise.
        actionParams.put(ExecuteAllRulesActionExecuter.PARAM_EXECUTE_INHERITED_RULES, false);
        Action rulesAction = actionService.createAction(ExecuteAllRulesActionExecuter.NAME, actionParams);
        executer.execute(rulesAction, folderA);
        return null;
    });

    transactionHelper.doInTransaction(() -> {
        // We're running the rule on folderA, so the folder itself won't be processed.
        assertFalse(nodeService.hasAspect(folderA, ContentModel.ASPECT_CLASSIFIABLE));
        
        // The contents of folderA will all have the aspect added.
        assertTrue(nodeService.hasAspect(fileA, ContentModel.ASPECT_CLASSIFIABLE));
        assertTrue(nodeService.hasAspect(folderB, ContentModel.ASPECT_CLASSIFIABLE));
        // The contents of folderB will all have the aspect added.
        assertTrue(nodeService.hasAspect(fileB, ContentModel.ASPECT_CLASSIFIABLE));
        return null;
    });
}
 
Example 13
Source File: DbNodeServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
public void testAspectRemovalWithCommit() throws Throwable
{
   // Create a node to add the aspect to
   NodeRef sourceNodeRef = nodeService.createNode(
           rootNodeRef,
           ASSOC_TYPE_QNAME_TEST_CHILDREN,
           QName.createQName(BaseNodeServiceTest.NAMESPACE, "testAspectRemoval-source"),
           ContentModel.TYPE_CONTAINER).getChildRef();
   
   // Create a target for the associations
   NodeRef targetNodeRef = nodeService.createNode(
           rootNodeRef,
           ASSOC_TYPE_QNAME_TEST_CHILDREN,
           QName.createQName(BaseNodeServiceTest.NAMESPACE, "testAspectRemoval-target"),
           ContentModel.TYPE_CONTAINER).getChildRef();
   
   // Add the aspect to the source
   nodeService.addAspect(sourceNodeRef, ASPECT_WITH_ASSOCIATIONS, null);
   // Make the associations
   nodeService.addChild(
           sourceNodeRef,
           targetNodeRef,
           ASSOC_ASPECT_CHILD_ASSOC,
           QName.createQName(NAMESPACE, "aspect-child"));
   nodeService.createAssociation(sourceNodeRef, targetNodeRef, ASSOC_ASPECT_NORMAL_ASSOC);
   
   // Check that the correct associations are present
   assertEquals("Expected exactly one child",
           1, nodeService.getChildAssocs(sourceNodeRef).size());
   assertEquals("Expected exactly one target",
           1, nodeService.getTargetAssocs(sourceNodeRef, RegexQNamePattern.MATCH_ALL).size());
   
   // Force a commit here
    TestTransaction.flagForCommit();
    TestTransaction.end();
   
   // start another transaction to remove the aspect
   UserTransaction txn = txnService.getUserTransaction();
   txn.begin();
   
   try
   {
      Set<QName> aspects = nodeService.getAspects(sourceNodeRef); 
      int noAspectsBefore = aspects.size();
      
      // Now remove the aspect
      nodeService.removeAspect(sourceNodeRef, ASPECT_WITH_ASSOCIATIONS);
      
      // Check that the associations were removed
      assertEquals("Expected exactly zero child",
              0, nodeService.getChildAssocs(sourceNodeRef).size());
      assertEquals("Expected exactly zero target",
              0, nodeService.getTargetAssocs(sourceNodeRef, RegexQNamePattern.MATCH_ALL).size());
      aspects = nodeService.getAspects(sourceNodeRef); 
      assertEquals("Expected exactly one less aspect",
              noAspectsBefore-1, aspects.size());
      
      txn.commit();
   }
   catch (Throwable e)
   {
       try { txn.rollback(); } catch (Throwable ee) {}
       throw e;
   }
}
 
Example 14
Source File: RuleTriggerTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
@Test
public void testOnContentCreateTrigger()
{
    TestRuleType nodeCreate = createTestRuleType(ON_CREATE_NODE_TRIGGER);
    assertFalse(nodeCreate.rulesTriggered);

    NodeRef nodeRef = this.nodeService.createNode(
            this.rootNodeRef,
            ContentModel.ASSOC_CHILDREN,
            ContentModel.ASSOC_CHILDREN,
            ContentModel.TYPE_CONTENT).getChildRef();
    
    assertTrue(nodeCreate.rulesTriggered);

    // Terminate the transaction
    TestTransaction.flagForCommit();
    TestTransaction.end();
    TestTransaction.start();

    TestRuleType contentCreate = createTestRuleType(ON_CONTENT_CREATE_TRIGGER);
    assertFalse(contentCreate.rulesTriggered);
    
    // Try and trigger the type
    ContentWriter contentWriter = this.contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
    contentWriter.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
    contentWriter.setEncoding("UTF-8");
    contentWriter.putContent("some content");
    
    // Check to see if the rule type has been triggered
    assertTrue(contentCreate.rulesTriggered);
    
    // Try and trigger the type (again)
    contentCreate.rulesTriggered = false;
    assertFalse(contentCreate.rulesTriggered);
    ContentWriter contentWriter2 = this.contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
    contentWriter2.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
    contentWriter2.setEncoding("UTF-8");
    contentWriter2.putContent("some content");
    
    // Check to see if the rule type has been triggered
    assertFalse(contentCreate.rulesTriggered);
}
 
Example 15
Source File: DbNodeServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Check that the maximum string lengths can be adjusted up and down.
 * Note that this test ONLY works for MySQL because the other databases cannot support more than 1024 characters
 * in the string_value column and the value may not be set to less than 1024.
 * 
 * @see SchemaBootstrap#DEFAULT_MAX_STRING_LENGTH
 */
@SuppressWarnings("deprecation")
public void testMySQLInnoDBNodeStringLengthWorker() throws Exception
{
    TestTransaction.flagForCommit();
    TestTransaction.end();
    
    // Skip of the dialect if not MySQL (also skip for MySQL Cluster NDB)
    Dialect dialect = (Dialect) applicationContext.getBean("dialect");
    if ((dialect instanceof MySQLClusterNDBDialect) || (! (dialect instanceof MySQLInnoDBDialect)))
    {
        return;
    }
    SchemaBootstrap schemaBootstrap = (SchemaBootstrap) applicationContext.getBean("schemaBootstrap");
    assertEquals("Expected max string length to be MAX", Integer.MAX_VALUE, SchemaBootstrap.getMaxStringLength());
    
    NodeStringLengthWorker worker = (NodeStringLengthWorker) applicationContext.getBean("nodeStringLengthWorker");
    
    // If we run this worker just to get everything into the correct starting state.
    // If it does not work, then that will be detected later anyway
    NodeStringLengthWorkResult result = worker.execute();
    assertTrue(result.getPropertiesProcessed() > 0);
    assertEquals(0, result.getErrors());
    
    // Now set the max string length to DEFAULT_MAX_STRING_LENGTH characters
    schemaBootstrap.setMaximumStringLength(SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH);
    schemaBootstrap.onApplicationEvent(new ContextRefreshedEvent(applicationContext));
    // Move any values persisted before the test
    result = worker.execute();
    int firstPassChanged = result.getPropertiesChanged();
    
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH + 1; i++)
    {
        sb.append("A");
    }
    final String longString = sb.toString();
    // Persist the property using the default MAX_VALUE so that it goes into the string_value
    schemaBootstrap.setMaximumStringLength(Integer.MAX_VALUE);
    schemaBootstrap.onApplicationEvent(new ContextRefreshedEvent(applicationContext));
    txnService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Void>()
    {
        @Override
        public Void execute() throws Throwable
        {
            nodeService.setProperty(rootNodeRef, PROP_QNAME_STRING_VALUE, longString);
            return null;
        }
    });

    // The worker should do nothing
    result = worker.execute();
    assertEquals(firstPassChanged, result.getPropertiesChanged());
    
    // Now bring the limit down to the match for other DBs
    schemaBootstrap.setMaximumStringLength(SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH);
    schemaBootstrap.onApplicationEvent(new ContextRefreshedEvent(applicationContext));
    result = worker.execute();
    assertEquals(firstPassChanged + 1, result.getPropertiesChanged());
    
    // Put the limit back to the MySQL default and all the large values should go back into MySQL's TEXT field
    schemaBootstrap.setMaximumStringLength(Integer.MAX_VALUE);
    schemaBootstrap.onApplicationEvent(new ContextRefreshedEvent(applicationContext));
    result = worker.execute();
    assertEquals(firstPassChanged + 1, result.getPropertiesChanged());
    
    // Check that our string is still OK
    String checkLongString = txnService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<String>()
    {
        @Override
        public String execute() throws Throwable
        {
            return (String) nodeService.getProperty(rootNodeRef, PROP_QNAME_STRING_VALUE);
        }
    });
    assertEquals("String manipulation corrupted the long string value. ", longString, checkLongString);
}
 
Example 16
Source File: DictionaryModelTypeTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
@Test
public void testImportingSameNamespaceFails() throws Exception
{
    // just to make sure we don't regress ACE-5852, some tests should run as System
    AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName());

    // Create model
    final NodeRef modelNode = createActiveModel("dictionary/testModel.xml");
    TestTransaction.flagForCommit();
    TestTransaction.end();

    //  add second model to introduce self referencing dependency
    TestTransaction.start();
    PropertyMap properties = new PropertyMap(1);
    properties.put(ContentModel.PROP_MODEL_ACTIVE, true);
    final NodeRef modelNode2 = this.nodeService.createNode(
             this.rootNodeRef,
             ContentModel.ASSOC_CHILDREN,
             QName.createQName(NamespaceService.ALFRESCO_URI, "dictionaryModels"),
             ContentModel.TYPE_DICTIONARY_MODEL,
             properties).getChildRef();
    TestTransaction.flagForCommit();
    TestTransaction.end();

    try
    {
        transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Void>() {
                public Void execute() throws Exception {
                    ContentWriter contentWriter = DictionaryModelTypeTest.this.contentService.getWriter(modelNode2, ContentModel.PROP_CONTENT, true);
                    contentWriter.putContent(Thread.currentThread().getContextClassLoader().getResourceAsStream("dictionary/testModel2.xml"));
                    return null;
                }
        });
        fail("Validation should fail as a circular dependency was introduced");
    } catch(AlfrescoRuntimeException e)
    {
        assertTrue(e.getCause().getMessage().contains("URI mage.model cannot be imported as it is already contained in the model's namespaces"));
    }

    //delete model
    finally
    {
        transactionService.getRetryingTransactionHelper().doInTransaction(
                new RetryingTransactionCallback<Object>() {
                    public Object execute() throws Exception {
                        // Delete the model
                        DictionaryModelTypeTest.this.nodeService.deleteNode(modelNode);
                        return null;
                    }
                });
    }
}
 
Example 17
Source File: RenditionServiceIntegrationTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
@Before
public void before() throws Exception
{
    super.before();
    this.namespaceService= (NamespaceService) this.applicationContext.getBean("namespaceService");
    this.renditionService = (RenditionService) this.applicationContext.getBean("renditionService");
    this.repositoryHelper = (Repository) this.applicationContext.getBean("repositoryHelper");
    this.scriptService = (ScriptService) this.applicationContext.getBean("scriptService");
    this.transactionHelper = (RetryingTransactionHelper) this.applicationContext
                .getBean("retryingTransactionHelper");

    // Set the current security context as admin
    AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
    
    // Register our test rendering engine if needed
    DummyHelloWorldRenditionEngine.registerIfNeeded(this.applicationContext);

    // Create test folders
    NodeRef companyHome = this.repositoryHelper.getCompanyHome();

    // Create the test folder used for these tests
    this.testTargetFolder = createNode(companyHome, "testFolder-" + GUID.generate(), ContentModel.TYPE_FOLDER);

    // Create the node used as a content supplier for tests
    this.nodeWithDocContent  =  createContentNode(companyHome, "testDocContent-" + GUID.generate());
    
    // Put some known PDF content in it.
    File pdfQuickFile = AbstractContentTransformerTest.loadQuickTestFile("pdf");
    assertNotNull("Failed to load required test file.", pdfQuickFile);

    nodeService.setProperty(nodeWithDocContent, ContentModel.PROP_CONTENT, new ContentData(null,
                MimetypeMap.MIMETYPE_PDF, 0L, null));
    ContentWriter writer = contentService.getWriter(nodeWithDocContent, ContentModel.PROP_CONTENT, true);
    writer.setMimetype(MimetypeMap.MIMETYPE_PDF);
    writer.setEncoding("UTF-8");
    writer.putContent(pdfQuickFile);
    
    // Put the titled aspect on it - used for testing rendition updates
    Map<QName, Serializable> titledProps = new HashMap<QName, Serializable>();
    titledProps.put(ContentModel.PROP_TITLE, "Original test title");
    titledProps.put(ContentModel.PROP_DESCRIPTION, "Dummy description");
    nodeService.addAspect(nodeWithDocContent, ContentModel.ASPECT_TITLED, titledProps);


    // Create a test image
    this.nodeWithImageContent = createContentNode(companyHome, "testImageNode-" + GUID.generate());
    // Stream some well-known image content into the node.       
    URL url = RenditionServiceIntegrationTest.class.getClassLoader().getResource("images/gray21.512.png");
    assertNotNull("url of test image was null", url);
    File imageFile = new File(url.getFile());
    setImageContentOnNode(nodeWithImageContent, MimetypeMap.MIMETYPE_IMAGE_PNG, imageFile);

    // Create a test template node.
    this.nodeWithFreeMarkerContent = createFreeMarkerNode(companyHome);
    TestTransaction.flagForCommit();
    TestTransaction.end();
    TestTransaction.start();
}
 
Example 18
Source File: ThumbnailServiceImplTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Inbound rule must not be applied on failed thumbnail
 * 
 * see MNT-10914
 */
@Test
public void testRuleExecutionOnFailedThumbnailChild() throws Exception
{
    // create inbound rule on folder
    Map<String, Serializable> params = new HashMap<String, Serializable>(1);
    params.put("aspect-name", ContentModel.ASPECT_GEN_CLASSIFIABLE);
    Rule rule = new Rule();
    rule.setRuleType(RuleType.INBOUND);
    Action action = this.actionService.createAction(AddFeaturesActionExecuter.NAME, params);
    ActionCondition condition = this.actionService.createActionCondition(NoConditionEvaluator.NAME, null);
    action.addActionCondition(condition);
    rule.setAction(action);
    rule.applyToChildren(true);
    services.getRuleService().saveRule(folder, rule);

    TestTransaction.flagForCommit();
    TestTransaction.end();

    final NodeRef corruptNode = transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
    {
        public NodeRef execute() throws Throwable
        {
            return createCorruptedContent(folder);
        }
    });
    // Make sure the source node is correctly set up before we start
    // It should not be renditioned and should not be marked as having any failed thumbnails.
    assertFalse(secureNodeService.hasAspect(corruptNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE));

    // Attempt to perform a thumbnail that we know will fail.
    transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
    {
        public Void execute() throws Throwable
        {
            ThumbnailDefinition thumbnailDef = thumbnailService.getThumbnailRegistry().getThumbnailDefinition("doclib");
            Action createThumbnailAction = ThumbnailHelper.createCreateThumbnailAction(thumbnailDef, services);
            actionService.executeAction(createThumbnailAction, corruptNode, true, true);
            return null;
        }
    });
    // The thumbnail attempt has now failed. But a compensating action should have been scheduled that will mark the
    // source node with a failure aspect. As that is an asynchronous action, we need to wait for that to complete.

    Thread.sleep(3000); // This should be long enough for the compensating action to run.

    final NodeRef failedThumbnailNode = transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
    {
        public NodeRef execute() throws Throwable
        {
            assertTrue("corrupt node should have failed thumbnails aspect", secureNodeService.hasAspect(corruptNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE));

            Map<String, FailedThumbnailInfo> failedThumbnails = thumbnailService.getFailedThumbnails(corruptNode);
            assertEquals("Wrong number of failed thumbnails", 1, failedThumbnails.size());

            assertTrue("Missing QName for failed thumbnail", failedThumbnails.containsKey("doclib"));
            final FailedThumbnailInfo doclibFailureInfo = failedThumbnails.get("doclib");
            assertNotNull("Failure info was null", doclibFailureInfo);

            return doclibFailureInfo.getFailedThumbnailNode();
        }
    });

    assertTrue("Rule must not be executed on document", secureNodeService.hasAspect(corruptNode, ContentModel.ASPECT_GEN_CLASSIFIABLE));
    assertFalse("Rule must not be executed on failed thumbnail", secureNodeService.hasAspect(failedThumbnailNode, ContentModel.ASPECT_GEN_CLASSIFIABLE));
}
 
Example 19
Source File: ExecuteAllRulesActionExecuterTest.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Test execution as per MNT-13055.
 * <p>
 * When we use the ExecuteAllRulesActionExecuter to explicitly (e.g. "manually")
 * execute all the rules on a folder and its subfolders, the rule must correctly
 * recurse into those subfolders. This is a more simple test case than the steps
 * described in the above issue, but is crucial to the more complicated case
 * succeeding.
 */
public void testRuleAppliesToSubfoldersSuccessfully()
{
    final NodeRef rootFolder = this.nodeService.createNode(
            this.rootNodeRef,
            ContentModel.ASSOC_CHILDREN,
            QName.createQName("{test}rootFolderForTest"),
            ContentModel.TYPE_FOLDER).getChildRef();

    final NodeRef folderA = fileFolderService.
            create(rootFolder, "folderA", ContentModel.TYPE_FOLDER).getNodeRef();

    NodeRef fileA = createFile(folderA, "fileA.txt").getNodeRef();

    final NodeRef folderB = fileFolderService.
            create(folderA, "folderB", ContentModel.TYPE_FOLDER).getNodeRef();

    NodeRef fileB = createFile(folderB, "fileB.txt").getNodeRef();

    TestTransaction.flagForCommit();
    TestTransaction.end();

    // On RootFolder create a rule
    transactionHelper.doInTransaction(() -> {
        Rule rule1 = new Rule();
        rule1.setRuleType(RuleType.INBOUND);
        Action action1 = actionService.createAction(AddFeaturesActionExecuter.NAME);
        action1.setParameterValue(AddFeaturesActionExecuter.PARAM_ASPECT_NAME, ContentModel.ASPECT_CLASSIFIABLE);
        rule1.setAction(action1);
        rule1.applyToChildren(true);
        rule1.setExecuteAsynchronously(false);
        ruleService.enableRule(rule1);
        ruleService.saveRule(rootFolder, rule1);
        return null;
    });
    
    // Check the the docs don't have the aspects yet
    transactionHelper.doInTransaction(() -> {
        assertFalse(nodeService.hasAspect(folderA, ContentModel.ASPECT_CLASSIFIABLE));
        assertFalse(nodeService.hasAspect(folderB, ContentModel.ASPECT_CLASSIFIABLE));
        assertFalse(nodeService.hasAspect(fileA, ContentModel.ASPECT_CLASSIFIABLE));
        assertFalse(nodeService.hasAspect(fileB, ContentModel.ASPECT_CLASSIFIABLE));
        return null;
    });
    
    // Execute the action
    transactionHelper.doInTransaction(() -> {
        Map<String, Serializable> actionParams = new HashMap<>();
        actionParams.put(ExecuteAllRulesActionExecuter.PARAM_RUN_ALL_RULES_ON_CHILDREN, true);
        actionParams.put(ExecuteAllRulesActionExecuter.PARAM_EXECUTE_INHERITED_RULES, true);
        Action action = actionService.createAction(ExecuteAllRulesActionExecuter.NAME, actionParams);
        executer.execute(action, rootFolder);
        return null;
    });
    
    transactionHelper.doInTransaction(() -> {
        assertTrue(nodeService.hasAspect(folderA, ContentModel.ASPECT_CLASSIFIABLE));
        assertTrue(nodeService.hasAspect(folderB, ContentModel.ASPECT_CLASSIFIABLE));
        assertTrue(nodeService.hasAspect(fileA, ContentModel.ASPECT_CLASSIFIABLE));
        assertTrue(nodeService.hasAspect(fileB, ContentModel.ASPECT_CLASSIFIABLE));
        return null;
    });
}
 
Example 20
Source File: HibernateBootstrapIntegrationTest.java    From tutorials with MIT License 2 votes vote down vote up
@Test
public void whenProgrammaticTransactionCommit_thenEntityIsInDatabase() {
    assertTrue(TestTransaction.isActive());

    //Save an entity and commit.
    Session session = sessionFactory.getCurrentSession();

    TestEntity newEntity = new TestEntity();
    newEntity.setId(1);
    session.save(newEntity);

    TestEntity searchEntity = session.find(TestEntity.class, 1);

    Assert.assertNotNull(searchEntity);
    assertTrue(TestTransaction.isFlaggedForRollback());

    TestTransaction.flagForCommit();
    TestTransaction.end();

    assertFalse(TestTransaction.isFlaggedForRollback());
    assertFalse(TestTransaction.isActive());

    //Check that the entity is still there in a new transaction,
    //then delete it, but don't commit.
    TestTransaction.start();

    assertTrue(TestTransaction.isFlaggedForRollback());
    assertTrue(TestTransaction.isActive());

    session = sessionFactory.getCurrentSession();
    searchEntity = session.find(TestEntity.class, 1);

    Assert.assertNotNull(searchEntity);

    session.delete(searchEntity);
    session.flush();

    TestTransaction.end();

    assertFalse(TestTransaction.isActive());

    //Check that the entity is still there in a new transaction,
    //then delete it and commit.
    TestTransaction.start();

    session = sessionFactory.getCurrentSession();
    searchEntity = session.find(TestEntity.class, 1);

    Assert.assertNotNull(searchEntity);

    session.delete(searchEntity);
    session.flush();

    assertTrue(TestTransaction.isActive());

    TestTransaction.flagForCommit();
    TestTransaction.end();

    assertFalse(TestTransaction.isActive());

    //Check that the entity is no longer there in a new transaction.
    TestTransaction.start();

    assertTrue(TestTransaction.isActive());

    session = sessionFactory.getCurrentSession();
    searchEntity = session.find(TestEntity.class, 1);

    Assert.assertNull(searchEntity);
}