Project

General

Profile

1 7547 tao
package edu.ucsb.nceas.metacat.index;
2
3
import static org.junit.Assert.assertTrue;
4
5 7631 tao
import edu.ucsb.nceas.metacat.common.SolrServerFactory;
6 7547 tao
import java.io.File;
7
import java.io.FileInputStream;
8 7592 tao
import java.io.IOException;
9 7547 tao
import java.io.InputStream;
10 7592 tao
import java.io.StringWriter;
11
import java.io.Writer;
12 7603 tao
import java.util.ArrayList;
13 7547 tao
import java.util.List;
14
15 7569 tao
import org.apache.solr.client.solrj.SolrServer;
16
import org.apache.solr.client.solrj.SolrServerException;
17 7592 tao
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
18 7569 tao
import org.apache.solr.client.solrj.response.QueryResponse;
19
import org.apache.solr.common.params.SolrParams;
20 7592 tao
import org.apache.solr.core.CoreContainer;
21
import org.apache.solr.core.SolrCore;
22
import org.apache.solr.request.LocalSolrQueryRequest;
23
import org.apache.solr.response.SolrQueryResponse;
24
import org.apache.solr.response.XMLResponseWriter;
25 7569 tao
import org.apache.solr.servlet.SolrRequestParsers;
26 8343 tao
import org.dataone.service.types.v1.Identifier;
27 7555 tao
import org.dataone.service.types.v1.SystemMetadata;
28
import org.dataone.service.util.TypeMarshaller;
29 7590 leinfelder
import org.junit.Before;
30 7547 tao
import org.junit.Test;
31
32 7582 leinfelder
public class SolrIndexIT  {
33 7547 tao
34
    private static final String SYSTEMMETAFILEPATH = "src/test/resources/eml-system-meta-example.xml";
35
    private static final String EMLFILEPATH = "src/test/resources/eml-example.xml";
36 7578 tao
    private static final String SYSTEMMETAUPDATEFILEPATH = "src/test/resources/eml-updating-system-meta-example.xml";
37
    private static final String EMLUPDATEFILEPATH = "src/test/resources/eml-updating-example.xml";
38 7627 tao
    private static final String SYSTEMMETAARCHIVEFILEPATH = "src/test/resources/eml-archive-system-meta-example.xml";
39 7548 tao
    private static final String id = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39098";
40 7578 tao
    private static final String newId = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39099";
41 7547 tao
42 7591 leinfelder
	private SolrIndex solrIndex = null;
43
44
45 7590 leinfelder
    @Before
46 7591 leinfelder
    public void setUp() throws Exception {
47
            solrIndex  = generateSolrIndex();
48 7590 leinfelder
    }
49 7573 tao
50 8131 tao
    public static SolrIndex generateSolrIndex() throws Exception {
51 8128 tao
        String springConfigFile = "/index-processor-context.xml";
52 7784 tao
        String metacatPropertyFile = null; //in this test, we use the test.properties file rather than metacat.properties file. so set it to be null.
53
        ApplicationController controller = new ApplicationController(springConfigFile, metacatPropertyFile);
54
        controller.initialize();
55 7591 leinfelder
        List<SolrIndex> list = controller.getSolrIndexes();
56
        SolrIndex[] solrIndexesarray = list.toArray(new SolrIndex[list.size()]);
57
        SolrIndex index = solrIndexesarray[0];
58 7593 tao
        //SolrServer solrServer = SolrServerFactory.createSolrServer();
59
        //index.setSolrServer(solrServer);
60 7591 leinfelder
        return index;
61
    }
62
63 7547 tao
    /**
64
     * Test building index for an insert.
65
     */
66
    @Test
67
    public void testInsert() throws Exception {
68 7590 leinfelder
69 7591 leinfelder
70 7555 tao
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
71
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAFILEPATH);
72 7627 tao
       InputStream emlInputStream = new FileInputStream(new File(EMLFILEPATH));
73 8288 tao
       //List<String> chain = null;
74 8343 tao
       Identifier pid = new Identifier();
75
       pid.setValue(id);
76
       solrIndex.update(pid, systemMetadata, emlInputStream);
77 7578 tao
       String result = doQuery(solrIndex.getSolrServer());
78 7604 tao
       List<String> ids = solrIndex.getSolrIds();
79 7627 tao
       //assertTrue(ids.size() == 1);
80
       boolean foundId = false;
81 7604 tao
       for(String identifiers :ids) {
82 7627 tao
           if(id.equals(identifiers)) {
83
               foundId = true;
84
           }
85 7604 tao
       }
86 7627 tao
       assertTrue(foundId);
87 7578 tao
       assertTrue(result.contains("version1"));
88 7591 leinfelder
89 7547 tao
    }
90
91 7548 tao
    /**
92
     * Test building index for an insert.
93
     */
94
    @Test
95 7578 tao
    public void testUpdate() throws Exception {
96
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
97
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAUPDATEFILEPATH);
98 7603 tao
       InputStream emlInputStream = new FileInputStream(new File(EMLUPDATEFILEPATH));
99 8288 tao
       /*obsoletes.add(id);
100
       obsoletes.add("tao");*/
101 8343 tao
       Identifier pid = new Identifier();
102
       pid.setValue(newId);
103
       solrIndex.update(pid, systemMetadata, emlInputStream);
104 7578 tao
       String result = doQuery(solrIndex.getSolrServer());
105 8343 tao
       assertTrue(result.contains("version1"));
106 7578 tao
       assertTrue(result.contains("version2"));
107
    }
108
109
    /**
110
     * Test building index for an insert.
111
     */
112 7592 tao
    @Test
113 7627 tao
    public void testArchive() throws Exception {
114 7573 tao
       SolrIndex solrIndex = generateSolrIndex();
115 7627 tao
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
116
       //System metadata's archive is true.
117
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAARCHIVEFILEPATH);
118
       InputStream emlInputStream = new FileInputStream(new File(EMLUPDATEFILEPATH));
119 8288 tao
       /*ArrayList<String> obsoletes = new ArrayList<String>();
120 7627 tao
       obsoletes.add(id);
121 8288 tao
       obsoletes.add("tao");*/
122 8343 tao
       Identifier pid = new Identifier();
123
       pid.setValue(newId);
124
       solrIndex.update(pid, systemMetadata, emlInputStream);
125 7592 tao
       String result = doQuery(solrIndex.getSolrServer());
126 8288 tao
       assertTrue(result.contains("version1"));
127 8343 tao
       assertTrue(!result.contains("version2"));
128 7592 tao
    }
129 7548 tao
130 7569 tao
131
    /*
132
     * Do query
133
     */
134 7607 tao
    public static String doQuery(SolrServer server)
135 7569 tao
                    throws SolrServerException {
136
                StringBuffer request = new StringBuffer();
137
                request.append("q=" + "*:*");
138
                SolrParams solrParams = SolrRequestParsers.parseQueryString(request
139
                        .toString());
140
                QueryResponse reponse = server.query(solrParams);
141 7592 tao
                String result = toXML(solrParams, reponse);
142 7573 tao
                System.out.println("**************************************************************************");
143
                System.out.println("The query result:\n");
144 7592 tao
                System.out.println(result);
145 7573 tao
                System.out.println("**************************************************************************");
146 7592 tao
                return result;
147 7569 tao
    }
148
149
    /*
150 7592 tao
     * Transform the query response to the xml format.
151 7569 tao
     */
152 7607 tao
    private static String toXML(SolrParams request, QueryResponse response) {
153 7592 tao
        XMLResponseWriter xmlWriter = new XMLResponseWriter();
154
        Writer w = new StringWriter();
155
        SolrQueryResponse sResponse = new SolrQueryResponse();
156
        sResponse.setAllValues(response.getResponse());
157
        try {
158
            SolrCore core = null;
159
            CoreContainer container = SolrServerFactory.getCoreContainer();
160
            core = container.getCore("collection1");
161
            xmlWriter.write(w, new LocalSolrQueryRequest(core, request), sResponse);
162 7658 tao
        } catch (Exception e) {
163 7592 tao
            throw new RuntimeException("Unable to convert Solr response into XML", e);
164 7569 tao
        }
165 7592 tao
        return w.toString();
166
    }
167
168
169 7573 tao
170
171 7547 tao
}