Project

General

Profile

1
package edu.ucsb.nceas.metacat.index;
2

    
3
import static org.junit.Assert.assertTrue;
4

    
5
import edu.ucsb.nceas.metacat.common.SolrServerFactory;
6
import java.io.File;
7
import java.io.FileInputStream;
8
import java.io.IOException;
9
import java.io.InputStream;
10
import java.io.StringWriter;
11
import java.io.Writer;
12
import java.util.ArrayList;
13
import java.util.List;
14

    
15
import org.apache.solr.client.solrj.SolrServer;
16
import org.apache.solr.client.solrj.SolrServerException;
17
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
18
import org.apache.solr.client.solrj.response.QueryResponse;
19
import org.apache.solr.common.params.SolrParams;
20
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
import org.apache.solr.servlet.SolrRequestParsers;
26
import org.dataone.service.types.v1.Identifier;
27
import org.dataone.service.types.v1.SystemMetadata;
28
import org.dataone.service.util.TypeMarshaller;
29
import org.junit.Before;
30
import org.junit.Test;
31

    
32
public class SolrIndexIT  {
33
    
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
    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
    private static final String SYSTEMMETAARCHIVEFILEPATH = "src/test/resources/eml-archive-system-meta-example.xml";
39
    private static final String id = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39098";
40
    private static final String newId = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39099";
41
    
42
	private SolrIndex solrIndex = null;
43
    
44
    
45
    @Before
46
    public void setUp() throws Exception {
47
            solrIndex  = generateSolrIndex();
48
    }
49
    
50
    public static SolrIndex generateSolrIndex() throws Exception {
51
        String springConfigFile = "/index-processor-context.xml";
52
        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
        List<SolrIndex> list = controller.getSolrIndexes();
56
        SolrIndex[] solrIndexesarray = list.toArray(new SolrIndex[list.size()]);
57
        SolrIndex index = solrIndexesarray[0];
58
        //SolrServer solrServer = SolrServerFactory.createSolrServer();
59
        //index.setSolrServer(solrServer);
60
        return index;
61
    }
62
    
63
    /**
64
     * Test building index for an insert.
65
     */
66
    @Test
67
    public void testInsert() throws Exception {
68
    	
69
    	
70
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
71
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAFILEPATH);
72
       InputStream emlInputStream = new FileInputStream(new File(EMLFILEPATH)); 
73
       //List<String> chain = null;
74
       Identifier pid = new Identifier();
75
       pid.setValue(id);
76
       solrIndex.update(pid, systemMetadata, emlInputStream);
77
       String result = doQuery(solrIndex.getSolrServer());
78
       List<String> ids = solrIndex.getSolrIds();
79
       //assertTrue(ids.size() == 1);
80
       boolean foundId = false;
81
       for(String identifiers :ids) {
82
           if(id.equals(identifiers)) {
83
               foundId = true;
84
           }
85
       }
86
       assertTrue(foundId);
87
       assertTrue(result.contains("version1"));
88
    	
89
    }
90
    
91
    /**
92
     * Test building index for an insert.
93
     */
94
    @Test
95
    public void testUpdate() throws Exception {
96
       //InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
97
       SystemMetadata systemMetadata = TypeMarshaller.unmarshalTypeFromFile(SystemMetadata.class, SYSTEMMETAUPDATEFILEPATH);
98
       InputStream emlInputStream = new FileInputStream(new File(EMLUPDATEFILEPATH));  
99
       /*obsoletes.add(id);
100
       obsoletes.add("tao");*/
101
       Identifier pid = new Identifier();
102
       pid.setValue(newId);
103
       solrIndex.update(pid, systemMetadata, emlInputStream);
104
       String result = doQuery(solrIndex.getSolrServer());
105
       assertTrue(result.contains("version1"));
106
       assertTrue(result.contains("version2"));
107
    }
108
    
109
    /**
110
     * Test building index for an insert.
111
     */
112
    @Test
113
    public void testArchive() throws Exception {
114
       SolrIndex solrIndex = generateSolrIndex();
115
       //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
       /*ArrayList<String> obsoletes = new ArrayList<String>();
120
       obsoletes.add(id);
121
       obsoletes.add("tao");*/
122
       Identifier pid = new Identifier();
123
       pid.setValue(newId);
124
       solrIndex.update(pid, systemMetadata, emlInputStream);
125
       String result = doQuery(solrIndex.getSolrServer());
126
       assertTrue(result.contains("version1"));
127
       assertTrue(!result.contains("version2"));
128
    }
129
    
130
    
131
    /*
132
     * Do query
133
     */
134
    public static String doQuery(SolrServer server)
135
                    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
                String result = toXML(solrParams, reponse);
142
                System.out.println("**************************************************************************");
143
                System.out.println("The query result:\n");
144
                System.out.println(result);
145
                System.out.println("**************************************************************************");
146
                return result;
147
    }
148
    
149
    /*
150
     * Transform the query response to the xml format.
151
     */
152
    private static String toXML(SolrParams request, QueryResponse response) {
153
        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
        } catch (Exception e) {
163
            throw new RuntimeException("Unable to convert Solr response into XML", e);
164
        }
165
        return w.toString();
166
    }
167

    
168

    
169
    
170
    
171
}
172

    
(4-4/5)