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"));
+ }
+}