Project

General

Profile

1 7547 tao
package edu.ucsb.nceas.metacat.index;
2
3
import static org.junit.Assert.assertTrue;
4
5
import java.io.File;
6
import java.io.FileInputStream;
7 7592 tao
import java.io.IOException;
8 7547 tao
import java.io.InputStream;
9 7592 tao
import java.io.StringWriter;
10
import java.io.Writer;
11 7547 tao
import java.util.List;
12
13 7569 tao
import org.apache.solr.client.solrj.SolrServer;
14
import org.apache.solr.client.solrj.SolrServerException;
15 7592 tao
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
16 7569 tao
import org.apache.solr.client.solrj.response.QueryResponse;
17
import org.apache.solr.common.params.SolrParams;
18 7592 tao
import org.apache.solr.core.CoreContainer;
19
import org.apache.solr.core.SolrCore;
20
import org.apache.solr.request.LocalSolrQueryRequest;
21
import org.apache.solr.response.SolrQueryResponse;
22
import org.apache.solr.response.XMLResponseWriter;
23 7569 tao
import org.apache.solr.servlet.SolrRequestParsers;
24 7555 tao
import org.dataone.service.types.v1.SystemMetadata;
25
import org.dataone.service.util.TypeMarshaller;
26 7590 leinfelder
import org.junit.Before;
27 7547 tao
import org.junit.Test;
28
29 7582 leinfelder
public class SolrIndexIT  {
30 7547 tao
31
    private static final String SYSTEMMETAFILEPATH = "src/test/resources/eml-system-meta-example.xml";
32
    private static final String EMLFILEPATH = "src/test/resources/eml-example.xml";
33 7578 tao
    private static final String SYSTEMMETAUPDATEFILEPATH = "src/test/resources/eml-updating-system-meta-example.xml";
34
    private static final String EMLUPDATEFILEPATH = "src/test/resources/eml-updating-example.xml";
35 7548 tao
    private static final String id = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39098";
36 7578 tao
    private static final String newId = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39099";
37 7547 tao
38 7591 leinfelder
	private SolrIndex solrIndex = null;
39
40
41 7590 leinfelder
    @Before
42 7591 leinfelder
    public void setUp() throws Exception {
43
            solrIndex  = generateSolrIndex();
44 7590 leinfelder
    }
45 7573 tao
46 7591 leinfelder
    private SolrIndex generateSolrIndex() throws Exception {
47
        ApplicationController controller = new ApplicationController();
48
        List<SolrIndex> list = controller.getSolrIndexes();
49
        SolrIndex[] solrIndexesarray = list.toArray(new SolrIndex[list.size()]);
50
        SolrIndex index = solrIndexesarray[0];
51
        SolrServer solrServer = SolrServerFactory.createSolrServer();
52
        index.setSolrServer(solrServer);
53
        return index;
54
    }
55
56 7547 tao
    /**
57
     * Test building index for an insert.
58
     */
59
    @Test
60
    public void testInsert() throws Exception {
61 7590 leinfelder
62 7591 leinfelder
63 7555 tao
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
64
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAFILEPATH);
65
       InputStream emlInputStream = new FileInputStream(new File(EMLFILEPATH));
66
       solrIndex.insert(id, systemMetadata, emlInputStream);
67 7578 tao
       String result = doQuery(solrIndex.getSolrServer());
68
       assertTrue(result.contains("version1"));
69 7591 leinfelder
70 7547 tao
    }
71
72 7548 tao
    /**
73
     * Test building index for an insert.
74
     */
75
    @Test
76 7578 tao
    public void testUpdate() throws Exception {
77
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
78
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAUPDATEFILEPATH);
79
       InputStream emlInputStream = new FileInputStream(new File(EMLUPDATEFILEPATH));
80
       solrIndex.update(newId, systemMetadata, emlInputStream);
81
       String result = doQuery(solrIndex.getSolrServer());
82
       assertTrue(result.contains("version2"));
83
    }
84
85
    /**
86
     * Test building index for an insert.
87
     */
88 7592 tao
    @Test
89
    public void testDelete() throws Exception {
90 7573 tao
       SolrIndex solrIndex = generateSolrIndex();
91 7592 tao
       solrIndex.remove(newId);
92
       String result = doQuery(solrIndex.getSolrServer());
93
       assertTrue(!result.contains("version1"));
94
       assertTrue(!result.contains("version2"));
95
    }
96 7548 tao
97 7569 tao
98
    /*
99
     * Do query
100
     */
101 7578 tao
    private String doQuery(SolrServer server)
102 7569 tao
                    throws SolrServerException {
103
                StringBuffer request = new StringBuffer();
104
                request.append("q=" + "*:*");
105
                SolrParams solrParams = SolrRequestParsers.parseQueryString(request
106
                        .toString());
107
                QueryResponse reponse = server.query(solrParams);
108 7592 tao
                String result = toXML(solrParams, reponse);
109 7573 tao
                System.out.println("**************************************************************************");
110
                System.out.println("The query result:\n");
111 7592 tao
                System.out.println(result);
112 7573 tao
                System.out.println("**************************************************************************");
113 7592 tao
                return result;
114 7569 tao
    }
115
116
    /*
117 7592 tao
     * Transform the query response to the xml format.
118 7569 tao
     */
119 7592 tao
    private String toXML(SolrParams request, QueryResponse response) {
120
        XMLResponseWriter xmlWriter = new XMLResponseWriter();
121
        Writer w = new StringWriter();
122
        SolrQueryResponse sResponse = new SolrQueryResponse();
123
        sResponse.setAllValues(response.getResponse());
124
        try {
125
            SolrCore core = null;
126
            CoreContainer container = SolrServerFactory.getCoreContainer();
127
            core = container.getCore("collection1");
128
            xmlWriter.write(w, new LocalSolrQueryRequest(core, request), sResponse);
129
        } catch (IOException e) {
130
            throw new RuntimeException("Unable to convert Solr response into XML", e);
131 7569 tao
        }
132 7592 tao
        return w.toString();
133
    }
134
135
136 7573 tao
137
138 7547 tao
}