package cgeo.watchdog; import static org.assertj.core.api.Java6Assertions.assertThat; import cgeo.CGeoTestCase; import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.oc.OCApiConnector; import cgeo.geocaching.connector.trackable.TrackableConnector; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.models.Geocache; import cgeo.geocaching.network.Network; import cgeo.geocaching.test.NotForIntegrationTests; import org.apache.commons.lang3.StringUtils; /** * This test is intended to run regularly on our CI server, to verify the availability of several geocaching websites * and our ability to parse a cache from it. * <p> * You need all the opencaching API keys for this test to run. * </p> * */ public class WatchdogTest extends CGeoTestCase { @NotForIntegrationTests public static void testOpenCachingDE() { downloadOpenCaching("OC1234"); } @NotForIntegrationTests public static void testOpenCachingNL() { downloadOpenCaching("OB1AF6"); } @NotForIntegrationTests public static void testOpenCachingPL() { downloadOpenCaching("OP89HC"); } @NotForIntegrationTests public static void testOpenCachingRO() { downloadOpenCaching("OR011D"); } @NotForIntegrationTests public static void testOpenCacheUK() { downloadOpenCaching("OK0384"); } @NotForIntegrationTests public static void testOpenCachingUS() { downloadOpenCaching("OU0331"); } private static void downloadOpenCaching(final String geocode) { final OCApiConnector connector = (OCApiConnector) ConnectorFactory.getConnector(geocode); assertThat(connector).overridingErrorMessage("Did not find c:geo connector for %s", geocode).isNotNull(); final SearchResult searchResult = connector.searchByGeocode(geocode, null, null); assertThat(searchResult).overridingErrorMessage("Failed to get response from %s", connector.getName()).isNotNull(); assertThat(searchResult.getCount()).overridingErrorMessage("Failed to download %s from %s", geocode, connector.getName()).isGreaterThan(0); final Geocache geocache = searchResult.getFirstCacheFromResult(LoadFlags.LOAD_CACHE_OR_DB); assertThat(geocache).isNotNull(); assert geocache != null; // Eclipse null analysis weakness assertThat(geocache.getGeocode()).isEqualTo(geocode); } private static void checkWebsite(final String connectorName, final String url) { // temporarily disable oc.uk if (connectorName.equalsIgnoreCase("geocaching website opencache.uk")) { return; } final String page = Network.getResponseData(Network.getRequest(url)); assertThat(page).overridingErrorMessage("Failed to get response from " + connectorName).isNotEmpty(); } @NotForIntegrationTests public static void testTrackableWebsites() { for (final TrackableConnector trackableConnector : ConnectorFactory.getTrackableConnectors()) { if (!trackableConnector.equals(ConnectorFactory.UNKNOWN_TRACKABLE_CONNECTOR)) { checkWebsite("trackable website " + trackableConnector.getHost(), trackableConnector.getTestUrl()); if (StringUtils.isNotBlank(trackableConnector.getProxyUrl())) { checkWebsite("trackable website " + trackableConnector.getHost() + " proxy " + trackableConnector.getProxyUrl(), trackableConnector.getProxyUrl()); } } } } @NotForIntegrationTests public static void testGeocachingWebsites() { for (final IConnector connector : ConnectorFactory.getConnectors()) { if (!connector.equals(ConnectorFactory.UNKNOWN_CONNECTOR)) { checkWebsite("geocaching website " + connector.getName(), connector.getTestUrl()); } } } }