This is an automated email from the ASF dual-hosted git repository.

ocket8888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 216933c  fixed TR to use default watcher URL when parameter is not 
present (#4857)
216933c is described below

commit 216933c910991d30bb134e0f5f107d0e71aa274c
Author: mattjackson220 <[email protected]>
AuthorDate: Wed Aug 12 15:35:41 2020 -0600

    fixed TR to use default watcher URL when parameter is not present (#4857)
    
    * fixed TR to use default watcher URL when parameter is not present
    
    * update per comments and added integration test
    
    * added license header
    
    * added line at bottom of file
    
    * updated per comments
    
    * updated per comments
    
    * updated per comment
    
    * updated per comment
    
    * fixed test
---
 .../core/ds/LetsEncryptDnsChallengeWatcher.java    |   1 +
 .../traffic_router/core/ds/SteeringWatcher.java    |   1 +
 .../core/loc/AbstractServiceUpdater.java           |   5 +
 .../core/loc/FederationsWatcher.java               |   1 +
 .../core/util/AbstractResourceWatcher.java         |   2 +-
 .../core/util/AbstractResourceWatcherTest.java     | 128 +++++++++++++++++++++
 6 files changed, 137 insertions(+), 1 deletion(-)

diff --git 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
index 3595e32..d568085 100644
--- 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
+++ 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
@@ -46,6 +46,7 @@ public class LetsEncryptDnsChallengeWatcher extends 
AbstractResourceWatcher {
 
     public LetsEncryptDnsChallengeWatcher() {
         setDatabaseUrl(DEFAULT_LE_DNS_CHALLENGE_URL);
+        setDefaultDatabaseUrl(DEFAULT_LE_DNS_CHALLENGE_URL);
     }
 
     @Override
diff --git 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java
 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java
index 3036f80..72c415d 100644
--- 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java
+++ 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java
@@ -26,6 +26,7 @@ public class SteeringWatcher extends AbstractResourceWatcher {
 
        public SteeringWatcher() {
                setDatabaseUrl(DEFAULT_STEERING_DATA_URL);
+               setDefaultDatabaseUrl(DEFAULT_STEERING_DATA_URL);
        }
 
        @Override
diff --git 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
index 5d081de..52f3228 100644
--- 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
+++ 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
@@ -45,6 +45,7 @@ public abstract class AbstractServiceUpdater {
        private static final Logger LOGGER = 
Logger.getLogger(AbstractServiceUpdater.class);
 
        protected String dataBaseURL;
+       protected String defaultDatabaseURL;
        protected String databaseName;
        protected ScheduledExecutorService executorService;
        private long pollingInterval;
@@ -220,6 +221,10 @@ public abstract class AbstractServiceUpdater {
                this.dataBaseURL = url;
        }
 
+       public void setDefaultDatabaseUrl(final String url) {
+               this.defaultDatabaseURL = url;
+       }
+
        /**
         * Sets executorService.
         *
diff --git 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/FederationsWatcher.java
 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/FederationsWatcher.java
index 5a6facf..77a7fb4 100644
--- 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/FederationsWatcher.java
+++ 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/FederationsWatcher.java
@@ -25,6 +25,7 @@ public class FederationsWatcher extends 
AbstractResourceWatcher {
     public static final String DEFAULT_FEDERATION_DATA_URL = 
"https://${toHostname}/api/2.0/federations/all";;
     public FederationsWatcher() {
         setDatabaseUrl(DEFAULT_FEDERATION_DATA_URL);
+        setDefaultDatabaseUrl(DEFAULT_FEDERATION_DATA_URL);
     }
 
     @Override
diff --git 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
index a9c634d..7e54a23 100644
--- 
a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
+++ 
b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
@@ -57,7 +57,7 @@ public abstract class AbstractResourceWatcher extends 
AbstractServiceUpdater {
                }
 
                final WatcherConfig watcherConfig = new 
WatcherConfig(getWatcherConfigPrefix(), config, trafficOpsUtils);
-               final String resourceUrl = (watcherConfig.getUrl() != null && 
!watcherConfig.getUrl().isEmpty()) ? watcherConfig.getUrl() : getDataBaseURL();
+               final String resourceUrl = (watcherConfig.getUrl() != null && 
!watcherConfig.getUrl().isEmpty()) ? watcherConfig.getUrl() : 
defaultDatabaseURL;
 
                final long pollingInterval = (watcherConfig.getInterval() > 0) 
? watcherConfig.getInterval() : getPollingInterval();
                final int configTimeout = (watcherConfig.getTimeout() > 0) ? 
watcherConfig.getTimeout() : this.timeout;
diff --git 
a/traffic_router/core/src/test/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java
 
b/traffic_router/core/src/test/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java
new file mode 100644
index 0000000..4b76ea2
--- /dev/null
+++ 
b/traffic_router/core/src/test/java/com/comcast/cdn/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java
@@ -0,0 +1,128 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.comcast.cdn.traffic_control.traffic_router.core.util;
+
+import com.comcast.cdn.traffic_control.traffic_router.core.TestBase;
+import com.comcast.cdn.traffic_control.traffic_router.core.ds.SteeringRegistry;
+import com.comcast.cdn.traffic_control.traffic_router.core.ds.SteeringWatcher;
+import com.comcast.cdn.traffic_control.traffic_router.core.edge.CacheRegister;
+import 
com.comcast.cdn.traffic_control.traffic_router.core.loc.FederationsWatcher;
+import 
com.comcast.cdn.traffic_control.traffic_router.core.router.TrafficRouter;
+import 
com.comcast.cdn.traffic_control.traffic_router.core.router.TrafficRouterManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.springframework.context.ApplicationContext;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import static 
com.comcast.cdn.traffic_control.traffic_router.core.ds.SteeringWatcher.DEFAULT_STEERING_DATA_URL;
+import static 
com.comcast.cdn.traffic_control.traffic_router.core.loc.FederationsWatcher.DEFAULT_FEDERATION_DATA_URL;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.assertNull;
+
+
+@Category(IntegrationTest.class)
+public class AbstractResourceWatcherTest {
+
+    private static final Logger LOGGER = 
Logger.getLogger(com.comcast.cdn.traffic_control.traffic_router.core.util.AbstractResourceWatcherTest.class);
+
+    private FederationsWatcher federationsWatcher;
+    private SteeringWatcher steeringWatcher;
+    private TrafficRouterManager trafficRouterManager;
+    private SteeringRegistry steeringRegistry;
+    private static ApplicationContext context;
+    private String oldFedUrl;
+
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        assertThat("Copy core/src/main/conf/traffic_monitor.properties to 
core/src/test/conf and set 'traffic_monitor.bootstrap.hosts' to a real traffic 
monitor", Files.exists(Paths.get(TestBase.monitorPropertiesPath)), 
equalTo(true));
+        context = TestBase.getContext();
+    }
+
+    @Before
+    public void setUp() throws InterruptedException {
+        federationsWatcher = (FederationsWatcher) 
context.getBean("federationsWatcher");
+        steeringWatcher = (SteeringWatcher) context.getBean("steeringWatcher");
+        steeringRegistry = (SteeringRegistry) 
context.getBean("steeringRegistry");
+        trafficRouterManager = (TrafficRouterManager) 
context.getBean("trafficRouterManager");
+        trafficRouterManager.getTrafficRouter().setApplicationContext(context);
+
+        TrafficRouter trafficRouter = trafficRouterManager.getTrafficRouter();
+        CacheRegister cacheRegister = trafficRouter.getCacheRegister();
+        JsonNode config = cacheRegister.getConfig();
+
+        if(config.get(federationsWatcher.getWatcherConfigPrefix() + 
".polling.url") != null) {
+            oldFedUrl = config.get(federationsWatcher.getWatcherConfigPrefix() 
+ ".polling.url").asText();
+            config = ((ObjectNode) 
config).remove(federationsWatcher.getWatcherConfigPrefix() + ".polling.url");
+            federationsWatcher.trafficOpsUtils.setConfig(config);
+            federationsWatcher.configure(config);
+        }
+
+        while (!federationsWatcher.isLoaded()) {
+            LOGGER.info("Waiting for a valid federations database before 
proceeding");
+            Thread.sleep(1000);
+        }
+
+        while (!steeringWatcher.isLoaded()) {
+            LOGGER.info("Waiting for a valid steering database before 
proceeding");
+            Thread.sleep(1000);
+        }
+
+    }
+
+    @After
+    public void tearDown() {
+        TrafficRouter trafficRouter = trafficRouterManager.getTrafficRouter();
+        CacheRegister cacheRegister = trafficRouter.getCacheRegister();
+        JsonNode config = cacheRegister.getConfig();
+        if (oldFedUrl != null && !oldFedUrl.isEmpty()) {
+            config = ((ObjectNode) 
config).put(federationsWatcher.getWatcherConfigPrefix() + ".polling.url", 
oldFedUrl);
+        } else {
+            config = ((ObjectNode) 
config).remove(federationsWatcher.getWatcherConfigPrefix() + ".polling.url");
+        }
+        federationsWatcher.trafficOpsUtils.setConfig(config);
+        federationsWatcher.configure(config);
+        assertThat(federationsWatcher.getDataBaseURL(), 
endsWith(DEFAULT_FEDERATION_DATA_URL.split("api")[1]));
+    }
+
+    @Test
+    public void testWatchers() {
+        TrafficRouter trafficRouter = trafficRouterManager.getTrafficRouter();
+        CacheRegister cacheRegister = trafficRouter.getCacheRegister();
+        JsonNode config = cacheRegister.getConfig();
+        assertNull(config.get(federationsWatcher.getWatcherConfigPrefix() + 
".polling.url"));
+        assertThat(federationsWatcher.getDataBaseURL(), 
endsWith(DEFAULT_FEDERATION_DATA_URL.split("api")[1]));
+        assertThat(steeringWatcher.getDataBaseURL(), 
endsWith(DEFAULT_STEERING_DATA_URL.split("api")[1]));
+
+        String newFedsUrl = 
"https://${toHostname}/api/3.0/notAFederationsEndpoint";;
+        config = ((ObjectNode) 
config).put(federationsWatcher.getWatcherConfigPrefix() + ".polling.url", 
newFedsUrl);
+        federationsWatcher.trafficOpsUtils.setConfig(config);
+        federationsWatcher.configure(config);
+        config = cacheRegister.getConfig();
+        assertThat(config.get(federationsWatcher.getWatcherConfigPrefix() + 
".polling.url").asText(), endsWith("api/3.0/notAFederationsEndpoint"));
+        assertThat(federationsWatcher.getDataBaseURL(), 
endsWith("api/3.0/notAFederationsEndpoint"));
+    }
+}

Reply via email to