1 package jalview.ws.dbsources;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertTrue;
5 import org.testng.annotations.AfterMethod;
6 import org.testng.annotations.Test;
7 import org.testng.annotations.BeforeMethod;
8 import org.testng.Assert;
9 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
10 import jalview.ws.uimodel.PDBRestRequest;
11 import jalview.ws.uimodel.PDBRestResponse;
13 import java.io.BufferedReader;
14 import java.io.FileReader;
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.Iterator;
18 import java.util.List;
20 import javax.ws.rs.core.MediaType;
22 import org.json.simple.JSONArray;
23 import org.json.simple.JSONObject;
24 import org.json.simple.parser.JSONParser;
25 import org.json.simple.parser.ParseException;
26 import com.sun.jersey.api.client.Client;
27 import com.sun.jersey.api.client.ClientResponse;
28 import com.sun.jersey.api.client.WebResource;
29 import com.sun.jersey.api.client.config.ClientConfig;
30 import com.sun.jersey.api.client.config.DefaultClientConfig;
32 public class PDBRestClientTest
36 public void setUp() throws Exception
41 public void tearDown() throws Exception
46 public void executeRequestTest()
48 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
49 wantedFields.add(PDBDocField.MOLECULE_TYPE);
50 wantedFields.add(PDBDocField.PDB_ID);
51 wantedFields.add(PDBDocField.GENUS);
52 wantedFields.add(PDBDocField.GENE_NAME);
53 wantedFields.add(PDBDocField.TITLE);
55 PDBRestRequest request = new PDBRestRequest();
56 request.setAllowEmptySeq(false);
57 request.setResponseSize(100);
58 request.setFieldToSearchBy("text:");
59 request.setSearchTerm("abc");
60 request.setWantedFields(wantedFields);
62 PDBRestResponse response;
65 response = new PDBRestClient().executeRequest(request);
69 Assert.fail("Couldn't execute webservice call!");
72 assertTrue(response.getNumberOfItemsFound() > 99);
73 assertTrue(response.getSearchSummary() != null);
74 assertTrue(response.getSearchSummary().size() > 99);
78 public void getPDBDocFieldsAsCommaDelimitedStringTest()
80 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
81 wantedFields.add(PDBDocField.MOLECULE_TYPE);
82 wantedFields.add(PDBDocField.PDB_ID);
83 wantedFields.add(PDBDocField.GENUS);
84 wantedFields.add(PDBDocField.GENE_NAME);
85 wantedFields.add(PDBDocField.TITLE);
87 String expectedResult = "molecule_type,pdb_id,genus,gene_name,title";
88 String actualResult = PDBRestClient
89 .getPDBDocFieldsAsCommaDelimitedString(wantedFields);
91 assertEquals("", expectedResult, actualResult);
95 public void parsePDBJsonExceptionStringTest()
97 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
98 wantedFields.add(PDBDocField.MOLECULE_TYPE);
99 wantedFields.add(PDBDocField.PDB_ID);
100 wantedFields.add(PDBDocField.GENUS);
101 wantedFields.add(PDBDocField.GENE_NAME);
102 wantedFields.add(PDBDocField.TITLE);
104 PDBRestRequest request = new PDBRestRequest();
105 request.setAllowEmptySeq(false);
106 request.setResponseSize(100);
107 request.setFieldToSearchBy("text:");
108 request.setSearchTerm("abc");
109 request.setWantedFields(wantedFields);
111 String jsonErrorResponse = "";
114 jsonErrorResponse = readJsonStringFromFile("test/jalview/io/pdb_request_json_error.txt");
115 } catch (IOException e)
120 String parsedErrorResponse = PDBRestClient
121 .parseJsonExceptionString(jsonErrorResponse);
123 String expectedErrorMsg = "\n============= PDB Rest Client RunTime error =============\n"
125 + "Message: org.apache.solr.search.SyntaxError: Cannot parse 'text:abc OR text:go:abc AND molecule_sequence:['' TO *]': Encountered \" \":\" \": \"\" at line 1, column 19.\n"
126 + "query: text:abc OR text:go:abc AND molecule_sequence:['' TO *]\n"
129 assertEquals(expectedErrorMsg, parsedErrorResponse);
132 @Test(expectedExceptions = Exception.class)
133 public void testForExpectedRuntimeException() throws Exception
135 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
136 wantedFields.add(PDBDocField.PDB_ID);
138 PDBRestRequest request = new PDBRestRequest();
139 request.setFieldToSearchBy("text:");
140 request.setSearchTerm("abc OR text:go:abc");
141 request.setWantedFields(wantedFields);
142 new PDBRestClient().executeRequest(request);
146 public void parsePDBJsonResponseTest()
148 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
149 wantedFields.add(PDBDocField.MOLECULE_TYPE);
150 wantedFields.add(PDBDocField.PDB_ID);
151 wantedFields.add(PDBDocField.GENUS);
152 wantedFields.add(PDBDocField.GENE_NAME);
153 wantedFields.add(PDBDocField.TITLE);
155 PDBRestRequest request = new PDBRestRequest();
156 request.setAllowEmptySeq(false);
157 request.setWantedFields(wantedFields);
159 String jsonString = "";
162 jsonString = readJsonStringFromFile("test/jalview/io/pdb_response_json.txt");
163 } catch (IOException e)
167 PDBRestResponse response = PDBRestClient.parsePDBJsonResponse(
168 jsonString, request);
169 assertTrue(response.getSearchSummary() != null);
170 assertTrue(response.getNumberOfItemsFound() == 931);
171 assertTrue(response.getSearchSummary().size() == 14);
175 public void getPDBIdColumIndexTest()
177 List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
178 wantedFields.add(PDBDocField.MOLECULE_TYPE);
179 wantedFields.add(PDBDocField.GENUS);
180 wantedFields.add(PDBDocField.GENE_NAME);
181 wantedFields.add(PDBDocField.TITLE);
182 wantedFields.add(PDBDocField.PDB_ID);
183 assertEquals(5, PDBRestClient.getPDBIdColumIndex(wantedFields, true));
184 assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
188 public void externalServiceIntegrationTest()
190 ClientConfig clientConfig = new DefaultClientConfig();
191 Client client = Client.create(clientConfig);
193 // Build request parameters for the REST Request
194 WebResource webResource = client
195 .resource(PDBRestClient.PDB_SEARCH_ENDPOINT)
196 .queryParam("wt", "json").queryParam("rows", String.valueOf(1))
197 .queryParam("q", "text:abc AND molecule_sequence:['' TO *]");
199 // Execute the REST request
200 ClientResponse clientResponse = webResource.accept(
201 MediaType.APPLICATION_JSON).get(ClientResponse.class);
203 // Get the JSON string from the response object
204 String pdbJsonResponseString = clientResponse.getEntity(String.class);
206 // Check the response status and report exception if one occurs
207 if (clientResponse.getStatus() != 200)
209 Assert.fail("Webservice call failed!!!");
215 JSONParser jsonParser = new JSONParser();
216 JSONObject jsonObj = (JSONObject) jsonParser
217 .parse(pdbJsonResponseString);
218 JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
219 String queryTime = ((JSONObject) jsonObj.get("responseHeader"))
220 .get("QTime").toString();
221 String numFound = pdbResponse.get("numFound").toString();
222 JSONArray docs = (JSONArray) pdbResponse.get("docs");
223 Iterator<JSONObject> docIter = docs.iterator();
225 assertTrue("Couldn't Retrieve 'response' object",
226 pdbResponse != null);
227 assertTrue("Couldn't Retrieve 'QTime' value", queryTime != null);
228 assertTrue("Couldn't Retrieve 'numFound' value", numFound != null);
229 assertTrue("Couldn't Retrieve 'docs' object", docs != null
230 || !docIter.hasNext());
232 JSONObject pdbJsonDoc = docIter.next();
234 for (PDBDocField field : PDBDocField.values())
236 if (field == PDBDocField.ALL)
240 if (pdbJsonDoc.get(field.getCode()) == null)
242 // System.out.println(">>>\t" + field.getCode());
243 assertTrue(field.getClass()
244 + " has been removed from PDB doc Entity",
245 !pdbJsonResponseString.contains(field.getCode()));
248 } catch (ParseException e)
250 Assert.fail(">>> Test failed due to exception while parsing pdb response json !!!");
256 public String readJsonStringFromFile(String filePath) throws IOException
259 BufferedReader br = new BufferedReader(new FileReader(filePath));
262 StringBuilder sb = new StringBuilder();
263 String line = br.readLine();
268 sb.append(System.lineSeparator());
269 line = br.readLine();
271 fileContent = sb.toString();