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);

Reply via email to