Package org.wicketstuff.datastores.common

Source Code of org.wicketstuff.datastores.common.SessionQuotaManagingDataStoreTest$NoopDataStore

package org.wicketstuff.datastores.common;

import org.apache.wicket.pageStore.IDataStore;
import org.apache.wicket.util.lang.Bytes;
import org.junit.Assert;
import org.junit.Test;

/**
* Tests for SessionQuotaManagingDataStore
*/
public class SessionQuotaManagingDataStoreTest extends Assert {

  private final IDataStore delegate = new NoopDataStore();

  private final String sessionId = "abcd";
  private final String sessionId2 = "efgh";

  private final int pageId1 = 1;
  private final byte[] pageData1 = new byte[] {1, 2, 3, 4};

  private final int pageId2 = 2;
  private final byte[] pageData2 = new byte[] {5, 6, 7};

  @Test
  public void removeData() throws Exception {
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, Bytes.bytes(100));

    assertEquals(0, manager.pagesPerSession.size());
    manager.removeData(sessionId);
    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId2, pageData2);
    assertEquals(1, manager.pagesPerSession.size());

    manager.storeData(sessionId2, pageId2, pageData2);
    assertEquals(2, manager.pagesPerSession.size());

    manager.removeData(sessionId);
    assertEquals(1, manager.pagesPerSession.size());

    manager.removeData(sessionId2);
    assertEquals(0, manager.pagesPerSession.size());
  }

  @Test
  public void storeDataEnoughSpace() throws Exception {
    Bytes maxSizePerSession = Bytes.bytes(pageData1.length + pageData2.length + 1);
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, maxSizePerSession);

    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    manager.storeData(sessionId2, pageId2, pageData2);
    assertEquals(2, manager.pagesPerSession.size());

    SessionData sessionData = manager.pagesPerSession.get(sessionId);

    assertEquals(1, sessionData.pages.size());

    manager.storeData(sessionId, pageId2, pageData2);
    assertEquals(2, manager.pagesPerSession.size());

    assertEquals(2, sessionData.pages.size());
  }

  @Test
  public void storeDataInsufficientSpaceForTwoPages() throws Exception {
    Bytes maxSizePerSession = Bytes.bytes(pageData1.length);
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, maxSizePerSession);

    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    SessionData sessionData = manager.pagesPerSession.get(sessionId);

    assertEquals(1, sessionData.pages.size());
    assertEquals(pageId1, sessionData.pages.element().pageId);

    manager.storeData(sessionId, pageId2, pageData2);
    assertEquals(1, manager.pagesPerSession.size());

    assertEquals(1, sessionData.pages.size());
    assertEquals(pageId2, sessionData.pages.element().pageId);
  }

  @Test
  public void storeDataInsufficientSpaceForASinglePage() throws Exception {
    Bytes maxSizePerSession = Bytes.bytes(pageData1.length - 1);
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, maxSizePerSession);

    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    SessionData sessionData = manager.pagesPerSession.get(sessionId);

    assertEquals(1, sessionData.pages.size());
    assertEquals(pageId1, sessionData.pages.element().pageId);

    manager.storeData(sessionId, pageId2, pageData2);
    assertEquals(1, manager.pagesPerSession.size());

    assertEquals(1, sessionData.pages.size());
    assertEquals(pageId2, sessionData.pages.element().pageId);
  }

  /**
   * Tests that storing a page with id that already exists will override
   * the older entry
   *
   * @throws Exception
   */
  @Test
  public void storeDataSamePageTwice() throws Exception {
    byte[] pageData1_2 = new byte[] { 1 };
    Bytes maxSizePerSession = Bytes.bytes(pageData1.length + pageData1_2.length + 1);
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, maxSizePerSession);

    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    SessionData sessionData = manager.pagesPerSession.get(sessionId);

    assertEquals(1, sessionData.pages.size());
    assertEquals(pageId1, sessionData.pages.element().pageId);
    assertEquals(pageData1.length, sessionData.size);

    manager.storeData(sessionId, pageId1, pageData1_2);
    assertEquals(1, manager.pagesPerSession.size());

    assertEquals(1, sessionData.pages.size());
    assertEquals(pageId1, sessionData.pages.element().pageId);
    assertEquals(pageData1_2.length, sessionData.size);
  }

  @Test
  public void removePage() throws Exception {
    Bytes maxSizePerSession = Bytes.bytes(pageData1.length + pageData2.length + 1);
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, maxSizePerSession);

    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    SessionData sessionData = manager.pagesPerSession.get(sessionId);
    assertEquals(1, sessionData.pages.size());
    assertEquals(pageData1.length, sessionData.size);

    manager.storeData(sessionId, pageId2, pageData2);
    assertEquals(1, manager.pagesPerSession.size());
    assertEquals(2, sessionData.pages.size());
    assertEquals(pageData1.length + pageData2.length, sessionData.size);

    manager.removeData(sessionId, pageId1);
    assertEquals(1, manager.pagesPerSession.size());
    assertEquals(1, sessionData.pages.size());
    assertEquals(pageData2.length, sessionData.size);

    manager.removeData(sessionId, pageId2);
    // removing the last page should remove the session data too
    assertEquals(0, manager.pagesPerSession.size());
  }

  @Test
  public void destroy() throws Exception {
    Bytes maxSizePerSession = Bytes.bytes(pageData1.length + 1);
    SessionQuotaManagingDataStore manager = new SessionQuotaManagingDataStore(delegate, maxSizePerSession);

    assertEquals(0, manager.pagesPerSession.size());

    manager.storeData(sessionId, pageId1, pageData1);
    assertEquals(1, manager.pagesPerSession.size());

    manager.destroy();

    assertEquals(0, manager.pagesPerSession.size());
  }

  private static class NoopDataStore implements IDataStore {
    @Override
    public byte[] getData(String sessionId, int id) {
      return new byte[0];
    }

    @Override
    public void removeData(String sessionId, int id) {
    }

    @Override
    public void removeData(String sessionId) {
    }

    @Override
    public void storeData(String sessionId, int id, byte[] data) {
    }

    @Override
    public void destroy() {
    }

    @Override
    public boolean isReplicated() {
      return false;
    }

    @Override
    public boolean canBeAsynchronous() {
      return false;
    }
  }
}
TOP

Related Classes of org.wicketstuff.datastores.common.SessionQuotaManagingDataStoreTest$NoopDataStore

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.