Package org.exoplatform.services.jcr.impl.dataflow.persistent

Source Code of org.exoplatform.services.jcr.impl.dataflow.persistent.TestCachedMixins

/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.impl.dataflow.persistent;

import org.exoplatform.services.jcr.JcrImplBaseTest;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
import org.exoplatform.services.jcr.impl.core.PropertyImpl;
import org.exoplatform.services.jcr.impl.core.SessionImpl;

import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;

/**
* Created by The eXo Platform SAS
*
* 09.01.2007
*
* We testing a workspace cache with mixin types. A cache work in shadow, but we try to do usecases
* of possible wrong cache work.
*
* @author <a href="mailto:peter.nedonosko@exoplatform.com.ua">Peter Nedonosko</a>
* @version $Id: TestCachedMixins.java 34801 2009-07-31 15:44:50Z dkatayev $
*/
public class TestCachedMixins extends JcrImplBaseTest
{

   public final String TEST_NODE_NAME = "cache_test";

   protected NodeImpl testNode;

   @Override
   public void setUp() throws Exception
   {
      super.setUp();

      this.testNode = (NodeImpl)session.getRootNode().addNode(TEST_NODE_NAME);

      this.session.save();
   }

   @Override
   protected void tearDown() throws Exception
   {
      this.testNode.remove();
      this.session.save();

      super.tearDown();
   }

   public void testMixinAdd() throws Exception
   {
      this.testNode.addMixin("mix:referenceable");

      this.session.save();

      String uuid = null;

      testNode = (NodeImpl)session.getRootNode().getNode(TEST_NODE_NAME);

      try
      {
         uuid = testNode.getUUID();
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         fail("Node isn't a referenceable, but must");
      }

      try
      {
         uuid = ((NodeImpl)session.getItem("/" + TEST_NODE_NAME)).getUUID();
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         fail("Node isn't a referenceable, but must. Access from Session.geItem()");
      }

      SessionImpl anotherSession = (SessionImpl)repository.login(this.credentials);
      NodeImpl anotherRoot = (NodeImpl)anotherSession.getRootNode();

      try
      {
         NodeImpl aNode = (NodeImpl)anotherRoot.getNode(TEST_NODE_NAME);
         assertEquals("UUIDs must equals", uuid, aNode.getUUID());
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         fail("Node isn't a referenceable, but must");
      }

      try
      {
         NodeImpl aNode = (NodeImpl)anotherSession.getItem("/" + TEST_NODE_NAME);
         assertEquals("UUIDs must equals. Access from Session.geItem()", uuid, aNode.getUUID());
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         fail("Node isn't a referenceable, but must. Access from Session.geItem()");
      }
   }

   public void testMixinAddRemove() throws Exception
   {
      this.testNode.addMixin("mix:referenceable");

      this.session.save();

      this.testNode.removeMixin("mix:referenceable");

      this.session.save();

      testNode = (NodeImpl)session.getRootNode().getNode(TEST_NODE_NAME);

      try
      {
         testNode.getUUID();
         fail("Node must be not referenceable, but it such.");
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         // ok
      }

      try
      {
         ((NodeImpl)session.getItem("/" + TEST_NODE_NAME)).getUUID();
         fail("Node must be not referenceable, but it such. Access from Session.geItem().");
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         // ok
      }

      SessionImpl anotherSession = (SessionImpl)repository.login(this.credentials /*
                                                                                                   * session.getCredentials
                                                                                                   * ()
                                                                                                   */);
      NodeImpl anotherRoot = (NodeImpl)anotherSession.getRootNode();

      NodeImpl aNode = (NodeImpl)anotherRoot.getNode(TEST_NODE_NAME);
      try
      {
         aNode.getUUID();
         fail("Node must be not referenceable, but it such.");
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         // ok
      }

      aNode = (NodeImpl)anotherSession.getItem("/" + TEST_NODE_NAME);
      try
      {
         aNode.getUUID();
         fail("Node must be not referenceable, but it such. Access from Session.geItem().");
      }
      catch (UnsupportedRepositoryOperationException e)
      {
         // ok
      }
   }

   public void testFewMixinAdd() throws Exception
   {

      String[] mixins = new String[]{"mix:referenceable", "mix:lockable"};

      this.testNode.addMixin(mixins[0]);
      this.session.save();

      this.testNode.addMixin(mixins[1]);
      this.session.save();

      this.testNode.lock(true, false);

      checkMixins(mixins, (NodeImpl)session.getRootNode().getNode(TEST_NODE_NAME));
      checkMixins(mixins, (NodeImpl)session.getItem("/" + TEST_NODE_NAME));

      SessionImpl anotherSession = (SessionImpl)repository.login(this.credentials /*
                                                                                                   * session.getCredentials
                                                                                                   * ()
                                                                                                   */);

      checkMixins(mixins, (NodeImpl)anotherSession.getRootNode().getNode(TEST_NODE_NAME));
      checkMixins(mixins, (NodeImpl)anotherSession.getItem("/" + TEST_NODE_NAME));
   }

   public void testFewMixinAdd_ObjectInHand() throws Exception
   {

      String[] mixins = new String[]{"mix:referenceable", "mix:lockable"};

      NodeImpl node1 = (NodeImpl)this.testNode.addNode("node-1");
      this.session.save();

      node1.addMixin(mixins[0]);
      node1.addMixin(mixins[1]);
      this.testNode.save();

      node1.lock(true, false);

      checkMixins(mixins, node1);
   }

   public void testFewMixinAddRemove() throws Exception
   {

      String[] mixins = new String[]{"mix:referenceable", "mix:lockable"};
      String[] finalMixins = new String[]{"mix:lockable"};

      this.testNode.addMixin(mixins[0]);
      this.session.save();

      this.testNode.addMixin(mixins[1]);
      this.session.save();

      this.testNode.lock(true, false);

      this.testNode.removeMixin(mixins[0]);
      this.session.save();

      checkMixins(finalMixins, (NodeImpl)session.getRootNode().getNode(TEST_NODE_NAME));
      checkMixins(finalMixins, (NodeImpl)session.getItem("/" + TEST_NODE_NAME));

      SessionImpl anotherSession = (SessionImpl)repository.login(this.credentials /*
                                                                                                   * session.getCredentials
                                                                                                   * ()
                                                                                                   */);

      checkMixins(finalMixins, (NodeImpl)anotherSession.getRootNode().getNode(TEST_NODE_NAME));
      checkMixins(finalMixins, (NodeImpl)anotherSession.getItem("/" + TEST_NODE_NAME));
   }

   public void testFewMixinAddRemove_ObjectInHand() throws Exception
   {

      String[] mixins = new String[]{"mix:referenceable", "mix:lockable"};
      String[] finalMixins = new String[]{"mix:lockable"};

      NodeImpl node1 = (NodeImpl)this.testNode.addNode("node-1");
      this.session.save();

      node1.addMixin(mixins[0]);
      node1.addMixin(mixins[1]);
      this.testNode.save();

      node1.lock(true, false);

      node1.removeMixin(mixins[0]);
      this.testNode.save();

      checkMixins(finalMixins, node1);
   }

   public void testMixinAddTransient() throws Exception
   {

      String[] mixins = new String[]{"mix:referenceable", "mix:lockable"};
      String[] finalMixins = new String[]{"mix:lockable"};

      NodeImpl node1 = (NodeImpl)this.testNode.addNode("node-1");
      this.session.save();

      node1.addMixin(mixins[0]);
      node1.addMixin(mixins[1]);

      PropertyImpl uuid = (PropertyImpl)node1.getProperty("jcr:uuid");

      try
      {
         NodeImpl sameNode1 = (NodeImpl)session.getNodeByUUID(uuid.getString());
         checkMixins(mixins, sameNode1);

         assertEquals("Nodes must be same", node1, sameNode1);
      }
      catch (RepositoryException e)
      {
         fail("Transient node must be accessible by uuid. " + e);
      }

      try
      {
         NodeImpl sameNode1 = (NodeImpl)session.getItem(node1.getPath());
         checkMixins(mixins, sameNode1);

         assertEquals("Nodes must be same", node1, sameNode1);
      }
      catch (RepositoryException e)
      {
         fail("Transient node must be accessible by path. " + e);
      }

      this.testNode.save();

      node1.removeMixin(mixins[0]);
      this.testNode.save();

      checkMixins(finalMixins, node1);
   }

}
TOP

Related Classes of org.exoplatform.services.jcr.impl.dataflow.persistent.TestCachedMixins

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.