SLIDER-5 CLI tests on deser content passing; tuning what gets sent back

git-svn-id: https://svn.apache.org/repos/asf/incubator/slider/trunk@1592538 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java b/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java
index dd6e012..865e11e 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java
@@ -24,6 +24,8 @@
 import org.apache.slider.core.exceptions.BadCommandArgumentsException;
 import org.apache.slider.core.exceptions.ErrorStrings;
 
+import static org.apache.slider.common.params.SliderActions.ACTION_REGISTRY;
+import static org.apache.slider.common.params.SliderActions.DESCRIBE_ACTION_REGISTRY;
 import java.io.File;
 
 
@@ -35,13 +37,13 @@
  * --list : list instances of slider service
  * --listfiles 
  */
-@Parameters(commandNames = {SliderActions.ACTION_REGISTRY},
-            commandDescription = SliderActions.DESCRIBE_ACTION_REGISTRY)
+@Parameters(commandNames = {ACTION_REGISTRY},
+            commandDescription = DESCRIBE_ACTION_REGISTRY)
 
 public class ActionRegistryArgs extends AbstractActionArgs {
   @Override
   public String getActionName() {
-    return SliderActions.ACTION_REGISTRY;
+    return ACTION_REGISTRY;
   }
 
 
@@ -147,23 +149,40 @@
     return arg ? 1 : 0;
   }
 
+  private String iff(String arg, boolean val) {
+    return val ? (arg + " "): "";
+  }
+
+  private String iff (String arg, String val) {
+    if (is(val)) {
+      return arg + " " + val + " ";
+    } else {
+      return "";
+    }
+  }
 
   @Override
   public String toString() {
     final StringBuilder sb =
-        new StringBuilder("ActionRegistryArgs{");
-    sb.append("list=").append(list);
-    sb.append(", listConf=").append(listConf);
-    sb.append(", getConf='").append(getConf).append('\'');
-    sb.append(", listFiles='").append(listFiles).append('\'');
-    sb.append(", getFiles='").append(getFiles).append('\'');
-    sb.append(", format='").append(format).append('\'');
-    sb.append(", dest=").append(dest);
-    sb.append(", name='").append(name).append('\'');
-    sb.append(", serviceType='").append(serviceType).append('\'');
-    sb.append(", verbose=").append(verbose);
-    sb.append(", internal=").append(internal);
-    sb.append('}');
+        new StringBuilder(ACTION_REGISTRY);
+    sb.append(iff(ARG_LIST, list));
+    sb.append(iff(ARG_LISTCONF, listConf));
+    sb.append(iff(ARG_LISTFILES, listFiles));
+    sb.append(iff(ARG_GETCONF, listFiles));
+    sb.append(iff(ARG_GETFILES, listFiles));
+
+    sb.append(iff(ARG_NAME, name));
+    sb.append(iff(ARG_SERVICETYPE, serviceType));
+
+
+    sb.append(iff(ARG_VERBOSE, verbose));
+    sb.append(iff(ARG_INTERNAL, internal));
+
+    if (dest != null) {
+      sb.append(iff(ARG_DEST, dest.toString()));
+    }
+    sb.append(iff(ARG_FORMAT, format));
+
     return sb.toString();
   }
 }
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
index fb77363..41b3619 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
@@ -58,4 +58,13 @@
     keys.addAll(configurations.keySet());
     return keys;
   }
+
+  public PublishedConfigSet shallowCopy() {
+    PublishedConfigSet that = new PublishedConfigSet();
+    for (Map.Entry<String, PublishedConfiguration> entry : configurations
+        .entrySet()) {
+      that.put(entry.getKey(), entry.getValue().shallowCopy());
+    }
+    return that;
+  }
 }
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
index a47b51d..3c7b521 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
@@ -59,16 +59,24 @@
     return updated;
   }
 
-  @JsonIgnore
   private Map<String, String> values = new HashMap<String, String>();
 
   /**
+   * Is the configuration empty. This means either that it has not
+   * been given any values, or it is stripped down copy set down over the
+   * wire.
+   * @return
+   */
+  public boolean isEmpty() {
+    return values.isEmpty();
+  }
+
+  /**
    * Set the values from an iterable (this includes a Hadoop Configuration
    * and Java properties object).
    * Any existing value set is discarded
    * @param entries entries to put
    */
-  @JsonIgnore
   public void putValues(Iterable<Map.Entry<String, String>> entries) {
     values = new HashMap<String, String>();
     for (Map.Entry<String, String> entry : entries) {
@@ -116,4 +124,19 @@
     String json = mapper.writeValueAsString(values);
     return json;
   }
+
+
+  /**
+   * This makes a copy without the nested content -so is suitable
+   * for returning as part of the list of a parent's values
+   * @return the copy
+   */
+  public PublishedConfiguration shallowCopy() {
+    PublishedConfiguration that = new PublishedConfiguration();
+    that.description = this.description;
+    that.size = this.size;
+    that.updated = this.updated;
+    that.updatedTime = this.updatedTime;
+    return that;
+  }
 }
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java b/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
index b5e2d15..6c6918c 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
@@ -30,7 +30,7 @@
 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
 public class ServiceInstanceData implements Serializable {
 
-  public String name;
+  public String serviceType;
   public String id;
   public long registrationTimeUTC;
 
@@ -49,8 +49,8 @@
   public String toString() {
     final StringBuilder sb =
         new StringBuilder("ServiceInstanceData{");
-    sb.append("name='").append(name).append('\'');
     sb.append(", id='").append(id).append('\'');
+    sb.append("serviceType='").append(serviceType).append('\'');
     sb.append('}');
     return sb.toString();
   }
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java b/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java
index 1202cb8..5d34ea8 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java
@@ -22,6 +22,9 @@
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.UniformInterfaceException;
 import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
 import org.apache.slider.core.exceptions.ExceptionConverter;
 import org.apache.slider.core.registry.docstore.PublishedConfigSet;
 import org.apache.slider.core.registry.info.RegistryView;
@@ -45,7 +48,11 @@
   private static final Client jerseyClient;
   
   static {
-    jerseyClient = Client.create();
+    ClientConfig clientConfig = new DefaultClientConfig();
+    clientConfig.getFeatures().put(
+        JSONConfiguration.FEATURE_POJO_MAPPING,
+        Boolean.TRUE);
+    jerseyClient = Client.create(clientConfig);
     jerseyClient.setFollowRedirects(true);
   }
 
@@ -90,11 +97,11 @@
       throw new FileNotFoundException("No configuration URL at "
                                       + destination(external) + " view");
     }
-    WebResource webResource = jerseyClient.resource(confURL);
     try {
-      PublishedConfigSet configSet =
-          webResource.type(MediaType.APPLICATION_JSON)
-                     .get(PublishedConfigSet.class);
+      WebResource webResource = jerseyClient.resource(confURL);
+      webResource.type(MediaType.APPLICATION_JSON);
+      log.debug("GET {}", confURL);
+      PublishedConfigSet configSet = webResource.get(PublishedConfigSet.class);
       return configSet;
     } catch (UniformInterfaceException e) {
       throw ExceptionConverter.convertJerseyException(confURL, e);
@@ -105,4 +112,6 @@
   public String toString() {
     return super.toString() + " - " + instance;
   }
+  
+  
 }
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
index 5eaa618..5219837 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
@@ -699,7 +699,8 @@
     URL amWeb = new URL(appMasterTrackingUrl);
     String serviceName = SliderKeys.APP_TYPE;
     int id = appid.getId();
-    String appRegistryName = RegistryNaming.createRegistryName(instanceName,
+    String appServiceType = RegistryNaming.createRegistryServiceType(
+        instanceName,
         service_user_name,
         serviceName);
     String registryId =
@@ -716,6 +717,8 @@
     appState.getPublishedConfigurations().put("yarn-site.xml", pubconf);
 
     ServiceInstanceData instanceData = new ServiceInstanceData();
+    instanceData.id = registryId;
+    instanceData.serviceType = appServiceType;
 
     RegisteredEndpoint webUI =
       new RegisteredEndpoint(amWeb, "Application Master Web UI");
@@ -772,7 +775,7 @@
 
 
     registry.register(
-      appRegistryName,
+      appServiceType,
       registryId,
       amWeb,
       instanceData);
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
index 65c8090..318ca03 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
@@ -65,8 +65,8 @@
     init(res, uriInfo);
 
     PublishedConfigSet publishedConfigSet = getContent();
-    log.debug("number of avaiable configurations: {}", publishedConfigSet.size());
-    return publishedConfigSet;
+    log.debug("number of available configurations: {}", publishedConfigSet.size());
+    return publishedConfigSet.shallowCopy();
   }
 
   private void logRequest(UriInfo uriInfo) {
diff --git a/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java b/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java
index ce6c4af..e5c8b1a 100644
--- a/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java
+++ b/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java
@@ -22,9 +22,9 @@
 
 public class RegistryNaming {
 
-  public static String createRegistryName(String instanceName,
-                                          String userName,
-                                          String serviceName) {
+  public static String createRegistryServiceType(String instanceName,
+      String userName,
+      String serviceName) {
     return serviceName;
   }
 
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
index 0069e73..904f715 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
@@ -175,8 +175,9 @@
     def externalConf = retriever.getConfigurations(true)
     externalConf.keys().each { String key ->
       def config = externalConf.get(key)
-      log.info "$key -- ${config.description} -- size ${config.size}"
+      log.info "$key -- ${config.description}"
     }
+    assert externalConf["yarn-site.xml"]
 
     describe "Internal configurations"
     assert !retriever.hasConfigurations(false)
@@ -186,17 +187,37 @@
     } catch (FileNotFoundException fnfe) {
       //expected
     }
-    
+
+
     // retrieval via API
     ActionRegistryArgs registryArgs = new ActionRegistryArgs()
-    registryArgs.name = amInstance;
+    registryArgs.name = serviceInstanceData.id;
     registryArgs.verbose = true
-    registryArgs.list = true;
-    assert client.actionRegistry(registryArgs)
 
+    // list
+    registryArgs.list = true;
+    describe registryArgs.toString()
+    assert 0 == client.actionRegistry(registryArgs)
+
+    // listconf 
     registryArgs.list = false;
     registryArgs.listConf = true
-    assert client.actionRegistry(registryArgs)
+    describe registryArgs.toString() 
+    
+    assert 0 == client.actionRegistry(registryArgs)
+
+  
+    // listconf --internal
+    registryArgs.list = false;
+    registryArgs.listConf = true
+    registryArgs.internal = true
+    describe registryArgs.toString()
+    try {
+      assert 0 == client.actionRegistry(registryArgs)
+      fail("expected a failure")
+    } catch (FileNotFoundException fnfe) {
+      //expected
+    }
 
 
 
diff --git a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy
index cf8dbd9..5d13018 100644
--- a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy
@@ -118,7 +118,7 @@
   @Test
   public void testNamingPolicy() throws Throwable {
 
-    String hobbitName = RegistryNaming.createRegistryName("hobbiton",
+    String hobbitName = RegistryNaming.createRegistryServiceType("hobbiton",
         "bilbo",
         SliderKeys.APP_TYPE);
     String hobbitId =
@@ -127,7 +127,7 @@
             "bilbo",
             SliderKeys.APP_TYPE,
             1);
-    String mordorName = RegistryNaming.createRegistryName("mordor",
+    String mordorName = RegistryNaming.createRegistryServiceType("mordor",
         "bilbo",
         SliderKeys.APP_TYPE);
     String mordorId =
diff --git a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy
index 47924d2..6a57cd9 100644
--- a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy
@@ -73,7 +73,7 @@
     builder.address(null).id("testPayload").name("").port(0).uriSpec(null)
 
     ServiceInstanceData data = new ServiceInstanceData()
-    data.name = "testPayload"
+    data.serviceType = "testPayload"
     data.externalView.documentsURL = "http://documents"
     builder.payload(data)