Package bitronix.tm.utils

Source Code of bitronix.tm.utils.SchedulerTest

/*
* Bitronix Transaction Manager
*
* Copyright (c) 2010, Bitronix Software.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser 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 Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package bitronix.tm.utils;

import junit.framework.TestCase;
import bitronix.tm.resource.common.ResourceBean;
import bitronix.tm.internal.XAResourceHolderState;

import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.List;

/**
*
* @author lorban
*/
public class SchedulerTest extends TestCase {

    public void testNaturalOrdering() throws Exception {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs2 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs3 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs4 = new XAResourceHolderState(null, new MockResourceBean(10));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs2, xarhs2.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs3, xarhs3.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs4, xarhs4.getTwoPcOrderingPosition());

        assertEquals("a Scheduler with 5 object(s) in 3 position(s)", resourceScheduler.toString());

        /* testing natural order priorities */
        assertEquals(5, resourceScheduler.size());
        Set priorities = resourceScheduler.getNaturalOrderPositions();
        assertEquals(3, priorities.size());

        Iterator it = priorities.iterator();
        Object key0 = it.next();
        Object key1 = it.next();
        Object key2 = it.next();
        assertFalse(it.hasNext());

        List list0 = resourceScheduler.getByNaturalOrderForPosition(key0);
        assertEquals(1, list0.size());
        assertTrue(xarhs3 == list0.get(0));

        List list1 = resourceScheduler.getByNaturalOrderForPosition(key1);
        assertEquals(3, list1.size());
        assertTrue(xarhs0 == list1.get(0));
        assertTrue(xarhs1 == list1.get(1));
        assertTrue(xarhs2 == list1.get(2));

        List list2 = resourceScheduler.getByNaturalOrderForPosition(key2);
        assertEquals(1, list2.size());
        assertTrue(xarhs4 == list2.get(0));
    }

    public void testReverseOrdering() throws Exception {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs2 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs3 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs4 = new XAResourceHolderState(null, new MockResourceBean(10));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs2, xarhs2.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs3, xarhs3.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs4, xarhs4.getTwoPcOrderingPosition());

        assertEquals("a Scheduler with 5 object(s) in 3 position(s)", resourceScheduler.toString());

        Set reverseOrderPriorities = resourceScheduler.getReverseOrderPositions();
        assertEquals(3, reverseOrderPriorities.size());

        Iterator itReverse = reverseOrderPriorities.iterator();
        Object key0r = itReverse.next();
        Object key1r = itReverse.next();
        Object key2r = itReverse.next();
        assertFalse(itReverse.hasNext());

        List list0r = resourceScheduler.getByReverseOrderForPosition(key0r);
        assertEquals(1, list0r.size());
        assertTrue(xarhs4 == list0r.get(0));

        List list1r = resourceScheduler.getByReverseOrderForPosition(key1r);
        assertEquals(3, list1r.size());
        assertTrue(xarhs2 == list1r.get(0));
        assertTrue(xarhs1 == list1r.get(1));
        assertTrue(xarhs0 == list1r.get(2));

        List list2r = resourceScheduler.getByReverseOrderForPosition(key2r);
        assertEquals(1, list2r.size());
        assertTrue(xarhs3 == list2r.get(0));
    }

    public void testIterator() {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs2 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs3 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs4 = new XAResourceHolderState(null, new MockResourceBean(10));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs2, xarhs2.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs3, xarhs3.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs4, xarhs4.getTwoPcOrderingPosition());

        assertEquals("a Scheduler with 5 object(s) in 3 position(s)", resourceScheduler.toString());

        Iterator it = resourceScheduler.iterator();
        assertTrue(it.hasNext());
        assertTrue(xarhs3 == it.next());
        assertTrue(xarhs0 == it.next());
        assertTrue(xarhs1 == it.next());
        assertTrue(xarhs2 == it.next());
        assertTrue(xarhs4 == it.next());
        assertFalse(it.hasNext());

        it = resourceScheduler.iterator();
        assertTrue(it.hasNext());
        assertTrue(xarhs3 == it.next());
        it.remove();
        assertTrue(xarhs0 == it.next());
        it.remove();
        assertTrue(xarhs1 == it.next());
        it.remove();
        assertTrue(xarhs2 == it.next());
        it.remove();
        assertTrue(xarhs4 == it.next());
        it.remove();
        assertFalse(it.hasNext());
        assertEquals(0, resourceScheduler.size());
    }

    public void testReverseIterator() {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs2 = new XAResourceHolderState(null, new MockResourceBean(1));
        XAResourceHolderState xarhs3 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs4 = new XAResourceHolderState(null, new MockResourceBean(10));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs2, xarhs2.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs3, xarhs3.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs4, xarhs4.getTwoPcOrderingPosition());

        assertEquals("a Scheduler with 5 object(s) in 3 position(s)", resourceScheduler.toString());

        Iterator it = resourceScheduler.reverseIterator();
        assertTrue(it.hasNext());

        assertTrue(xarhs4 == it.next());
        assertTrue(xarhs0 == it.next());
        assertTrue(xarhs1 == it.next());
        assertTrue(xarhs2 == it.next());
        assertTrue(xarhs3 == it.next());

        assertFalse(it.hasNext());
    }

    public void testRemove() {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(1));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());

        resourceScheduler.remove(xarhs0);
        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());

        Iterator it = resourceScheduler.iterator();
        assertTrue(it.hasNext());
        assertTrue(xarhs0 == it.next());
        it.remove();
        assertTrue(xarhs1 == it.next());
        it.remove();
    }

    public void testReverseRemove() {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(1));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());

        resourceScheduler.remove(xarhs0);
        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());

        Iterator it = resourceScheduler.reverseIterator();
        assertTrue(it.hasNext());
        assertTrue(xarhs1 == it.next());
        it.remove();
        assertTrue(xarhs0 == it.next());
        it.remove();
    }

    public void testHasNext() {
        Scheduler resourceScheduler = new Scheduler();

        XAResourceHolderState xarhs0 = new XAResourceHolderState(null, new MockResourceBean(0));
        XAResourceHolderState xarhs1 = new XAResourceHolderState(null, new MockResourceBean(10));

        resourceScheduler.add(xarhs0, xarhs0.getTwoPcOrderingPosition());
        resourceScheduler.add(xarhs1, xarhs1.getTwoPcOrderingPosition());


        Iterator it = resourceScheduler.iterator();

        for (int i=0; i<10 ;i++) {
            assertTrue(it.hasNext());
        }
        it.next();
        for (int i=0; i<10 ;i++) {
            assertTrue(it.hasNext());
        }
        it.next();
        for (int i=0; i<10 ;i++) {
            assertFalse(it.hasNext());
        }

        try {
            it.next();
            fail("expected NoSuchElementException");
        } catch (NoSuchElementException ex) {
            // expected
        }
    }

    private static int counter = 0;
    private static int incCounter() {
        return counter++;
    }

    private class MockResourceBean extends ResourceBean {

        private int number;
        private int commitOrderingPosition;

        private MockResourceBean(int commitOrderingPosition) {
            this.number = incCounter();
            this.commitOrderingPosition = commitOrderingPosition;
        }


        public int getTwoPcOrderingPosition() {
            return commitOrderingPosition;
        }

        public String toString() {
            return "a MockResourceBean #" + number;
        }
    }

}
TOP

Related Classes of bitronix.tm.utils.SchedulerTest

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.