Package org.archive.bdb

Source Code of org.archive.bdb.StoredQueueTest

/*
*  This file is part of the Heritrix web crawler (crawler.archive.org).
*
*  Licensed to the Internet Archive (IA) by one or more individual
*  contributors.
*
*  The IA 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.archive.bdb;

import java.io.File;
import java.util.NoSuchElementException;
import java.util.concurrent.LinkedBlockingQueue;

import org.apache.commons.io.FileUtils;
import org.archive.bdb.BdbModule;
import org.archive.bdb.StoredQueue;
import org.archive.util.TmpDirTestCase;
import org.archive.util.bdbje.EnhancedEnvironment;

import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.EnvironmentConfig;

public class StoredQueueTest extends TmpDirTestCase {
    StoredQueue<String> queue;
    EnhancedEnvironment env;
    Database db;
    File envDir;

    protected void setUp() throws Exception {
        super.setUp();
        this.envDir = new File(getTmpDir(),"StoredMapTest");
        org.archive.util.FileUtils.ensureWriteableDirectory(this.envDir);
        try {
            EnvironmentConfig envConfig = new EnvironmentConfig();
            envConfig.setTransactional(false);
            envConfig.setAllowCreate(true);
            env = new EnhancedEnvironment(envDir,envConfig);
            BdbModule.BdbConfig dbConfig = StoredQueue.databaseConfig();
            db = env.openDatabase(null, "StoredMapTest", dbConfig.toDatabaseConfig());
        } catch (DatabaseException e) {
            throw new RuntimeException(e);
        }
        this.queue = new StoredQueue<String>(db, String.class, env.getClassCatalog());
    }
   
    protected void tearDown() throws Exception {
        db.close();
        env.close();
        FileUtils.deleteDirectory(this.envDir);
        super.tearDown();
    }
   
    public void testAdd() {
        assertEquals("not empty at start",0,queue.size());
        fill(queue, 10);
        assertEquals("unexpected size at full",10,queue.size());
    }

    /**
     * @deprecated Use {@link #fill(Queue,int)} instead
     */
    protected void fill(int size) {
        fill(queue, size);
    }

    protected void fill(java.util.Queue<String> q, int size) {
        for(int i = 1; i <= size; i++) {
            q.add("item-"+i);
        }
    }
   
    protected int drain(java.util.Queue<String> q) {
        int count = 0;
        while(true) {
            try {
                q.remove();
                count++;
            } catch(NoSuchElementException nse) {
                return count;
            }
        }
    }

    public void testClear() {
        fill(queue, 10);
        queue.clear();
        assertEquals("unexpected size after clear",0,queue.size());
    }

    public void testRemove() {
        fill(queue, 10);
        assertEquals("unexpected remove value","item-1",queue.remove());
        assertEquals("improper count of removed items",9,drain(queue));
        try {
            queue.remove();
            fail("expected NoSuchElementException not received");
        } catch (NoSuchElementException nse) {
            // do nothing
        }
    }
   
    public void testOrdering() {
        fill(queue, 10);
        for(int i = 1; i <= 10; i++) {
            assertEquals("unexpected remove value","item-"+i,queue.remove());
        }
    }

    public void testElement() {
        fill(queue, 10);
        assertEquals("unexpected element value","item-1",queue.element());
        assertEquals("unexpected element value",queue.peek(),queue.element());
        queue.clear();
        try {
            queue.element();
            fail("expected NoSuchElementException not received");
        } catch (NoSuchElementException nse) {
            // do nothing
        }
    }
   
    public void testIdentity() {
        fill(queue,10);
        String peek1 = queue.peek();
        String peek2 = queue.peek();
        assertTrue("peeks of same item note identical object",peek1==peek2);
    }

    public void xestTimingsAgainstLinkedBlockingQueue() {
        tryTimings(50000);
        tryTimings(500000);
    }

    private void tryTimings(int i) {
        LinkedBlockingQueue<String> lbq = new LinkedBlockingQueue<String>();
        long start = System.currentTimeMillis();
        fill(lbq,i);
        drain(lbq);
        long finish = System.currentTimeMillis();
        System.out.println("LBQ - "+i+":"+(finish-start));
        start = System.currentTimeMillis();
        fill(queue,i);
        drain(queue);
        finish = System.currentTimeMillis();
        System.out.println("SQ - "+i+":"+(finish-start));
    }
}
TOP

Related Classes of org.archive.bdb.StoredQueueTest

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.