Package org.hornetq.tests.integration.paging

Source Code of org.hornetq.tests.integration.paging.PagingCounterTest

/*
* Copyright 2010 Red Hat, Inc.
* Red Hat licenses this file to you under the Apache License, version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*    http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.  See the License for the specific language governing
* permissions and limitations under the License.
*/

package org.hornetq.tests.integration.paging;

import javax.transaction.xa.Xid;

import org.hornetq.api.core.SimpleString;
import org.hornetq.api.core.client.ClientSession;
import org.hornetq.api.core.client.ClientSessionFactory;
import org.hornetq.api.core.client.ServerLocator;
import org.hornetq.core.paging.cursor.PageSubscription;
import org.hornetq.core.paging.cursor.PageSubscriptionCounter;
import org.hornetq.core.paging.cursor.impl.PageSubscriptionCounterImpl;
import org.hornetq.core.persistence.StorageManager;
import org.hornetq.core.persistence.impl.journal.OperationContextImpl;
import org.hornetq.core.server.HornetQServer;
import org.hornetq.core.server.Queue;
import org.hornetq.core.settings.impl.AddressSettings;
import org.hornetq.core.transaction.Transaction;
import org.hornetq.core.transaction.impl.TransactionImpl;
import org.hornetq.tests.util.ServiceTestBase;

/**
* A PagingCounterTest
*
* @author clebertsuconic
*
*
*/
public class PagingCounterTest extends ServiceTestBase
{

   // Constants -----------------------------------------------------

   // Attributes ----------------------------------------------------

   private HornetQServer server;

   private ServerLocator sl;

   // Static --------------------------------------------------------

   // Constructors --------------------------------------------------

   // Public --------------------------------------------------------

   public void testCounter() throws Exception
   {
      ClientSessionFactory sf = sl.createSessionFactory();
      ClientSession session = sf.createSession();

      try
      {
         Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false);

         PageSubscriptionCounter counter = locateCounter(queue);

         StorageManager storage = server.getStorageManager();

         Transaction tx = new TransactionImpl(server.getStorageManager());

         counter.increment(tx, 1);

         assertEquals(0, counter.getValue());

         tx.commit();

         storage.waitOnOperations();

         assertEquals(1, counter.getValue());
      }
      finally
      {
         sf.close();
         session.close();
      }
   }

   public void testCleanupCounter() throws Exception
   {
      ClientSessionFactory sf = sl.createSessionFactory();
      ClientSession session = sf.createSession();

      try
      {
         Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false);

         PageSubscriptionCounter counter = locateCounter(queue);

         StorageManager storage = server.getStorageManager();

         Transaction tx = new TransactionImpl(server.getStorageManager());

         for (int i = 0 ; i < 2100; i++)
         {

            counter.increment(tx, 1);
  
            if (i % 200 == 0)
            {
               tx.commit();
     
               storage.waitOnOperations();

               assertEquals(i + 1, counter.getValue());
              
               tx = new TransactionImpl(server.getStorageManager());
            }
         }

         tx.commit();
        
         storage.waitOnOperations();
        
         assertEquals(2100, counter.getValue());
        
         server.stop();

         server = newHornetQServer();

         server.start();

         queue = server.locateQueue(new SimpleString("A1"));

         assertNotNull(queue);

         counter = locateCounter(queue);

         assertEquals(2100, counter.getValue());

      }
      finally
      {
         sf.close();
         session.close();
      }
   }


   public void testCleanupCounterNonPersistent() throws Exception
   {
      ClientSessionFactory sf = sl.createSessionFactory();
      ClientSession session = sf.createSession();

      try
      {
         Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false);

         PageSubscriptionCounter counter = locateCounter(queue);
        
         ((PageSubscriptionCounterImpl)counter).setPersistent(false);

         StorageManager storage = server.getStorageManager();

         Transaction tx = new TransactionImpl(server.getStorageManager());

         for (int i = 0 ; i < 2100; i++)
         {

            counter.increment(tx, 1);
  
            if (i % 200 == 0)
            {
               tx.commit();
     
               storage.waitOnOperations();

               assertEquals(i + 1, counter.getValue());
              
               tx = new TransactionImpl(server.getStorageManager());
            }
         }

         tx.commit();
        
         storage.waitOnOperations();
        
         assertEquals(2100, counter.getValue());
        
         server.stop();

         server = newHornetQServer();

         server.start();

         queue = server.locateQueue(new SimpleString("A1"));

         assertNotNull(queue);

         counter = locateCounter(queue);

         assertEquals(0, counter.getValue());

      }
      finally
      {
         sf.close();
         session.close();
      }
   }

   public void testRestartCounter() throws Exception
   {
      Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false);

      PageSubscriptionCounter counter = locateCounter(queue);

      StorageManager storage = server.getStorageManager();

      Transaction tx = new TransactionImpl(server.getStorageManager());

      counter.increment(tx, 1);

      assertEquals(0, counter.getValue());

      tx.commit();

      storage.waitOnOperations();

      assertEquals(1, counter.getValue());

      sl.close();

      server.stop();

      server = newHornetQServer();

      server.start();

      queue = server.locateQueue(new SimpleString("A1"));

      assertNotNull(queue);

      counter = locateCounter(queue);

      assertEquals(1, counter.getValue());

   }

   /**
    * @param queue
    * @return
    * @throws Exception
    */
   private PageSubscriptionCounter locateCounter(Queue queue) throws Exception
   {
      PageSubscription subscription = server.getPagingManager()
                                            .getPageStore(new SimpleString("A1"))
                                            .getCursorProvier()
                                            .getSubscription(queue.getID());

      PageSubscriptionCounter counter = subscription.getCounter();
      return counter;
   }

   public void testPrepareCounter() throws Exception
   {
      Xid xid = newXID();

      Queue queue = server.createQueue(new SimpleString("A1"), new SimpleString("A1"), null, true, false);

      PageSubscriptionCounter counter = locateCounter(queue);

      StorageManager storage = server.getStorageManager();

      Transaction tx = new TransactionImpl(xid, server.getStorageManager(), 300);

      for (int i = 0 ; i < 2000; i++)
      {
         counter.increment(tx, 1);
      }

      assertEquals(0, counter.getValue());

      tx.prepare();

      storage.waitOnOperations();

      assertEquals(0, counter.getValue());
     
      server.stop();
     
      server = newHornetQServer();
     
      server.start();
     
      storage = server.getStorageManager();
     
      queue = server.locateQueue(new SimpleString("A1"));
     
      assertNotNull(queue);
     
      counter = locateCounter(queue);
     
      tx = server.getResourceManager().removeTransaction(xid);
     
      assertNotNull(tx);
     
      assertEquals(0, counter.getValue());
     
      tx.commit(false);
     
      storage.waitOnOperations();
     
      assertEquals(2000, counter.getValue());
     
     
   }

   // Package protected ---------------------------------------------

   // Protected -----------------------------------------------------

   protected void setUp() throws Exception
   {
      super.setUp();

      server = newHornetQServer();

      server.start();

      sl = createInVMNonHALocator();
   }

   protected void tearDown() throws Exception
   {
      sl.close();

      server.stop();

      super.tearDown();
   }

   // Private -------------------------------------------------------

   private HornetQServer newHornetQServer()
   {
     
      OperationContextImpl.clearContext();

      HornetQServer server = super.createServer(true, false);

      AddressSettings defaultSetting = new AddressSettings();
      defaultSetting.setPageSizeBytes(10 * 1024);
      defaultSetting.setMaxSizeBytes(20 * 1024);

      server.getAddressSettingsRepository().addMatch("#", defaultSetting);

      return server;
   }

   // Inner classes -------------------------------------------------

}
TOP

Related Classes of org.hornetq.tests.integration.paging.PagingCounterTest

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.