View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.search.backend.smo.internal;
20  
21  import java.io.IOException;
22  import java.time.Instant;
23  import java.util.ArrayList;
24  import java.util.List;
25  import java.util.concurrent.atomic.AtomicInteger;
26  
27  import org.apache.maven.search.api.MAVEN;
28  import org.apache.maven.search.api.Record;
29  import org.apache.maven.search.api.SearchRequest;
30  import org.apache.maven.search.api.request.BooleanQuery;
31  import org.apache.maven.search.api.request.FieldQuery;
32  import org.apache.maven.search.api.request.Query;
33  import org.apache.maven.search.backend.smo.SmoSearchBackend;
34  import org.apache.maven.search.backend.smo.SmoSearchResponse;
35  import org.junit.Test;
36  
37  public abstract class SmoSearchBackendTestSupport {
38      protected final SmoSearchBackend backend;
39  
40      public SmoSearchBackendTestSupport(SmoSearchBackend backend) {
41          this.backend = backend;
42      }
43  
44      protected void dumpSingle(AtomicInteger counter, List<Record> page) {
45          for (Record record : page) {
46              StringBuilder sb = new StringBuilder();
47              sb.append(record.getValue(MAVEN.GROUP_ID))
48                      .append(":")
49                      .append(record.getValue(MAVEN.ARTIFACT_ID))
50                      .append(":")
51                      .append(record.getValue(MAVEN.VERSION));
52              if (record.hasField(MAVEN.PACKAGING)) {
53                  if (record.hasField(MAVEN.CLASSIFIER)) {
54                      sb.append(":").append(record.getValue(MAVEN.CLASSIFIER));
55                  }
56                  sb.append(":").append(record.getValue(MAVEN.PACKAGING));
57              }
58  
59              List<String> remarks = new ArrayList<>();
60              if (record.getLastUpdated() != null) {
61                  remarks.add("lastUpdate=" + Instant.ofEpochMilli(record.getLastUpdated()));
62              }
63              if (record.hasField(MAVEN.VERSION_COUNT)) {
64                  remarks.add("versionCount=" + record.getValue(MAVEN.VERSION_COUNT));
65              }
66              if (record.hasField(MAVEN.HAS_SOURCE)) {
67                  remarks.add("hasSource=" + record.getValue(MAVEN.HAS_SOURCE));
68              }
69              if (record.hasField(MAVEN.HAS_JAVADOC)) {
70                  remarks.add("hasJavadoc=" + record.getValue(MAVEN.HAS_JAVADOC));
71              }
72  
73              System.out.print(counter.incrementAndGet() + ". " + sb);
74              if (!remarks.isEmpty()) {
75                  System.out.print(" " + remarks);
76              }
77              System.out.println();
78          }
79      }
80  
81      protected void dumpPage(SmoSearchResponse searchResponse) throws IOException {
82          AtomicInteger counter = new AtomicInteger(0);
83          System.out.println(
84                  "QUERY: " + searchResponse.getSearchRequest().getQuery().toString());
85          System.out.println("URL: " + searchResponse.getSearchUri());
86          dumpSingle(counter, searchResponse.getPage());
87          while (searchResponse.getTotalHits() > searchResponse.getCurrentHits()) {
88              System.out.println("NEXT PAGE (size "
89                      + searchResponse.getSearchRequest().getPaging().getPageSize() + ")");
90              searchResponse = backend.search(searchResponse.getSearchRequest().nextPage());
91              dumpSingle(counter, searchResponse.getPage());
92              if (counter.get() > 50) {
93                  System.out.println("ABORTED TO NOT SPAM");
94                  break; // do not spam the SMO service
95              }
96          }
97          System.out.println();
98      }
99  
100     @Test
101     public void smoke() throws IOException {
102         SearchRequest searchRequest = new SearchRequest(Query.query("smoke"));
103         SmoSearchResponse searchResponse = backend.search(searchRequest);
104         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
105         dumpPage(searchResponse);
106     }
107 
108     @Test
109     public void g() throws IOException {
110         SearchRequest searchRequest =
111                 new SearchRequest(FieldQuery.fieldQuery(MAVEN.GROUP_ID, "org.apache.maven.plugins"));
112         SmoSearchResponse searchResponse = backend.search(searchRequest);
113         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
114         dumpPage(searchResponse);
115     }
116 
117     @Test
118     public void ga() throws IOException {
119         SearchRequest searchRequest = new SearchRequest(BooleanQuery.and(
120                 FieldQuery.fieldQuery(MAVEN.GROUP_ID, "org.apache.maven.plugins"),
121                 FieldQuery.fieldQuery(MAVEN.ARTIFACT_ID, "maven-clean-plugin")));
122         SmoSearchResponse searchResponse = backend.search(searchRequest);
123         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
124         dumpPage(searchResponse);
125     }
126 
127     @Test
128     public void gav() throws IOException {
129         SearchRequest searchRequest = new SearchRequest(BooleanQuery.and(
130                 FieldQuery.fieldQuery(MAVEN.GROUP_ID, "org.apache.maven.plugins"),
131                 FieldQuery.fieldQuery(MAVEN.ARTIFACT_ID, "maven-clean-plugin"),
132                 FieldQuery.fieldQuery(MAVEN.VERSION, "3.1.0")));
133         SmoSearchResponse searchResponse = backend.search(searchRequest);
134         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
135         dumpPage(searchResponse);
136     }
137 
138     @Test
139     public void sha1() throws IOException {
140         SearchRequest searchRequest =
141                 new SearchRequest(FieldQuery.fieldQuery(MAVEN.SHA1, "8ac9e16d933b6fb43bc7f576336b8f4d7eb5ba12"));
142         SmoSearchResponse searchResponse = backend.search(searchRequest);
143         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
144         dumpPage(searchResponse);
145     }
146 
147     @Test
148     public void cn() throws IOException {
149         SearchRequest searchRequest =
150                 new SearchRequest(FieldQuery.fieldQuery(MAVEN.CLASS_NAME, "MavenRepositorySystem"));
151         SmoSearchResponse searchResponse = backend.search(searchRequest);
152         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
153         dumpPage(searchResponse);
154     }
155 
156     @Test
157     public void fqcn() throws IOException {
158         SearchRequest searchRequest = new SearchRequest(
159                 FieldQuery.fieldQuery(MAVEN.FQ_CLASS_NAME, "org.apache.maven.bridge.MavenRepositorySystem"));
160         SmoSearchResponse searchResponse = backend.search(searchRequest);
161         System.out.println("TOTAL HITS: " + searchResponse.getTotalHits());
162         dumpPage(searchResponse);
163     }
164 }