Repository: knox Updated Branches: refs/heads/master 84d36bad4 -> ff5d35f0b
KNOX-1216 - Admin UI and runtime validation for new descriptor provider configuration reference Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/ff5d35f0 Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/ff5d35f0 Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/ff5d35f0 Branch: refs/heads/master Commit: ff5d35f0b4de19a5566e52e5b4162950ee4f5b23 Parents: 84d36ba Author: Phil Zampino <[email protected]> Authored: Mon Mar 19 10:44:10 2018 -0400 Committer: Phil Zampino <[email protected]> Committed: Mon Mar 19 11:12:14 2018 -0400 ---------------------------------------------------------------------- .../new-desc-wizard.component.html | 3 +- .../new-desc-wizard.component.ts | 12 +++++ .../simple/SimpleDescriptorHandler.java | 14 ++++-- .../simple/SimpleDescriptorHandlerTest.java | 50 ++++++++++++++++++++ 4 files changed, 74 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/ff5d35f0/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.html ---------------------------------------------------------------------- diff --git a/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.html b/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.html index f1de99d..2a39585 100644 --- a/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.html +++ b/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.html @@ -9,7 +9,7 @@ <span> <strong>Name</strong> <input type="text" [(ngModel)]="descriptorName"> </span> - <span *ngIf="!isValidDescriptorName()" style="color: red">invalid</span> + <span *ngIf="!isValidDescriptorName()" style="color: red">required</span> </div> <!-- Descriptor Name --> <br> @@ -37,6 +37,7 @@ <span class="glyphicon glyphicon-edit"></span> </button> <app-provider-config-selector #choosePC></app-provider-config-selector> + <span *ngIf="!isValidProviderConfig()" style="color: red">required</span> </div> <!-- Provider Config reference --> <br> http://git-wip-us.apache.org/repos/asf/knox/blob/ff5d35f0/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.ts ---------------------------------------------------------------------- diff --git a/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.ts b/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.ts index d9752a1..ef2e8e2 100644 --- a/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.ts +++ b/gateway-admin-ui/src/app/new-desc-wizard/new-desc-wizard.component.ts @@ -171,6 +171,8 @@ export class NewDescWizardComponent implements OnInit { isValid = isValid && this.isValidDescriptorName(); + isValid = isValid && this.isValidProviderConfig(); + // Validate the discovery address if (this.descriptor.discoveryAddress) { isValid = isValid && this.isValidDiscoveryAddress(); @@ -193,6 +195,16 @@ export class NewDescWizardComponent implements OnInit { return isValid; } + isValidProviderConfig(): boolean { + let isValid: boolean = false; + + if (this.descriptor.providerConfig) { + isValid = ValidationUtils.isValidString(this.descriptor.providerConfig); + } + + return isValid; + } + isValidDiscoveryAddress(): boolean { if (this.descriptor.discoveryAddress) { return (ValidationUtils.isValidURL(this.descriptor.discoveryAddress)); http://git-wip-us.apache.org/repos/asf/knox/blob/ff5d35f0/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java index a3d9406..bb09a1a 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java @@ -346,11 +346,17 @@ public class SimpleDescriptorHandler { BufferedWriter fw = null; File topologyDescriptor = null; try { - // Resolve and parse the referenced provider configuration - File providerConfigFile = resolveProviderConfigurationReference(desc.getProviderConfig(), srcDirectory); - ProviderConfiguration providerConfiguration = handleProviderConfiguration(desc, providerConfigFile); + // Handle the referenced provider configuration + File providerConfigFile = null; + ProviderConfiguration providerConfiguration = null; + String providerConfigReference = desc.getProviderConfig(); + if (providerConfigReference != null) { + // Resolve and parse the referenced provider configuration + providerConfigFile = resolveProviderConfigurationReference(providerConfigReference, srcDirectory); + providerConfiguration = handleProviderConfiguration(desc, providerConfigFile); + } if (providerConfiguration == null) { - throw new IllegalArgumentException("Invalid provider configuration: " + desc.getProviderConfig()); + throw new IllegalArgumentException("Invalid provider configuration: " + providerConfigReference); } result.put(RESULT_REFERENCE, providerConfigFile); http://git-wip-us.apache.org/repos/asf/knox/blob/ff5d35f0/gateway-server/src/test/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandlerTest.java ---------------------------------------------------------------------- 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 6850bb6..f66de38 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 @@ -438,6 +438,56 @@ public class SimpleDescriptorHandlerTest { } + /** + * KNOX-1216 + */ + @Test + public void testMissingProviderConfigReference() throws Exception { + + // Prepare a mock SimpleDescriptor + final Map<String, List<String>> serviceURLs = new HashMap<>(); + serviceURLs.put("NAMENODE", null); + serviceURLs.put("JOBTRACKER", null); + serviceURLs.put("WEBHDFS", null); + serviceURLs.put("WEBHCAT", null); + serviceURLs.put("OOZIE", null); + serviceURLs.put("WEBHBASE", null); + serviceURLs.put("HIVE", null); + serviceURLs.put("RESOURCEMANAGER", null); + serviceURLs.put("AMBARIUI", Collections.singletonList("http://c6401.ambari.apache.org:8080")); + + File destDir = new File(System.getProperty("java.io.tmpdir")).getCanonicalFile(); + + // Mock out the simple descriptor + SimpleDescriptor testDescriptor = EasyMock.createNiceMock(SimpleDescriptor.class); + EasyMock.expect(testDescriptor.getName()).andReturn("mysimpledescriptor").anyTimes(); + EasyMock.expect(testDescriptor.getDiscoveryUser()).andReturn(null).anyTimes(); + EasyMock.expect(testDescriptor.getProviderConfig()).andReturn(null).anyTimes(); + List<SimpleDescriptor.Service> serviceMocks = new ArrayList<>(); + for (String serviceName : serviceURLs.keySet()) { + SimpleDescriptor.Service svc = EasyMock.createNiceMock(SimpleDescriptor.Service.class); + EasyMock.expect(svc.getName()).andReturn(serviceName).anyTimes(); + EasyMock.expect(svc.getVersion()).andReturn("WEBHDFS".equals(serviceName) ? "2.4.0" : null).anyTimes(); + EasyMock.expect(svc.getURLs()).andReturn(serviceURLs.get(serviceName)).anyTimes(); + EasyMock.replay(svc); + serviceMocks.add(svc); + } + EasyMock.expect(testDescriptor.getServices()).andReturn(serviceMocks).anyTimes(); + EasyMock.replay(testDescriptor); + + try { + // Invoke the simple descriptor handler + SimpleDescriptorHandler.handle(testDescriptor, destDir, destDir); + fail("Expected an IllegalArgumentException because the provider configuration reference is missing."); + } catch (IllegalArgumentException e) { + // Expected + } catch (Exception e) { + e.printStackTrace(); + fail("Unexpected exception for missing provider configuration reference: " + + e.getClass().getName() + " : " + e.getMessage()); + } + } + private File writeProviderConfig(String path, String content) throws IOException { File f = new File(path); FileUtils.write(f, content);
