⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdb4ostorage.java

📁 lucene2.2.0版本
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**  * Copyright 2004 The Apache Software Foundation  *  * Licensed 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.apache.lucene.gdata.storage.db4o;import java.io.File;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicBoolean;import junit.framework.TestCase;import org.apache.lucene.gdata.data.GDataAccount;import org.apache.lucene.gdata.data.ServerBaseEntry;import org.apache.lucene.gdata.data.ServerBaseFeed;import org.apache.lucene.gdata.server.registry.ProvidedServiceConfig;import org.apache.lucene.gdata.storage.ModificationConflictException;import org.apache.lucene.gdata.storage.Storage;import org.apache.lucene.gdata.storage.StorageController;import org.apache.lucene.gdata.storage.StorageException;import org.apache.lucene.gdata.storage.lucenestorage.StorageEntryWrapper.StorageOperation;import org.apache.lucene.gdata.utils.MultiThreadEntryStub;import org.apache.lucene.gdata.utils.Visitor;import com.db4o.ObjectContainer;import com.db4o.ObjectSet;import com.db4o.query.Query;import com.google.gdata.data.BaseEntry;import com.google.gdata.data.BaseFeed;import com.google.gdata.data.DateTime;import com.google.gdata.data.PlainTextConstruct;public class TestDb4oStorage extends TestCase {    private static final String FEEDID = "myFeed";    private static final String ACCOUNTNAME = "myAccount";    private static final String SERVICENAME = "myService";    DB4oController controller;    static volatile boolean fail = false;    protected void setUp() throws Exception {        this.controller = new DB4oController();        this.controller.setContainerPoolSize(2);        this.controller.setFilePath("test.yap");        this.controller.setRunAsServer(true);        this.controller.setPassword("");        this.controller.setUser("");        this.controller.setUseWeakReferences(true);        this.controller.setPort(0);        this.controller.initialize();        this.controller.visiteInitialize();        clearDB();    }    protected void tearDown() throws Exception {        clearDB();        fail = false;        this.controller.getStorage().close();        this.controller.visiteDestroy();        this.controller.destroy();        File dbFile = new File("test.yap");        assertTrue(dbFile.delete());    }    private void clearDB() {        ObjectContainer container = this.controller.releaseContainer();        ObjectSet set = container.get(new Object());        for (Object object : set) {            container.delete(object);        }        container.ext().purge();        container.close();    }    ObjectContainer getContainer() {        return this.controller.releaseContainer();    }       /*     * Test method for     * 'org.apache.lucene.gdata.storage.db4o.DB4oStorage.storeEntry(ServerBaseEntry)'     */    @SuppressWarnings("unchecked")    public void testStoreEntry() throws StorageException {        Storage storage = this.controller.getStorage();        try {            ServerBaseEntry e = createServerBaseEntry();            storage.storeEntry(e);            fail("excption exp. for feed for the entry");        } catch (StorageException e) {            //        }        try {            storage.storeEntry(null);            fail("entry is null");        } catch (StorageException e) {            //        }        ServerBaseEntry exEntry = new ServerBaseEntry();        exEntry.setFeedId("some");        try {            storage.storeEntry(exEntry);            fail("entry id is null");        } catch (StorageException e) {            //        }        exEntry.setId("someID");        exEntry.setFeedId(null);        try {            storage.storeEntry(exEntry);            fail("feed id is null");        } catch (StorageException e) {            //        }        storeServerBaseFeed();        ServerBaseEntry e = createServerBaseEntry();        storage.storeEntry(e);        ServerBaseEntry e1 = createServerBaseEntry();        storage.storeEntry(e1);        storage = this.controller.getStorage();        Query query = getContainer().query();        query.constrain(BaseEntry.class);        query.descend("id").constrain(e.getId());        ObjectSet resultSet = query.execute();        assertEquals(1, resultSet.size());        BaseEntry storedEntry = (BaseEntry) resultSet.next();        assertEquals("1", storedEntry.getVersionId());        ServerBaseFeed bFeed = new ServerBaseFeed();        bFeed.setItemsPerPage(25);        bFeed.setId(FEEDID);        bFeed.setStartIndex(1);        bFeed.setServiceType(SERVICENAME);        BaseFeed<BaseFeed, BaseEntry> feed = storage.getFeed(bFeed);        assertEquals(2, feed.getEntries().size());        assertEquals(e.getId(), feed.getEntries().get(1).getId()); // last post        // ->        // previously        // created        assertEquals(e1.getId(), feed.getEntries().get(0).getId()); // first pos        // -> last        // created        assertEquals(feed.getUpdated(), feed.getEntries().get(0).getUpdated());    }    /*     * Test method for     * 'org.apache.lucene.gdata.storage.db4o.DB4oStorage.deleteEntry(ServerBaseEntry)'     */    public void testDeleteEntry() throws StorageException, InterruptedException {        ObjectContainer container = getContainer();        storeServerBaseFeed();        Storage storage = this.controller.getStorage();                try {            storage.deleteEntry(null);            fail("entry is null");        } catch (StorageException e) {            //        }        ServerBaseEntry exEntry = new ServerBaseEntry();        exEntry.setFeedId("some");        try {            storage.deleteEntry(exEntry);            fail("entry id is null");        } catch (StorageException e) {            //        }        exEntry.setId("someID");        exEntry.setFeedId(null);        try {            storage.storeEntry(exEntry);            fail("feed id is null");        } catch (StorageException e) {            //        }                        ServerBaseEntry e = createServerBaseEntry();        storage.storeEntry(e);        ServerBaseEntry e1 = createServerBaseEntry();        storage.storeEntry(e1);        storage.deleteEntry(e);        container.close();        container = getContainer();        Query query = container.query();        query.constrain(BaseEntry.class);        query.descend("id").constrain(e.getId());        ObjectSet resultSet = query.execute();        assertEquals(0, resultSet.size());        // #### test version matching        ServerBaseEntry eVersion = createServerBaseEntry();        storage.storeEntry(eVersion);        eVersion.setVersion(33);        try {            storage.deleteEntry(eVersion);            fail("version does not match");        } catch (Exception ex) {            // TODO: handle exception        }        try {            storage.deleteEntry(null);            fail("entry id is null");        } catch (Exception ex) {            // TODO: handle exception        }        storage = this.controller.getStorage();        storage.deleteEntry(e1);        container.close();        container = getContainer();        query = container.query();        query.constrain(BaseEntry.class);        query.descend("id").constrain(e1.getId());        resultSet = query.execute();        assertEquals(0, resultSet.size());        // ############ test concurrency        // ############ test concurrency        Object monitor = new Object();        AtomicBoolean reached = new AtomicBoolean(false);        MultiThreadEntryStub concuEntry = new MultiThreadEntryStub();        concuEntry.setId(System.currentTimeMillis() + "");        ProvidedServiceConfig conf = new ProvidedServiceConfig();        conf.setName(SERVICENAME);        concuEntry.setServiceConfig(conf);        concuEntry.setUpdated(DateTime.now());        concuEntry.setFeedId(FEEDID);        storage = this.controller.getStorage();        storage.storeEntry(concuEntry);        storage.close();        concuEntry.acceptGetVersionVisitor(getMonitorVisitor(monitor, reached));        Thread t1 = getDelThread(controller, concuEntry, false);        Thread t2 = getDelThread(controller, concuEntry, true);        t1.start();        /*         * Wait active -- not nice but works fine here wait until thread parked         */        while (true) {            synchronized (monitor) {                if (reached.get())                    break;                monitor.wait(10);            }        }        t2.start();        t2.join(800);        /*         * Wait active -- not nice but works fine here wake up the waiting         * thread         */        while (true) {            synchronized (monitor) {                if (!reached.get())                    break;                monitor.notifyAll();            }        }        t1.join(300);        if (fail)            fail("thread failed -- see stacktrace");        container.close();    }    private Visitor getMonitorVisitor(final Object monitor,            final AtomicBoolean reached) {        /*         * The executing thread stops at a defined position while holding the         * semaphore inside the storageImpl         */        return new Visitor() {            public void execute(Object[] o) {                synchronized (monitor) {                    try {                        reached.set(true);                        monitor.wait();                        reached.set(false);                    } catch (InterruptedException e) {                        //                                       }                }            }        };    }    private Thread getDelThread(StorageController c, ServerBaseEntry e,            boolean conflictExpected) {        Thread t1 = new Thread(new Runner(c, e, conflictExpected,                StorageOperation.DELETE));        t1.setPriority(Thread.MAX_PRIORITY);        return t1;    }    private Thread getUpdThread(StorageController c, ServerBaseEntry e,            boolean conflictExpected) {        Thread t1 = new Thread(new Runner(c, e, conflictExpected,                StorageOperation.UPDATE));        t1.setPriority(Thread.MAX_PRIORITY);        return t1;    }    /*     * Test method for     * 'org.apache.lucene.gdata.storage.db4o.DB4oStorage.updateEntry(ServerBaseEntry)'     */    public void testUpdateEntry() throws StorageException, InterruptedException {        storeServerBaseFeed();        Storage storage = this.controller.getStorage();        ServerBaseEntry exEntry = new ServerBaseEntry();        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -