/* * 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.access.AccessControlList; import org.exoplatform.services.jcr.dataflow.persistent.WorkspaceStorageCache; import org.exoplatform.services.jcr.datamodel.InternalQName; import org.exoplatform.services.jcr.datamodel.NodeData; import org.exoplatform.services.jcr.datamodel.QPath; import org.exoplatform.services.jcr.impl.Constants; import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData; import org.exoplatform.services.jcr.util.IdGenerator; import java.util.ArrayList; import java.util.List; /** * Created by The eXo Platform SAS. * * @author <a href="mailto:peter.nedonosko@exoplatform.com.ua">Peter Nedonosko</a> * @version $Id: TestLinkedWorkspaceStorageCacheMetrics.java 34801 2009-07-31 15:44:50Z dkatayev $ */ public class TestLinkedWorkspaceStorageCacheMetrics extends JcrImplBaseTest { /** * Test live time. * * @throws Exception */ public void testLiveTime() throws Exception { final int cacheSize = 500; final int liveTime = 10; // sec WorkspaceStorageCache cache = new LinkedWorkspaceStorageCacheImpl("testLiveTime_cache", true, cacheSize, liveTime, 60 * 1000, 30 * 1000, false, true, 0, true); NodeData parent = new TransientNodeData(QPath.parse("[]:1[]parent:1"), IdGenerator.generate(), 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 1, IdGenerator.generate(), new AccessControlList()); cache.put(parent); List<NodeData> childs = new ArrayList<NodeData>(); for (int i = 0; i < 200; i++) { NodeData child = TransientNodeData.createNodeData(parent, InternalQName.parse("[]node " + i + " :1"), Constants.NT_UNSTRUCTURED); cache.put(child); childs.add(child); } Thread.sleep(liveTime * 1000); assertEquals("Wrong size", 201 * 2, cache.getSize()); // but nothing can be getted assertNull("Should be uncached (time expired)", cache.get(parent.getIdentifier())); assertNull("Should be uncached (time expired)", cache.get(childs.get(10).getIdentifier())); // items were removed on get assertEquals("Wrong size", (201 - 2) * 2, cache.getSize()); } /** * Test if expired scheduler works. * * Test instance runs after 5 second. (*) <br> * * @throws Exception */ public void testExpiredScheduler() throws Exception { final int cacheSize = 500; final int liveTime = 30; // sec WorkspaceStorageCache cache = new LinkedWorkspaceStorageCacheImpl("testExpiredScheduler_cache", true, cacheSize, liveTime, liveTime * 1000 + 10000, 30 * 1000, false, true, 0, true); // (*) NodeData parent = new TransientNodeData(QPath.parse("[]:1[]parent:1"), IdGenerator.generate(), 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 1, IdGenerator.generate(), new AccessControlList()); cache.put(parent); List<NodeData> childs = new ArrayList<NodeData>(); for (int i = 0; i < 200; i++) { NodeData child = TransientNodeData.createNodeData(parent, InternalQName.parse("[]node " + i + " :1"), Constants.NT_UNSTRUCTURED); cache.put(child); childs.add(child); } assertEquals("Wrong size", 201 * 2, cache.getSize()); Thread.sleep(liveTime * 1000); // wait items expired // but nothing can be getted assertNull("Should be uncached (time expired)", cache.get(parent.getIdentifier())); assertNull("Should be uncached (time expired)", cache.get(childs.get(10).getIdentifier())); Thread.sleep((liveTime + 10) * 1000); // wait expired items will be removed by scheduler (*) // items were removed on get assertEquals("Wrong size", 0, cache.getSize()); } /** * Test size limit. * * @throws Exception */ public void testSize() throws Exception { final int cacheSize = 500; WorkspaceStorageCache cache = new LinkedWorkspaceStorageCacheImpl("testSize_cache", true, cacheSize, 120, 60 * 1000, 30 * 1000, false, true, 0, true); NodeData parent = new TransientNodeData(QPath.parse("[]:1[]parent:1"), IdGenerator.generate(), 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 1, IdGenerator.generate(), new AccessControlList()); for (int i = 0; i < 200; i++) { NodeData child = TransientNodeData.createNodeData(parent, InternalQName.parse("[]node " + i + " :1"), Constants.NT_UNSTRUCTURED); cache.put(child); } assertEquals("Wrong size", 200 * 2, cache.getSize()); for (int i = 0; i < 100; i++) { NodeData child = TransientNodeData.createNodeData(parent, InternalQName.parse("[]node A " + i + " :1"), Constants.NT_UNSTRUCTURED); cache.put(child); } // nodes cached (200 + 100) * 2, but limit is cacheSize assertEquals("Wrong size", cacheSize, cache.getSize()); } }