org.hyperic.hq.measurement.server.session.AvailabilityCacheTest.java Source code

Java tutorial

Introduction

Here is the source code for org.hyperic.hq.measurement.server.session.AvailabilityCacheTest.java

Source

/**
 * NOTE: This copyright does *not* cover user programs that use HQ
 * program services by normal system calls through the application
 * program interfaces provided as part of the Hyperic Plug-in Development
 * Kit or the Hyperic Client Development Kit - this is merely considered
 * normal use of the program, and does *not* fall under the heading of
 *  "derived work".
 *
 *  Copyright (C) [2009-2010], VMware, Inc.
 *  This file is part of HQ.
 *
 *  HQ is free software; you can redistribute it and/or modify
 *  it under the terms version 2 of the GNU General Public License as
 *  published by the Free Software Foundation. This program 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 General Public License for more
 *  details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 *  USA.
 *
 */

package org.hyperic.hq.measurement.server.session;

import junit.framework.TestCase;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class AvailabilityCacheTest extends TestCase {

    private static Log _log = LogFactory.getLog(AvailabilityCacheTest.class);
    private AvailabilityCache cache;

    public void setUp() throws Exception {
        super.setUp();
        this.cache = new AvailabilityCache();
    }

    public void tearDown() throws Exception {
        super.tearDown();
        cache.clear();
    }

    public void testCacheTransactionThreads() throws Exception {
        Thread thread = new Thread() {
            public void run() {
                int id = 0;
                cache.beginTran();
                DataPoint dp = new DataPoint(id, 1.0, 1);
                cache.put(new Integer(id), dp);
                dp = new DataPoint(id, 1.0, 2);
                cache.put(new Integer(id), dp);
                cache.commitTran();
            }
        };
        thread.start();

        int id = 0;
        cache.beginTran();
        DataPoint dp = new DataPoint(id, 1.0, 3);
        cache.put(new Integer(id), dp);
        dp = new DataPoint(id, 1.0, 4);
        cache.put(new Integer(id), dp);
        cache.rollbackTran();

        // don't want to hang the build
        thread.join(5000);
        if (thread.isAlive()) {
            thread.interrupt();
            assertTrue(false);
            return;
        }

        DataPoint curr = (DataPoint) cache.get(new Integer(id));
        assertTrue(2 == curr.getTimestamp());
    }

    public void testCacheTransaction2() throws Exception {
        int id = 0;
        DataPoint first = new DataPoint(id, 0.0, 0);
        cache.put(new Integer(id), first);

        cache.beginTran();
        DataPoint dp = new DataPoint(id, 1.0, 1);
        cache.put(new Integer(id), dp);
        dp = new DataPoint(id, 1.0, 2);
        cache.put(new Integer(id), dp);
        cache.commitTran();

        DataPoint curr = (DataPoint) cache.get(new Integer(id));
        assertTrue(dp.getTimestamp() == curr.getTimestamp());
    }

    public void testCacheTransaction1() throws Exception {
        int id = 0;
        DataPoint first = new DataPoint(id, 0.0, 0);
        cache.put(new Integer(id), first);

        cache.beginTran();
        DataPoint dp = new DataPoint(id, 1.0, 1);
        cache.put(new Integer(id), dp);
        dp = new DataPoint(id, 1.0, 2);
        cache.put(new Integer(id), dp);
        cache.rollbackTran();

        DataPoint curr = (DataPoint) cache.get(new Integer(id));
        assertTrue(first.getValue() == curr.getValue());
    }

    public void testCacheTransaction0() throws Exception {
        cache.beginTran();
        int id = 0;
        DataPoint dp = new DataPoint(id, 0, 0);
        cache.put(new Integer(id), dp);
        cache.rollbackTran();

        assertTrue(cache.get(new Integer(id)) == null);
    }

    /**
     * Test a full load of the cache.
     * @throws Exception If any error occurs within the test.
     */
    public void testLoadFull() throws Exception {
        int i = 0;
        long start = System.currentTimeMillis();
        DataPoint dp = new DataPoint(0, 0, 0);
        for (; i < AvailabilityCache.CACHESIZE; i++) {
            cache.put(new Integer(i), dp);
        }
        _log.info("Filled " + i + " items in " + (System.currentTimeMillis() - start) + " ms.");

        assertEquals(i, cache.getSize());
    }

    /**
     * Test a full load of the cache plus a single update to ensure the
     * cache does not grow.
     * @throws Exception If any error occurs within the test.
     */
    public void testLoadFullOneUpdate() throws Exception {
        int i = 0;
        DataPoint dp = new DataPoint(0, 0, 0);
        for (; i < AvailabilityCache.CACHESIZE; i++) {
            cache.put(new Integer(i), dp);
        }

        cache.put(new Integer(0), dp);

        assertEquals(i, cache.getSize());
    }

    /**
     * Test updates to the cache.
     * @throws Exception If any error occurs within the test.
     */
    public void testUpdates() throws Exception {
        DataPoint dp = new DataPoint(0, 0, 0);
        int i = 0;
        for (; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                cache.put(new Integer(i), dp);
            }
        }

        assertEquals(i, cache.getSize());
    }

    /**
     * Test getting Objects from the cache which may or may not exist.
     * @throws Exception If any error occurs within the test.
     */
    public void testGet() throws Exception {
        DataPoint dp = new DataPoint(0, 0, System.currentTimeMillis());
        cache.put(new Integer(0), dp);

        // Test null case
        assertNull(cache.get(new Integer(1)));

        // Test the object we just extracted from the cache.
        DataPoint cachedDp = cache.get(new Integer(0));
        assertEquals(dp.getTimestamp(), cachedDp.getTimestamp());
    }

    /**
     * Test getting an object from the cache which does not exist so the
     * default state is returned.
     * @throws Exception If any error occurs within the test.
     */
    public void testGetDefaultState() throws Exception {
        DataPoint defaultState = new DataPoint(0, 0, System.currentTimeMillis());

        // Test the default was returned
        DataPoint cachedDp = cache.get(new Integer(0), defaultState);
        assertEquals(cachedDp.getTimestamp(), defaultState.getTimestamp());

        // Test the point was actually added to the cache.
        DataPoint dp = cache.get(new Integer(0));
        assertEquals(dp.getTimestamp(), defaultState.getTimestamp());
    }

    /**
     * Test growing the maximum size of the cache.   This test should be
     * executed last since it modifies the size of the cache.
     * @throws Exception If any error occurs within the test.
     */
    public void testCacheIncrement() throws Exception {
        int i = 0;
        DataPoint dp = new DataPoint(0, 0, 0);
        for (; i < AvailabilityCache.CACHESIZE * 2; i++) {
            cache.put(new Integer(i), dp);
        }

        assertEquals(i, cache.getSize());
    }
}