/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.cache;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import com.enonic.cms.framework.cache.CacheFacade;
import com.enonic.cms.framework.cache.standard.StandardCacheManager;
import com.enonic.cms.core.CacheObjectSettings;
import com.enonic.cms.core.cluster.NopClusterEventPublisher;
import com.enonic.cms.core.config.ConfigProperties;
import com.enonic.cms.core.portal.rendering.PageCacheKey;
import com.enonic.cms.core.portal.rendering.RenderedPageResult;
import com.enonic.cms.core.portal.rendering.RenderedWindowResult;
import com.enonic.cms.core.portal.rendering.WindowCacheKey;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.menuitem.MenuItemKey;
import static org.junit.Assert.*;
public class PageCacheTest
{
private SiteKey siteKey_1 = new SiteKey( 1 );
private SiteKey siteKey_2 = new SiteKey( 2 );
private PageCache pageCache_site_1;
private PageCache pageCache_site_2;
private CacheFacade cacheFacade;
private CacheObjectSettings settings;
@Before
public void before()
{
int maxEntries = 100;
int timeToLiveSeconds = 1000;
final ConfigProperties props = new ConfigProperties();
props.setProperty( "cms.cache.page.memoryCapacity", String.valueOf( maxEntries ) );
props.setProperty( "cms.cache.page.timeToLive", String.valueOf( timeToLiveSeconds ) );
final StandardCacheManager cacheManager = new StandardCacheManager();
cacheManager.setProperties( props );
cacheManager.setClusterEventPublisher( new NopClusterEventPublisher() );
cacheManager.afterPropertiesSet();
cacheFacade = cacheManager.getPageCache();
pageCache_site_1 = new PageCache( siteKey_1, cacheFacade );
pageCache_site_1.setEnabled( true );
pageCache_site_1.setDefaultTimeToLive( timeToLiveSeconds );
pageCache_site_2 = new PageCache( siteKey_2, cacheFacade );
pageCache_site_2.setEnabled( true );
pageCache_site_1.setDefaultTimeToLive( timeToLiveSeconds );
settings = new CacheObjectSettings( "default", timeToLiveSeconds );
}
@Test
public void testCachePage()
{
pageCache_site_1.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_1.cachePage( createPKey( "ABC", "2", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_2.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
assertEquals( 3, cacheFacade.getCount() );
}
@Test
public void testCacheContentObject()
{
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "102", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_2.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
assertEquals( 3, cacheFacade.getCount() );
}
@Test
public void testRemoveEntriesBySite()
{
pageCache_site_1.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "102", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_2.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_2.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
assertEquals( 5, cacheFacade.getCount() );
pageCache_site_1.removeEntriesBySite();
assertEquals( 2, cacheFacade.getCount() );
pageCache_site_2.removeEntriesBySite();
assertEquals( 0, cacheFacade.getCount() );
}
@Test
public void testRemoveContentObjectEntriesBySite()
{
pageCache_site_1.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "102", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_2.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_2.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
assertEquals( 5, cacheFacade.getCount() );
pageCache_site_1.removePortletWindowEntriesBySite();
// expect on page entry on site 1 and the two entries on site 2
assertEquals( 3, cacheFacade.getCount() );
pageCache_site_2.removePortletWindowEntriesBySite();
assertEquals( 2, cacheFacade.getCount() );
}
@Test
public void testRemovePageEntriesBySite()
{
pageCache_site_1.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "102", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_2.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_2.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
assertEquals( 5, cacheFacade.getCount() );
pageCache_site_1.removePageEntriesBySite();
// expect two object entries on site 1 and the two entries on site 2
assertEquals( 4, cacheFacade.getCount() );
pageCache_site_2.removePageEntriesBySite();
assertEquals( 3, cacheFacade.getCount() );
}
@Test
public void testRemoveEntriesByMenuItem()
{
pageCache_site_1.cachePage( createPKey( "ABC", "1", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "1", "102", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_1.cachePage( createPKey( "ABC", "2", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_1.cachePortletWindow( createCOKey( "ABC", "2", "102", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
pageCache_site_2.cachePage( createPKey( "ABC", "11", "q", "a", new Locale( "no" ) ), new RenderedPageResult(), settings );
pageCache_site_2.cachePortletWindow( createCOKey( "ABC", "11", "101", "q", "p", "a", new Locale( "no" ) ),
new RenderedWindowResult(), settings );
assertEquals( 7, cacheFacade.getCount() );
pageCache_site_1.removeEntriesByMenuItem( new MenuItemKey( 1 ) );
assertEquals( 4, cacheFacade.getCount() );
pageCache_site_2.removeEntriesByMenuItem( new MenuItemKey( 11 ) );
assertEquals( 2, cacheFacade.getCount() );
}
private PageCacheKey createPKey( String userKey, String menuItemKey, String queryString, String deviceClass, Locale resolvedLocale )
{
PageCacheKey key = new PageCacheKey();
key.setQueryString( queryString );
key.setDeviceClass( deviceClass );
key.setLocale( resolvedLocale );
key.setUserKey( userKey );
key.setMenuItemKey( new MenuItemKey( menuItemKey ) );
return key;
}
private WindowCacheKey createCOKey( String userKey, String menuItemKey, String contentObjectKey, String queryString,
String paramsString, String deviceClass, Locale resolvedLocale )
{
return new WindowCacheKey( userKey, new MenuItemKey( menuItemKey ), Integer.valueOf( contentObjectKey ), queryString, paramsString,
deviceClass, resolvedLocale );
}
}