You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by ju...@apache.org on 2014/08/01 06:16:09 UTC
svn commit: r1615025 - in /hadoop/common/trunk/hadoop-yarn-project: ./
hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/
hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/
hadoop-yarn/hadoo...
Author: junping_du
Date: Fri Aug 1 04:16:08 2014
New Revision: 1615025
URL: http://svn.apache.org/r1615025
Log:
YARN-2051. Fix bug in PBimpls and add more unit tests with reflection. (Contributed by Binglin Chang)
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java
Modified:
hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetApplicationsRequest.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceOption.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceBlacklistRequestPBImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceOptionPBImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/TokenPBImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/server/api/protocolrecords/impl/pb/UpdateNodeResourceRequestPBImpl.java
Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Fri Aug 1 04:16:08 2014
@@ -120,6 +120,9 @@ Release 2.6.0 - UNRELEASED
YARN-2354. DistributedShell may allocate more containers than client
specified after AM restarts. (Li Lu via jianhe)
+ YARN-2051. Fix bug in PBimpls and add more unit tests with reflection.
+ (Binglin Chang via junping_du)
+
Release 2.5.0 - UNRELEASED
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetApplicationsRequest.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetApplicationsRequest.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetApplicationsRequest.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetApplicationsRequest.java Fri Aug 1 04:16:08 2014
@@ -308,6 +308,15 @@ public abstract class GetApplicationsReq
/**
* Set the range of start times to filter applications on
*
+ * @param range
+ */
+ @Private
+ @Unstable
+ public abstract void setStartRange(LongRange range);
+
+ /**
+ * Set the range of start times to filter applications on
+ *
* @param begin beginning of the range
* @param end end of the range
* @throws IllegalArgumentException
@@ -329,6 +338,15 @@ public abstract class GetApplicationsReq
/**
* Set the range of finish times to filter applications on
*
+ * @param range
+ */
+ @Private
+ @Unstable
+ public abstract void setFinishRange(LongRange range);
+
+ /**
+ * Set the range of finish times to filter applications on
+ *
* @param begin beginning of the range
* @param end end of the range
* @throws IllegalArgumentException
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceOption.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceOption.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceOption.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceOption.java Fri Aug 1 04:16:08 2014
@@ -31,6 +31,8 @@ public abstract class ResourceOption {
int overCommitTimeout){
ResourceOption resourceOption = Records.newRecord(ResourceOption.class);
resourceOption.setResource(resource);
+ resourceOption.setOverCommitTimeout(overCommitTimeout);
+ resourceOption.build();
return resourceOption;
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java Fri Aug 1 04:16:08 2014
@@ -327,6 +327,11 @@ public class GetApplicationsRequestPBImp
}
@Override
+ public void setStartRange(LongRange range) {
+ this.start = range;
+ }
+
+ @Override
public void setStartRange(long begin, long end)
throws IllegalArgumentException {
if (begin > end) {
@@ -350,6 +355,11 @@ public class GetApplicationsRequestPBImp
}
@Override
+ public void setFinishRange(LongRange range) {
+ this.finish = range;
+ }
+
+ @Override
public void setFinishRange(long begin, long end) {
if (begin > end) {
throw new IllegalArgumentException("begin > end in range (begin, " +
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java Fri Aug 1 04:16:08 2014
@@ -479,6 +479,7 @@ public class ApplicationReportPBImpl ext
builder.setAmRmToken(convertToProtoFormat(this.amRmToken));
}
if (this.applicationTags != null && !this.applicationTags.isEmpty()) {
+ builder.clearApplicationTags();
builder.addAllApplicationTags(this.applicationTags);
}
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java Fri Aug 1 04:16:08 2014
@@ -107,6 +107,7 @@ extends ApplicationSubmissionContext {
builder.setResource(convertToProtoFormat(this.resource));
}
if (this.applicationTags != null && !this.applicationTags.isEmpty()) {
+ builder.clearApplicationTags();
builder.addAllApplicationTags(this.applicationTags);
}
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceBlacklistRequestPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceBlacklistRequestPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceBlacklistRequestPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceBlacklistRequestPBImpl.java Fri Aug 1 04:16:08 2014
@@ -90,7 +90,7 @@ public class ResourceBlacklistRequestPBI
private void addBlacklistRemovalsToProto() {
maybeInitBuilder();
- builder.clearBlacklistAdditions();
+ builder.clearBlacklistRemovals();
if (this.blacklistRemovals == null) {
return;
}
@@ -159,5 +159,14 @@ public class ResourceBlacklistRequestPBI
public int hashCode() {
return getProto().hashCode();
}
-
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null)
+ return false;
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ return this.getProto().equals(this.getClass().cast(other).getProto());
+ }
+ return false;
+ }
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceOptionPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceOptionPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceOptionPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourceOptionPBImpl.java Fri Aug 1 04:16:08 2014
@@ -86,4 +86,19 @@ public class ResourceOptionPBImpl extend
builder = null;
}
+ @Override
+ public int hashCode() {
+ return getProto().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null)
+ return false;
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ return this.getProto().equals(this.getClass().cast(other).getProto());
+ }
+ return false;
+ }
+
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/TokenPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/TokenPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/TokenPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/TokenPBImpl.java Fri Aug 1 04:16:08 2014
@@ -48,7 +48,7 @@ public class TokenPBImpl extends Token {
}
public synchronized TokenProto getProto() {
- mergeLocalToProto();
+ mergeLocalToProto();
proto = viaProto ? proto : builder.build();
viaProto = true;
return proto;
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/server/api/protocolrecords/impl/pb/UpdateNodeResourceRequestPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/server/api/protocolrecords/impl/pb/UpdateNodeResourceRequestPBImpl.java?rev=1615025&r1=1615024&r2=1615025&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/server/api/protocolrecords/impl/pb/UpdateNodeResourceRequestPBImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/server/api/protocolrecords/impl/pb/UpdateNodeResourceRequestPBImpl.java Fri Aug 1 04:16:08 2014
@@ -162,5 +162,19 @@ public class UpdateNodeResourceRequestPB
};
this.builder.addAllNodeResourceMap(values);
}
-
+
+ @Override
+ public int hashCode() {
+ return getProto().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null)
+ return false;
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ return this.getProto().equals(this.getClass().cast(other).getProto());
+ }
+ return false;
+ }
}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java?rev=1615025&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestPBImplRecords.java Fri Aug 1 04:16:08 2014
@@ -0,0 +1,895 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.hadoop.yarn.api;
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.nio.ByteBuffer;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Random;
+import java.util.Set;
+
+import org.apache.commons.lang.math.LongRange;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.security.proto.SecurityProtos.*;
+import org.apache.hadoop.yarn.api.protocolrecords.*;
+import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.*;
+import org.apache.hadoop.yarn.api.records.*;
+import org.apache.hadoop.yarn.api.records.impl.pb.*;
+import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.*;
+import org.apache.hadoop.yarn.proto.YarnProtos.*;
+import org.apache.hadoop.yarn.proto.YarnServiceProtos.*;
+import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.*;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+public class TestPBImplRecords {
+ static final Log LOG = LogFactory.getLog(TestPBImplRecords.class);
+
+ private static HashMap<Type, Object> typeValueCache = new HashMap<Type, Object>();
+ private static Random rand = new Random();
+ private static byte [] bytes = new byte[] {'1', '2', '3', '4'};
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private static Object genTypeValue(Type type) {
+ Object ret = typeValueCache.get(type);
+ if (ret != null) {
+ return ret;
+ }
+ // only use positive primitive values
+ if (type.equals(boolean.class)) {
+ return rand.nextBoolean();
+ } else if (type.equals(byte.class)) {
+ return bytes[rand.nextInt(4)];
+ } else if (type.equals(int.class)) {
+ return rand.nextInt(1000000);
+ } else if (type.equals(long.class)) {
+ return Long.valueOf(rand.nextInt(1000000));
+ } else if (type.equals(float.class)) {
+ return rand.nextFloat();
+ } else if (type.equals(double.class)) {
+ return rand.nextDouble();
+ } else if (type.equals(String.class)) {
+ return String.format("%c%c%c",
+ 'a' + rand.nextInt(26),
+ 'a' + rand.nextInt(26),
+ 'a' + rand.nextInt(26));
+ } else if (type instanceof Class) {
+ Class clazz = (Class)type;
+ if (clazz.isArray()) {
+ Class compClass = clazz.getComponentType();
+ if (compClass != null) {
+ ret = Array.newInstance(compClass, 2);
+ Array.set(ret, 0, genTypeValue(compClass));
+ Array.set(ret, 1, genTypeValue(compClass));
+ }
+ } else if (clazz.isEnum()) {
+ Object [] values = clazz.getEnumConstants();
+ ret = values[rand.nextInt(values.length)];
+ } else if (clazz.equals(ByteBuffer.class)) {
+ // return new ByteBuffer every time
+ // to prevent potential side effects
+ ByteBuffer buff = ByteBuffer.allocate(4);
+ rand.nextBytes(buff.array());
+ return buff;
+ }
+ } else if (type instanceof ParameterizedType) {
+ ParameterizedType pt = (ParameterizedType)type;
+ Type rawType = pt.getRawType();
+ Type [] params = pt.getActualTypeArguments();
+ // only support EnumSet<T>, List<T>, Set<T>, Map<K,V>
+ if (rawType.equals(EnumSet.class)) {
+ if (params[0] instanceof Class) {
+ Class c = (Class)(params[0]);
+ return EnumSet.allOf(c);
+ }
+ } if (rawType.equals(List.class)) {
+ ret = Lists.newArrayList(genTypeValue(params[0]));
+ } else if (rawType.equals(Set.class)) {
+ ret = Sets.newHashSet(genTypeValue(params[0]));
+ } else if (rawType.equals(Map.class)) {
+ Map<Object, Object> map = Maps.newHashMap();
+ map.put(genTypeValue(params[0]), genTypeValue(params[1]));
+ ret = map;
+ }
+ }
+ if (ret == null) {
+ throw new IllegalArgumentException("type " + type + " is not supported");
+ }
+ typeValueCache.put(type, ret);
+ return ret;
+ }
+
+ /**
+ * this method generate record instance by calling newIntance
+ * using reflection, add register the generated value to typeValueCache
+ */
+ @SuppressWarnings("rawtypes")
+ private static Object generateByNewInstance(Class clazz) throws Exception {
+ Object ret = typeValueCache.get(clazz);
+ if (ret != null) {
+ return ret;
+ }
+ Method newInstance = null;
+ Type [] paramTypes = new Type[0];
+ // get newInstance method with most parameters
+ for (Method m : clazz.getMethods()) {
+ int mod = m.getModifiers();
+ if (m.getDeclaringClass().equals(clazz) &&
+ Modifier.isPublic(mod) &&
+ Modifier.isStatic(mod) &&
+ m.getName().equals("newInstance")) {
+ Type [] pts = m.getGenericParameterTypes();
+ if (newInstance == null
+ || (pts.length > paramTypes.length)) {
+ newInstance = m;
+ paramTypes = pts;
+ }
+ }
+ }
+ if (newInstance == null) {
+ throw new IllegalArgumentException("type " + clazz.getName() +
+ " does not have newInstance method");
+ }
+ Object [] args = new Object[paramTypes.length];
+ for (int i=0;i<args.length;i++) {
+ args[i] = genTypeValue(paramTypes[i]);
+ }
+ ret = newInstance.invoke(null, args);
+ typeValueCache.put(clazz, ret);
+ return ret;
+ }
+
+ @BeforeClass
+ public static void setup() throws Exception {
+ typeValueCache.put(LongRange.class, new LongRange(1000, 2000));
+ typeValueCache.put(URL.class, URL.newInstance(
+ "http", "localhost", 8080, "file0"));
+ typeValueCache.put(SerializedException.class,
+ SerializedException.newInstance(new IOException("exception for test")));
+ generateByNewInstance(ApplicationId.class);
+ generateByNewInstance(ApplicationAttemptId.class);
+ generateByNewInstance(ContainerId.class);
+ generateByNewInstance(Resource.class);
+ generateByNewInstance(ResourceBlacklistRequest.class);
+ generateByNewInstance(ResourceOption.class);
+ generateByNewInstance(LocalResource.class);
+ generateByNewInstance(Priority.class);
+ generateByNewInstance(NodeId.class);
+ generateByNewInstance(NodeReport.class);
+ generateByNewInstance(Token.class);
+ generateByNewInstance(NMToken.class);
+ generateByNewInstance(ResourceRequest.class);
+ generateByNewInstance(ApplicationAttemptReport.class);
+ generateByNewInstance(ApplicationResourceUsageReport.class);
+ generateByNewInstance(ApplicationReport.class);
+ generateByNewInstance(Container.class);
+ generateByNewInstance(ContainerLaunchContext.class);
+ generateByNewInstance(ApplicationSubmissionContext.class);
+ generateByNewInstance(ContainerReport.class);
+ generateByNewInstance(ContainerResourceDecrease.class);
+ generateByNewInstance(ContainerResourceIncrease.class);
+ generateByNewInstance(ContainerResourceIncreaseRequest.class);
+ generateByNewInstance(ContainerStatus.class);
+ generateByNewInstance(PreemptionContainer.class);
+ generateByNewInstance(PreemptionResourceRequest.class);
+ generateByNewInstance(PreemptionContainer.class);
+ generateByNewInstance(PreemptionContract.class);
+ generateByNewInstance(StrictPreemptionContract.class);
+ generateByNewInstance(PreemptionMessage.class);
+ generateByNewInstance(StartContainerRequest.class);
+ // genByNewInstance does not apply to QueueInfo, cause
+ // it is recursive(has sub queues)
+ typeValueCache.put(QueueInfo.class, QueueInfo.newInstance(
+ "root", 1.0f, 1.0f, 0.1f, null, null, QueueState.RUNNING));
+ generateByNewInstance(QueueUserACLInfo.class);
+ generateByNewInstance(YarnClusterMetrics.class);
+ }
+
+ private class GetSetPair {
+ public String propertyName;
+ public Method getMethod;
+ public Method setMethod;
+ public Type type;
+ public Object testValue;
+
+ @Override
+ public String toString() {
+ return String.format("{ name=%s, class=%s, value=%s }", propertyName,
+ type, testValue);
+ }
+ }
+
+ private <R> Map<String, GetSetPair> getGetSetPairs(Class<R> recordClass)
+ throws Exception {
+ Map<String, GetSetPair> ret = new HashMap<String, GetSetPair>();
+ Method [] methods = recordClass.getDeclaredMethods();
+ // get all get methods
+ for (int i = 0; i < methods.length; i++) {
+ Method m = methods[i];
+ int mod = m.getModifiers();
+ if (m.getDeclaringClass().equals(recordClass) &&
+ Modifier.isPublic(mod) &&
+ (!Modifier.isStatic(mod))) {
+ String name = m.getName();
+ if (name.equals("getProto")) {
+ continue;
+ }
+ if ((name.length() > 3) && name.startsWith("get") &&
+ (m.getParameterTypes().length == 0)) {
+ String propertyName = name.substring(3);
+ Type valueType = m.getGenericReturnType();
+ GetSetPair p = ret.get(propertyName);
+ if (p == null) {
+ p = new GetSetPair();
+ p.propertyName = propertyName;
+ p.type = valueType;
+ p.getMethod = m;
+ ret.put(propertyName, p);
+ } else {
+ Assert.fail("Multiple get method with same name: " + recordClass
+ + p.propertyName);
+ }
+ }
+ }
+ }
+ // match get methods with set methods
+ for (int i = 0; i < methods.length; i++) {
+ Method m = methods[i];
+ int mod = m.getModifiers();
+ if (m.getDeclaringClass().equals(recordClass) &&
+ Modifier.isPublic(mod) &&
+ (!Modifier.isStatic(mod))) {
+ String name = m.getName();
+ if (name.startsWith("set") && (m.getParameterTypes().length == 1)) {
+ String propertyName = name.substring(3);
+ Type valueType = m.getGenericParameterTypes()[0];
+ GetSetPair p = ret.get(propertyName);
+ if (p != null && p.type.equals(valueType)) {
+ p.setMethod = m;
+ }
+ }
+ }
+ }
+ // exclude incomplete get/set pair, and generate test value
+ Iterator<Entry<String, GetSetPair>> itr = ret.entrySet().iterator();
+ while (itr.hasNext()) {
+ Entry<String, GetSetPair> cur = itr.next();
+ GetSetPair gsp = cur.getValue();
+ if ((gsp.getMethod == null) ||
+ (gsp.setMethod == null)) {
+ LOG.info(String.format("Exclude protential property: %s\n", gsp.propertyName));
+ itr.remove();
+ } else {
+ LOG.info(String.format("New property: %s type: %s", gsp.toString(), gsp.type));
+ gsp.testValue = genTypeValue(gsp.type);
+ LOG.info(String.format(" testValue: %s\n", gsp.testValue));
+ }
+ }
+ return ret;
+ }
+
+ private <R, P> void validatePBImplRecord(Class<R> recordClass,
+ Class<P> protoClass)
+ throws Exception {
+ LOG.info(String.format("Validate %s %s\n", recordClass.getName(),
+ protoClass.getName()));
+ Constructor<R> emptyConstructor = recordClass.getConstructor();
+ Constructor<R> pbConstructor = recordClass.getConstructor(protoClass);
+ Method getProto = recordClass.getDeclaredMethod("getProto");
+ Map<String, GetSetPair> getSetPairs = getGetSetPairs(recordClass);
+ R origRecord = emptyConstructor.newInstance();
+ for (GetSetPair gsp : getSetPairs.values()) {
+ gsp.setMethod.invoke(origRecord, gsp.testValue);
+ }
+ Object ret = getProto.invoke(origRecord);
+ Assert.assertNotNull(recordClass.getName() + "#getProto returns null", ret);
+ if (!(protoClass.isAssignableFrom(ret.getClass()))) {
+ Assert.fail("Illegal getProto method return type: " + ret.getClass());
+ }
+ R deserRecord = pbConstructor.newInstance(ret);
+ Assert.assertEquals("whole " + recordClass + " records should be equal",
+ origRecord, deserRecord);
+ for (GetSetPair gsp : getSetPairs.values()) {
+ Object origValue = gsp.getMethod.invoke(origRecord);
+ Object deserValue = gsp.getMethod.invoke(deserRecord);
+ Assert.assertEquals("property " + recordClass.getName() + "#"
+ + gsp.propertyName + " should be equal", origValue, deserValue);
+ }
+ }
+
+ @Test
+ public void testAllocateRequestPBImpl() throws Exception {
+ validatePBImplRecord(AllocateRequestPBImpl.class, AllocateRequestProto.class);
+ }
+
+ @Test
+ public void testAllocateResponsePBImpl() throws Exception {
+ validatePBImplRecord(AllocateResponsePBImpl.class, AllocateResponseProto.class);
+ }
+
+ @Test
+ public void testCancelDelegationTokenRequestPBImpl() throws Exception {
+ validatePBImplRecord(CancelDelegationTokenRequestPBImpl.class,
+ CancelDelegationTokenRequestProto.class);
+ }
+
+ @Test
+ public void testCancelDelegationTokenResponsePBImpl() throws Exception {
+ validatePBImplRecord(CancelDelegationTokenResponsePBImpl.class,
+ CancelDelegationTokenResponseProto.class);
+ }
+
+ @Test
+ public void testFinishApplicationMasterRequestPBImpl() throws Exception {
+ validatePBImplRecord(FinishApplicationMasterRequestPBImpl.class,
+ FinishApplicationMasterRequestProto.class);
+ }
+
+ @Test
+ public void testFinishApplicationMasterResponsePBImpl() throws Exception {
+ validatePBImplRecord(FinishApplicationMasterResponsePBImpl.class,
+ FinishApplicationMasterResponseProto.class);
+ }
+
+ @Test
+ public void testGetApplicationAttemptReportRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationAttemptReportRequestPBImpl.class,
+ GetApplicationAttemptReportRequestProto.class);
+ }
+
+ @Test
+ public void testGetApplicationAttemptReportResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationAttemptReportResponsePBImpl.class,
+ GetApplicationAttemptReportResponseProto.class);
+ }
+
+ @Test
+ public void testGetApplicationAttemptsRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationAttemptsRequestPBImpl.class,
+ GetApplicationAttemptsRequestProto.class);
+ }
+
+ @Test
+ public void testGetApplicationAttemptsResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationAttemptsResponsePBImpl.class,
+ GetApplicationAttemptsResponseProto.class);
+ }
+
+ @Test
+ public void testGetApplicationReportRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationReportRequestPBImpl.class,
+ GetApplicationReportRequestProto.class);
+ }
+
+ @Test
+ public void testGetApplicationReportResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationReportResponsePBImpl.class,
+ GetApplicationReportResponseProto.class);
+ }
+
+ @Test
+ public void testGetApplicationsRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationsRequestPBImpl.class,
+ GetApplicationsRequestProto.class);
+ }
+
+ @Test
+ public void testGetApplicationsResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetApplicationsResponsePBImpl.class,
+ GetApplicationsResponseProto.class);
+ }
+
+ @Test
+ public void testGetClusterMetricsRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetClusterMetricsRequestPBImpl.class,
+ GetClusterMetricsRequestProto.class);
+ }
+
+ @Test
+ public void testGetClusterMetricsResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetClusterMetricsResponsePBImpl.class,
+ GetClusterMetricsResponseProto.class);
+ }
+
+ @Test
+ public void testGetClusterNodesRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetClusterNodesRequestPBImpl.class,
+ GetClusterNodesRequestProto.class);
+ }
+
+ @Test
+ public void testGetClusterNodesResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetClusterNodesResponsePBImpl.class,
+ GetClusterNodesResponseProto.class);
+ }
+
+ @Test
+ public void testGetContainerReportRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetContainerReportRequestPBImpl.class,
+ GetContainerReportRequestProto.class);
+ }
+
+ @Test
+ public void testGetContainerReportResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetContainerReportResponsePBImpl.class,
+ GetContainerReportResponseProto.class);
+ }
+
+ @Test
+ public void testGetContainersRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetContainersRequestPBImpl.class,
+ GetContainersRequestProto.class);
+ }
+
+ @Test
+ public void testGetContainersResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetContainersResponsePBImpl.class,
+ GetContainersResponseProto.class);
+ }
+
+ @Test
+ public void testGetContainerStatusesRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetContainerStatusesRequestPBImpl.class,
+ GetContainerStatusesRequestProto.class);
+ }
+
+ @Test
+ public void testGetContainerStatusesResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetContainerStatusesResponsePBImpl.class,
+ GetContainerStatusesResponseProto.class);
+ }
+
+ @Test
+ public void testGetDelegationTokenRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetDelegationTokenRequestPBImpl.class,
+ GetDelegationTokenRequestProto.class);
+ }
+
+ @Test
+ public void testGetDelegationTokenResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetDelegationTokenResponsePBImpl.class,
+ GetDelegationTokenResponseProto.class);
+ }
+
+ @Test
+ public void testGetNewApplicationRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetNewApplicationRequestPBImpl.class,
+ GetNewApplicationRequestProto.class);
+ }
+
+ @Test
+ public void testGetNewApplicationResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetNewApplicationResponsePBImpl.class,
+ GetNewApplicationResponseProto.class);
+ }
+
+ @Test
+ public void testGetQueueInfoRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetQueueInfoRequestPBImpl.class,
+ GetQueueInfoRequestProto.class);
+ }
+
+ @Test
+ public void testGetQueueInfoResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetQueueInfoResponsePBImpl.class,
+ GetQueueInfoResponseProto.class);
+ }
+
+ @Test
+ public void testGetQueueUserAclsInfoRequestPBImpl() throws Exception {
+ validatePBImplRecord(GetQueueUserAclsInfoRequestPBImpl.class,
+ GetQueueUserAclsInfoRequestProto.class);
+ }
+
+ @Test
+ public void testGetQueueUserAclsInfoResponsePBImpl() throws Exception {
+ validatePBImplRecord(GetQueueUserAclsInfoResponsePBImpl.class,
+ GetQueueUserAclsInfoResponseProto.class);
+ }
+
+ @Test
+ public void testKillApplicationRequestPBImpl() throws Exception {
+ validatePBImplRecord(KillApplicationRequestPBImpl.class,
+ KillApplicationRequestProto.class);
+ }
+
+ @Test
+ public void testKillApplicationResponsePBImpl() throws Exception {
+ validatePBImplRecord(KillApplicationResponsePBImpl.class,
+ KillApplicationResponseProto.class);
+ }
+
+ @Test
+ public void testMoveApplicationAcrossQueuesRequestPBImpl() throws Exception {
+ validatePBImplRecord(MoveApplicationAcrossQueuesRequestPBImpl.class,
+ MoveApplicationAcrossQueuesRequestProto.class);
+ }
+
+ @Test
+ public void testMoveApplicationAcrossQueuesResponsePBImpl() throws Exception {
+ validatePBImplRecord(MoveApplicationAcrossQueuesResponsePBImpl.class,
+ MoveApplicationAcrossQueuesResponseProto.class);
+ }
+
+ @Test
+ public void testRegisterApplicationMasterRequestPBImpl() throws Exception {
+ validatePBImplRecord(RegisterApplicationMasterRequestPBImpl.class,
+ RegisterApplicationMasterRequestProto.class);
+ }
+
+ @Test
+ public void testRegisterApplicationMasterResponsePBImpl() throws Exception {
+ validatePBImplRecord(RegisterApplicationMasterResponsePBImpl.class,
+ RegisterApplicationMasterResponseProto.class);
+ }
+
+ @Test
+ public void testRenewDelegationTokenRequestPBImpl() throws Exception {
+ validatePBImplRecord(RenewDelegationTokenRequestPBImpl.class,
+ RenewDelegationTokenRequestProto.class);
+ }
+
+ @Test
+ public void testRenewDelegationTokenResponsePBImpl() throws Exception {
+ validatePBImplRecord(RenewDelegationTokenResponsePBImpl.class,
+ RenewDelegationTokenResponseProto.class);
+ }
+
+ @Test
+ public void testStartContainerRequestPBImpl() throws Exception {
+ validatePBImplRecord(StartContainerRequestPBImpl.class,
+ StartContainerRequestProto.class);
+ }
+
+ @Test
+ public void testStartContainersRequestPBImpl() throws Exception {
+ validatePBImplRecord(StartContainersRequestPBImpl.class,
+ StartContainersRequestProto.class);
+ }
+
+ @Test
+ public void testStartContainersResponsePBImpl() throws Exception {
+ validatePBImplRecord(StartContainersResponsePBImpl.class,
+ StartContainersResponseProto.class);
+ }
+
+ @Test
+ public void testStopContainersRequestPBImpl() throws Exception {
+ validatePBImplRecord(StopContainersRequestPBImpl.class,
+ StopContainersRequestProto.class);
+ }
+
+ @Test
+ public void testStopContainersResponsePBImpl() throws Exception {
+ validatePBImplRecord(StopContainersResponsePBImpl.class,
+ StopContainersResponseProto.class);
+ }
+
+ @Test
+ public void testSubmitApplicationRequestPBImpl() throws Exception {
+ validatePBImplRecord(SubmitApplicationRequestPBImpl.class,
+ SubmitApplicationRequestProto.class);
+ }
+
+ @Test
+ public void testSubmitApplicationResponsePBImpl() throws Exception {
+ validatePBImplRecord(SubmitApplicationResponsePBImpl.class,
+ SubmitApplicationResponseProto.class);
+ }
+
+ @Test
+ @Ignore
+ // ignore cause ApplicationIdPBImpl is immutable
+ public void testApplicationAttemptIdPBImpl() throws Exception {
+ validatePBImplRecord(ApplicationAttemptIdPBImpl.class,
+ ApplicationAttemptIdProto.class);
+ }
+
+ @Test
+ public void testApplicationAttemptReportPBImpl() throws Exception {
+ validatePBImplRecord(ApplicationAttemptReportPBImpl.class,
+ ApplicationAttemptReportProto.class);
+ }
+
+ @Test
+ @Ignore
+ // ignore cause ApplicationIdPBImpl is immutable
+ public void testApplicationIdPBImpl() throws Exception {
+ validatePBImplRecord(ApplicationIdPBImpl.class, ApplicationIdProto.class);
+ }
+
+ @Test
+ public void testApplicationReportPBImpl() throws Exception {
+ validatePBImplRecord(ApplicationReportPBImpl.class,
+ ApplicationReportProto.class);
+ }
+
+ @Test
+ public void testApplicationResourceUsageReportPBImpl() throws Exception {
+ validatePBImplRecord(ApplicationResourceUsageReportPBImpl.class,
+ ApplicationResourceUsageReportProto.class);
+ }
+
+ @Test
+ public void testApplicationSubmissionContextPBImpl() throws Exception {
+ validatePBImplRecord(ApplicationSubmissionContextPBImpl.class,
+ ApplicationSubmissionContextProto.class);
+ }
+
+ @Test
+ @Ignore
+ // ignore cause ApplicationIdPBImpl is immutable
+ public void testContainerIdPBImpl() throws Exception {
+ validatePBImplRecord(ContainerIdPBImpl.class, ContainerIdProto.class);
+ }
+
+ @Test
+ public void testContainerLaunchContextPBImpl() throws Exception {
+ validatePBImplRecord(ContainerLaunchContextPBImpl.class,
+ ContainerLaunchContextProto.class);
+ }
+
+ @Test
+ public void testContainerPBImpl() throws Exception {
+ validatePBImplRecord(ContainerPBImpl.class, ContainerProto.class);
+ }
+
+ @Test
+ public void testContainerReportPBImpl() throws Exception {
+ validatePBImplRecord(ContainerReportPBImpl.class, ContainerReportProto.class);
+ }
+
+ @Test
+ public void testContainerResourceDecreasePBImpl() throws Exception {
+ validatePBImplRecord(ContainerResourceDecreasePBImpl.class,
+ ContainerResourceDecreaseProto.class);
+ }
+
+ @Test
+ public void testContainerResourceIncreasePBImpl() throws Exception {
+ validatePBImplRecord(ContainerResourceIncreasePBImpl.class,
+ ContainerResourceIncreaseProto.class);
+ }
+
+ @Test
+ public void testContainerResourceIncreaseRequestPBImpl() throws Exception {
+ validatePBImplRecord(ContainerResourceIncreaseRequestPBImpl.class,
+ ContainerResourceIncreaseRequestProto.class);
+ }
+
+ @Test
+ public void testContainerStatusPBImpl() throws Exception {
+ validatePBImplRecord(ContainerStatusPBImpl.class, ContainerStatusProto.class);
+ }
+
+ @Test
+ public void testLocalResourcePBImpl() throws Exception {
+ validatePBImplRecord(LocalResourcePBImpl.class, LocalResourceProto.class);
+ }
+
+ @Test
+ public void testNMTokenPBImpl() throws Exception {
+ validatePBImplRecord(NMTokenPBImpl.class, NMTokenProto.class);
+ }
+
+ @Test
+ @Ignore
+ // ignore cause ApplicationIdPBImpl is immutable
+ public void testNodeIdPBImpl() throws Exception {
+ validatePBImplRecord(NodeIdPBImpl.class, NodeIdProto.class);
+ }
+
+ @Test
+ public void testNodeReportPBImpl() throws Exception {
+ validatePBImplRecord(NodeReportPBImpl.class, NodeReportProto.class);
+ }
+
+ @Test
+ public void testPreemptionContainerPBImpl() throws Exception {
+ validatePBImplRecord(PreemptionContainerPBImpl.class,
+ PreemptionContainerProto.class);
+ }
+
+ @Test
+ public void testPreemptionContractPBImpl() throws Exception {
+ validatePBImplRecord(PreemptionContractPBImpl.class,
+ PreemptionContractProto.class);
+ }
+
+ @Test
+ public void testPreemptionMessagePBImpl() throws Exception {
+ validatePBImplRecord(PreemptionMessagePBImpl.class,
+ PreemptionMessageProto.class);
+ }
+
+ @Test
+ public void testPreemptionResourceRequestPBImpl() throws Exception {
+ validatePBImplRecord(PreemptionResourceRequestPBImpl.class,
+ PreemptionResourceRequestProto.class);
+ }
+
+ @Test
+ public void testPriorityPBImpl() throws Exception {
+ validatePBImplRecord(PriorityPBImpl.class, PriorityProto.class);
+ }
+
+ @Test
+ public void testQueueInfoPBImpl() throws Exception {
+ validatePBImplRecord(QueueInfoPBImpl.class, QueueInfoProto.class);
+ }
+
+ @Test
+ public void testQueueUserACLInfoPBImpl() throws Exception {
+ validatePBImplRecord(QueueUserACLInfoPBImpl.class,
+ QueueUserACLInfoProto.class);
+ }
+
+ @Test
+ public void testResourceBlacklistRequestPBImpl() throws Exception {
+ validatePBImplRecord(ResourceBlacklistRequestPBImpl.class,
+ ResourceBlacklistRequestProto.class);
+ }
+
+ @Test
+ @Ignore
+ // ignore as ResourceOptionPBImpl is immutable
+ public void testResourceOptionPBImpl() throws Exception {
+ validatePBImplRecord(ResourceOptionPBImpl.class, ResourceOptionProto.class);
+ }
+
+ @Test
+ public void testResourcePBImpl() throws Exception {
+ validatePBImplRecord(ResourcePBImpl.class, ResourceProto.class);
+ }
+
+ @Test
+ public void testResourceRequestPBImpl() throws Exception {
+ validatePBImplRecord(ResourceRequestPBImpl.class, ResourceRequestProto.class);
+ }
+
+ @Test
+ public void testSerializedExceptionPBImpl() throws Exception {
+ validatePBImplRecord(SerializedExceptionPBImpl.class,
+ SerializedExceptionProto.class);
+ }
+
+ @Test
+ public void testStrictPreemptionContractPBImpl() throws Exception {
+ validatePBImplRecord(StrictPreemptionContractPBImpl.class,
+ StrictPreemptionContractProto.class);
+ }
+
+ @Test
+ public void testTokenPBImpl() throws Exception {
+ validatePBImplRecord(TokenPBImpl.class, TokenProto.class);
+ }
+
+ @Test
+ public void testURLPBImpl() throws Exception {
+ validatePBImplRecord(URLPBImpl.class, URLProto.class);
+ }
+
+ @Test
+ public void testYarnClusterMetricsPBImpl() throws Exception {
+ validatePBImplRecord(YarnClusterMetricsPBImpl.class,
+ YarnClusterMetricsProto.class);
+ }
+
+ @Test
+ public void testRefreshAdminAclsRequestPBImpl() throws Exception {
+ validatePBImplRecord(RefreshAdminAclsRequestPBImpl.class,
+ RefreshAdminAclsRequestProto.class);
+ }
+
+ @Test
+ public void testRefreshAdminAclsResponsePBImpl() throws Exception {
+ validatePBImplRecord(RefreshAdminAclsResponsePBImpl.class,
+ RefreshAdminAclsResponseProto.class);
+ }
+
+ @Test
+ public void testRefreshNodesRequestPBImpl() throws Exception {
+ validatePBImplRecord(RefreshNodesRequestPBImpl.class,
+ RefreshNodesRequestProto.class);
+ }
+
+ @Test
+ public void testRefreshNodesResponsePBImpl() throws Exception {
+ validatePBImplRecord(RefreshNodesResponsePBImpl.class,
+ RefreshNodesResponseProto.class);
+ }
+
+ @Test
+ public void testRefreshQueuesRequestPBImpl() throws Exception {
+ validatePBImplRecord(RefreshQueuesRequestPBImpl.class,
+ RefreshQueuesRequestProto.class);
+ }
+
+ @Test
+ public void testRefreshQueuesResponsePBImpl() throws Exception {
+ validatePBImplRecord(RefreshQueuesResponsePBImpl.class,
+ RefreshQueuesResponseProto.class);
+ }
+
+ @Test
+ public void testRefreshServiceAclsRequestPBImpl() throws Exception {
+ validatePBImplRecord(RefreshServiceAclsRequestPBImpl.class,
+ RefreshServiceAclsRequestProto.class);
+ }
+
+ @Test
+ public void testRefreshServiceAclsResponsePBImpl() throws Exception {
+ validatePBImplRecord(RefreshServiceAclsResponsePBImpl.class,
+ RefreshServiceAclsResponseProto.class);
+ }
+
+ @Test
+ public void testRefreshSuperUserGroupsConfigurationRequestPBImpl()
+ throws Exception {
+ validatePBImplRecord(RefreshSuperUserGroupsConfigurationRequestPBImpl.class,
+ RefreshSuperUserGroupsConfigurationRequestProto.class);
+ }
+
+ @Test
+ public void testRefreshSuperUserGroupsConfigurationResponsePBImpl()
+ throws Exception {
+ validatePBImplRecord(RefreshSuperUserGroupsConfigurationResponsePBImpl.class,
+ RefreshSuperUserGroupsConfigurationResponseProto.class);
+ }
+
+ @Test
+ public void testRefreshUserToGroupsMappingsRequestPBImpl() throws Exception {
+ validatePBImplRecord(RefreshUserToGroupsMappingsRequestPBImpl.class,
+ RefreshUserToGroupsMappingsRequestProto.class);
+ }
+
+ @Test
+ public void testRefreshUserToGroupsMappingsResponsePBImpl() throws Exception {
+ validatePBImplRecord(RefreshUserToGroupsMappingsResponsePBImpl.class,
+ RefreshUserToGroupsMappingsResponseProto.class);
+ }
+
+ @Test
+ public void testUpdateNodeResourceRequestPBImpl() throws Exception {
+ validatePBImplRecord(UpdateNodeResourceRequestPBImpl.class,
+ UpdateNodeResourceRequestProto.class);
+ }
+
+ @Test
+ public void testUpdateNodeResourceResponsePBImpl() throws Exception {
+ validatePBImplRecord(UpdateNodeResourceResponsePBImpl.class,
+ UpdateNodeResourceResponseProto.class);
+ }
+}