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

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


The following commit(s) were added to refs/heads/master by this push:
     new feb7dd11f KNOX-3269 - Support APIKEY and CLIENTID as services without 
URLs or params in topology generation (#1167)
feb7dd11f is described below

commit feb7dd11f12e24e0038d8e4b3a9094223c5b2356
Author: Phil Zampino <[email protected]>
AuthorDate: Mon Mar 2 12:03:29 2026 -0500

    KNOX-3269 - Support APIKEY and CLIENTID as services without URLs or params 
in topology generation (#1167)
---
 .../simple/SimpleDescriptorHandlerTest.java        | 83 +++++++++++++++-------
 .../topology/simple/SimpleDescriptorHandler.java   |  9 ++-
 2 files changed, 64 insertions(+), 28 deletions(-)

diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandlerTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandlerTest.java
index c33500c4b..9bab863e7 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandlerTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandlerTest.java
@@ -832,39 +832,68 @@ public class SimpleDescriptorHandlerTest {
 
     @Test
     public void shouldAllowKnoxServiceWithoutUrlsAndParams() throws Exception {
-      File providerConfig =  File.createTempFile("testKnoxProvider", ".xml");
-      FileUtils.write(providerConfig, TEST_PROVIDER_CONFIG, 
StandardCharsets.UTF_8);
+        doTestShouldAllowServiceWithoutUrlsAndParams("KNOX");
+    }
 
-      File topologyFile = null;
-      try {
-        final File destDir = new 
File(System.getProperty("java.io.tmpdir")).getCanonicalFile();
-        final GatewayConfig gc = EasyMock.createNiceMock(GatewayConfig.class);
-        
EasyMock.expect(gc.getReadOnlyOverrideTopologyNames()).andReturn(Collections.emptyList()).anyTimes();
+    @Test
+    public void shouldAllowAPIKeyServiceWithoutUrlsAndParams() throws 
Exception {
+        doTestShouldAllowServiceWithoutUrlsAndParams("APIKEY");
+    }
 
-        final SimpleDescriptorImpl testDescriptor = new SimpleDescriptorImpl();
-        testDescriptor.setProviderConfig(providerConfig.getAbsolutePath());
+    @Test
+    public void shouldAllowClientIDServiceWithoutUrlsAndParams() throws 
Exception {
+        doTestShouldAllowServiceWithoutUrlsAndParams("CLIENTID");
+    }
 
-        final SimpleDescriptor.Service knoxService = 
EasyMock.createNiceMock(SimpleDescriptor.Service.class);
-        EasyMock.expect(knoxService.getName()).andReturn("KNOX").anyTimes();
-        EasyMock.expect(knoxService.getURLs()).andReturn(null).anyTimes();
-        EasyMock.expect(knoxService.getParams()).andReturn(null).anyTimes();
-        List<SimpleDescriptor.Service> serviceMocks = 
Collections.singletonList(knoxService);
-        testDescriptor.setServices(serviceMocks);
-        EasyMock.replay(gc, knoxService);
+    @Test
+    public void shouldAllowHealthServiceWithoutUrlsAndParams() throws 
Exception {
+        doTestShouldAllowServiceWithoutUrlsAndParams("HEALTH");
+    }
 
-        final Map<String, File> handleResult = 
SimpleDescriptorHandler.handle(gc, testDescriptor, destDir, destDir);
-        topologyFile = 
handleResult.get(SimpleDescriptorHandler.RESULT_TOPOLOGY);
-        assertTrue(topologyFile.exists());
-        assertTrue(new 
TopologyValidator(topologyFile.getAbsolutePath()).validateTopology());
+    @Test
+    public void shouldAllowMetadataServiceWithoutUrlsAndParams() throws 
Exception {
+        doTestShouldAllowServiceWithoutUrlsAndParams("KNOX-METADATA");
+    }
 
-        final Document topologyXml = XmlUtils.readXml(topologyFile);
-        assertThat(topologyXml, hasXPath("/topology/service/role", 
is(equalTo("KNOX"))));
-      } finally {
-        providerConfig.delete();
-        if (topologyFile != null) {
-          topologyFile.delete();
+    @Test
+    public void shouldAllowKnoxSessionServiceWithoutUrlsAndParams() throws 
Exception {
+        doTestShouldAllowServiceWithoutUrlsAndParams("KNOX-SESSION");
+    }
+
+    private void doTestShouldAllowServiceWithoutUrlsAndParams(final String 
serviceName) throws Exception {
+        File providerConfig =  File.createTempFile("testKnoxProvider", ".xml");
+        FileUtils.write(providerConfig, TEST_PROVIDER_CONFIG, 
StandardCharsets.UTF_8);
+
+        File topologyFile = null;
+        try {
+            final File destDir = new 
File(System.getProperty("java.io.tmpdir")).getCanonicalFile();
+            final GatewayConfig gc = 
EasyMock.createNiceMock(GatewayConfig.class);
+            
EasyMock.expect(gc.getReadOnlyOverrideTopologyNames()).andReturn(Collections.emptyList()).anyTimes();
+
+            final SimpleDescriptorImpl testDescriptor = new 
SimpleDescriptorImpl();
+            testDescriptor.setProviderConfig(providerConfig.getAbsolutePath());
+
+            final SimpleDescriptor.Service knoxService = 
EasyMock.createNiceMock(SimpleDescriptor.Service.class);
+            
EasyMock.expect(knoxService.getName()).andReturn(serviceName).anyTimes();
+            EasyMock.expect(knoxService.getURLs()).andReturn(null).anyTimes();
+            
EasyMock.expect(knoxService.getParams()).andReturn(null).anyTimes();
+            List<SimpleDescriptor.Service> serviceMocks = 
Collections.singletonList(knoxService);
+            testDescriptor.setServices(serviceMocks);
+            EasyMock.replay(gc, knoxService);
+
+            final Map<String, File> handleResult = 
SimpleDescriptorHandler.handle(gc, testDescriptor, destDir, destDir);
+            topologyFile = 
handleResult.get(SimpleDescriptorHandler.RESULT_TOPOLOGY);
+            assertTrue(topologyFile.exists());
+            assertTrue(new 
TopologyValidator(topologyFile.getAbsolutePath()).validateTopology());
+
+            final Document topologyXml = XmlUtils.readXml(topologyFile);
+            assertThat(topologyXml, hasXPath("/topology/service/role", 
is(equalTo(serviceName))));
+        } finally {
+            providerConfig.delete();
+            if (topologyFile != null) {
+                topologyFile.delete();
+            }
         }
-      }
     }
 
     @Test
diff --git 
a/gateway-topology-simple/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
 
b/gateway-topology-simple/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
index b3a735e7a..b4fbe0182 100644
--- 
a/gateway-topology-simple/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
+++ 
b/gateway-topology-simple/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
@@ -90,7 +90,14 @@ public class SimpleDescriptorHandler {
 
     private static final Map<String, ServiceDiscovery> discoveryInstances = 
new HashMap<>();
 
-    private static final Set<String> ALLOWED_SERVICES_WITHOUT_URLS_AND_PARAMS 
= Collections.unmodifiableSet(Stream.of("KNOX", "KNOX-METADATA", "KNOXSSOUT", 
"KNOX-SESSION", "HEALTH").collect(Collectors.toSet()));
+    private static final Set<String> ALLOWED_SERVICES_WITHOUT_URLS_AND_PARAMS =
+                                            
Collections.unmodifiableSet(Stream.of("KNOX",
+                                                                               
   "KNOX-METADATA",
+                                                                               
   "KNOXSSOUT",
+                                                                               
   "KNOX-SESSION",
+                                                                               
   "APIKEY",
+                                                                               
   "CLIENTID",
+                                                                               
   "HEALTH").collect(Collectors.toSet()));
 
     public static Map<String, File> handle(GatewayConfig config, File desc, 
File destDirectory, Service...gatewayServices) throws IOException {
         return handle(config, 
SimpleDescriptorFactory.parse(desc.getAbsolutePath()), desc.getParentFile(), 
destDirectory, gatewayServices);

Reply via email to