Package eu.balticdiversity.feedreaders

Source Code of eu.balticdiversity.feedreaders.DocumentQueueServiceDAOTest$SavedDocument

package eu.balticdiversity.feedreaders;


import fi.luomus.commons.db.connectivity.ConnectionDescription;
import fi.luomus.commons.db.connectivity.PreparedStatementStoringAndClosingTransactionConnection;
import fi.luomus.commons.db.connectivity.TransactionConnection;

import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class DocumentQueueServiceDAOTest {
    private ConnectionDescription description;
    private DocumentQueueServiceDAO documentQueueServiceDAO;


    @Before
    public void setUp() throws Exception {
        Properties props = new Properties();
        // store in classpath, not included in repository obviously
        InputStream stream = this.getClass().getClassLoader().getResourceAsStream("test_db_settings.properties");
        if (stream == null) {
            throw new RuntimeException("test db settings not available");
        }
        props.load(stream);
        String driver = props.getProperty("driver");
        String username = props.getProperty("username");
        String password = props.getProperty("password");
        String url = props.getProperty("url");
        description = new ConnectionDescription(driver, url, username, password);
        documentQueueServiceDAO = new DocumentQueueServiceDAO(description);
        resetDbs();
    }

    @After
    public void tearDown() throws SQLException {
        documentQueueServiceDAO.close();
        documentQueueServiceDAO = null;
    }

    @Test
    public void testSaveQueue() throws Exception {
        assertEquals(0, documentQueueServiceDAO.getDocumentQueue(50).size());


        addToQueue("http://www.mock.com", "id", 1);
        List<DBFeedEntry> documentQueue = documentQueueServiceDAO.getDocumentQueue(50);
        assertEquals(1, documentQueue.size());
        assertEquals(new URI("http://www.mock.com"), documentQueue.get(0).getUri());
        assertEquals(1, documentQueue.get(0).getSourceID());

        addToQueue("http://www.foo.com", "id", 2);
        documentQueue = documentQueueServiceDAO.getDocumentQueue(50);
        assertEquals(2, documentQueue.size());
        assertEquals(new URI("http://www.foo.com"), documentQueue.get(1).getUri());
        assertEquals(2, documentQueue.get(1).getSourceID());
    }

    @Test
    public void testQueueLimit() throws Exception {
        assertEquals(0, documentQueueServiceDAO.getDocumentQueue(5).size());

        addToQueue("http://www.mock.com/1", "id", 1);
        addToQueue("http://www.mock.com/2", "id", 2);
        addToQueue("http://www.mock.com/3", "id", 3);

        assertEquals(3, documentQueueServiceDAO.getDocumentQueue(50).size());
        assertEquals(3, documentQueueServiceDAO.getDocumentQueue(3).size());
        assertEquals(1, documentQueueServiceDAO.getDocumentQueue(1).size());
        assertEquals(1, documentQueueServiceDAO.getDocumentQueue(1).get(0).getSourceID());
        assertEquals(2, documentQueueServiceDAO.getDocumentQueue(2).get(1).getSourceID());
    }

    @Test
    public void saveSingle() throws Exception {
        assertEquals(0, getFiles().size());
        addToQueue("http://www.mock.com", "id", 5);
        List<DBFeedEntry> entries = documentQueueServiceDAO.getDocumentQueue(50);
        assertEquals(1, entries.size());
        documentQueueServiceDAO.saveDocumentAndRemoveFromQueue("doc", entries.get(0));

        List<SavedDocument> files = getFiles();
        assertEquals(1, files.size());
        assertEquals("id", files.get(0).getDocumentId());
        assertEquals("doc", files.get(0).getDocument());
        assertEquals(5, files.get(0).getSourceId());
        assertEquals(0, documentQueueServiceDAO.getDocumentQueue(50).size());
    }

    @Test
    public void saveSingleMultipleQueues() throws Exception {
        for (int i = 0; i < 5; i++) {
            addToQueue("http://www.mock.com", "id", 5);
            Thread.sleep(100);
        }
        List<DBFeedEntry> queue = documentQueueServiceDAO.getDocumentQueue(50);
        assertEquals(5, queue.size());
        DBFeedEntry entry = queue.get(2);
        assertNotNull(entry.getId());
        documentQueueServiceDAO.saveDocumentAndRemoveFromQueue("doc", entry);

        queue = documentQueueServiceDAO.getDocumentQueue(50);
        assertEquals(4, queue.size());
        for (DBFeedEntry remainingEntry : queue) {
            if (remainingEntry.getId().equals(entry.getId())) {
                fail("wrong entry deleted");
            }
        }
    }

    @Test
    public void testSaveNotInQueue() throws Exception {
        assertEquals(0, getFiles().size());
        try {
            DBFeedEntry entry = getDBFeedEntry("http://www.mock.com", "id", 5);
            entry.setId(1);
            documentQueueServiceDAO.saveDocumentAndRemoveFromQueue("doc", entry);
            fail("no error");
        } catch (Exception e) {
            assertEquals(0, getFiles().size());
        }
    }

    @Test
    public void testLastReadSequence() throws Exception {
        DAO dao = new DAO(description, 10);
        assertNull(dao.getLastReadSequence());
        dao.setLastReadSequence(10L);
        assertEquals(Long.valueOf(10), dao.getLastReadSequence());
        dao.setLastReadSequence(20L);
        assertEquals(Long.valueOf(20), dao.getLastReadSequence());
    }

    private DBFeedEntry getDBFeedEntry(String uri, String documentId, int sourceId) throws URISyntaxException {
        DBFeedEntry dbFeedEntry = new DBFeedEntry();
        dbFeedEntry.setDocumentId(documentId);
        dbFeedEntry.setSourceID(sourceId);
        dbFeedEntry.setUri(new URI(uri));

        return dbFeedEntry;
    }

    private void addToQueue(String uri, String docId, int sourceId) throws Exception {
        DAO dao;
        dao = new DAO(description, sourceId);
        FeedEntry feedEntry = new FeedEntry();
        feedEntry.setDocumentId(docId);
        feedEntry.setSourceID(sourceId);
        feedEntry.setUri(new URI(uri));
        dao.addDocumentToQueue(feedEntry);
        dao.close();
    }

    private List<SavedDocument> getFiles() throws Exception {
        TransactionConnection con = new PreparedStatementStoringAndClosingTransactionConnection(description);
        PreparedStatement query = con.prepareStatement("SELECT * FROM ETL.XMLFile");
        ResultSet rs = query.executeQuery();

        List<SavedDocument> savedDocuments = new ArrayList<SavedDocument>();
        while (rs.next()) {
            savedDocuments.add(new SavedDocument(rs.getString("DocumentID"),
                    rs.getString("XMLData"), rs.getInt("SourceFK")));
        }

        query.close();
        rs.close();
        con.release();

        return savedDocuments;
    }

    private void resetDbs() throws SQLException {
        TransactionConnection con = new PreparedStatementStoringAndClosingTransactionConnection(description);
        con.prepareStatement("DELETE FROM ETL.XMLQueue").execute();
        con.prepareStatement("DELETE FROM ETL.XMLFile").execute();
        con.prepareStatement("DELETE FROM ETL.XMLSequence").execute();
        con.release();
    }

    private class SavedDocument {
        private final String documentId;
        private final String document;
        private final int sourceId;

        private SavedDocument(String documentId, String document, int sourceId) {
            this.documentId = documentId;
            this.document = document;
            this.sourceId = sourceId;
        }

        private String getDocumentId() {
            return documentId;
        }

        private String getDocument() {
            return document;
        }

        private int getSourceId() {
            return sourceId;
        }
    }

}
TOP

Related Classes of eu.balticdiversity.feedreaders.DocumentQueueServiceDAOTest$SavedDocument

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.