From 2cbaf22bba4da1b60c551112a97ccc7f2e7157fa Mon Sep 17 00:00:00 2001 From: Etan Cohen Date: Mon, 20 Mar 2017 11:33:12 -0700 Subject: [PATCH] [AWARE] Remove Publish/Subscribe Count configuration Simplify API: semantics of publish/subscribe count restrictions aren't clear at the app level. They depend on DW configuration as well as discovery session type - number of packets transmitted over the air. There's already an app-facing discovery session lifetime configuration - the TTL. That has clearer semantics and is sufficient (for now). Bug: 36446307 Test: unit tests and integration (sl4a) tests. Change-Id: I9129975bd2e1a61b3d23a4b6acaae703b42216c7 --- api/current.txt | 2 - api/system-current.txt | 2 - api/test-current.txt | 2 - .../wifi/aware/DiscoverySessionCallback.java | 2 +- .../android/net/wifi/aware/PublishConfig.java | 47 +++---------------- .../net/wifi/aware/SubscribeConfig.java | 44 ++--------------- .../net/wifi/aware/WifiAwareManagerTest.java | 23 ++------- 7 files changed, 16 insertions(+), 106 deletions(-) diff --git a/api/current.txt b/api/current.txt index 873f5fafebfc5..7b507dea170cc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -25189,7 +25189,6 @@ package android.net.wifi.aware { ctor public PublishConfig.Builder(); method public android.net.wifi.aware.PublishConfig build(); method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(java.util.List); - method public android.net.wifi.aware.PublishConfig.Builder setPublishCount(int); method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int); method public android.net.wifi.aware.PublishConfig.Builder setServiceName(java.lang.String); method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(byte[]); @@ -25218,7 +25217,6 @@ package android.net.wifi.aware { method public android.net.wifi.aware.SubscribeConfig.Builder setMatchStyle(int); method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(java.lang.String); method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(byte[]); - method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeCount(int); method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int); method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean); method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int); diff --git a/api/system-current.txt b/api/system-current.txt index eb6a3fb71ea64..3ec0d7715af13 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -27749,7 +27749,6 @@ package android.net.wifi.aware { ctor public PublishConfig.Builder(); method public android.net.wifi.aware.PublishConfig build(); method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(java.util.List); - method public android.net.wifi.aware.PublishConfig.Builder setPublishCount(int); method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int); method public android.net.wifi.aware.PublishConfig.Builder setServiceName(java.lang.String); method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(byte[]); @@ -27778,7 +27777,6 @@ package android.net.wifi.aware { method public android.net.wifi.aware.SubscribeConfig.Builder setMatchStyle(int); method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(java.lang.String); method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(byte[]); - method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeCount(int); method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int); method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean); method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int); diff --git a/api/test-current.txt b/api/test-current.txt index ff934482f4dda..d9dc9049e9e2d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -25262,7 +25262,6 @@ package android.net.wifi.aware { ctor public PublishConfig.Builder(); method public android.net.wifi.aware.PublishConfig build(); method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(java.util.List); - method public android.net.wifi.aware.PublishConfig.Builder setPublishCount(int); method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int); method public android.net.wifi.aware.PublishConfig.Builder setServiceName(java.lang.String); method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(byte[]); @@ -25291,7 +25290,6 @@ package android.net.wifi.aware { method public android.net.wifi.aware.SubscribeConfig.Builder setMatchStyle(int); method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(java.lang.String); method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(byte[]); - method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeCount(int); method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int); method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean); method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int); diff --git a/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java b/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java index 9645b1d32a34e..334205b13bba0 100644 --- a/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java +++ b/wifi/java/android/net/wifi/aware/DiscoverySessionCallback.java @@ -85,7 +85,7 @@ public class DiscoverySessionCallback { /** * Called when a discovery session (publish or subscribe) terminates. Termination may be due * to user-request (either directly through {@link DiscoverySession#destroy()} or - * application-specified expiration, e.g. {@link PublishConfig.Builder#setPublishCount(int)} + * application-specified expiration, e.g. {@link PublishConfig.Builder#setTtlSec(int)} * or {@link SubscribeConfig.Builder#setTtlSec(int)}). */ public void onSessionTerminated() { diff --git a/wifi/java/android/net/wifi/aware/PublishConfig.java b/wifi/java/android/net/wifi/aware/PublishConfig.java index a996844883b0c..1ce12f30a25e1 100644 --- a/wifi/java/android/net/wifi/aware/PublishConfig.java +++ b/wifi/java/android/net/wifi/aware/PublishConfig.java @@ -74,9 +74,6 @@ public final class PublishConfig implements Parcelable { /** @hide */ public final int mPublishType; - /** @hide */ - public final int mPublishCount; - /** @hide */ public final int mTtlSec; @@ -85,12 +82,11 @@ public final class PublishConfig implements Parcelable { /** @hide */ public PublishConfig(byte[] serviceName, byte[] serviceSpecificInfo, byte[] matchFilter, - int publishType, int publichCount, int ttlSec, boolean enableTerminateNotification) { + int publishType, int ttlSec, boolean enableTerminateNotification) { mServiceName = serviceName; mServiceSpecificInfo = serviceSpecificInfo; mMatchFilter = matchFilter; mPublishType = publishType; - mPublishCount = publichCount; mTtlSec = ttlSec; mEnableTerminateNotification = enableTerminateNotification; } @@ -100,8 +96,8 @@ public final class PublishConfig implements Parcelable { return "PublishConfig [mServiceName='" + mServiceName + ", mServiceSpecificInfo='" + ( (mServiceSpecificInfo == null) ? "null" : HexEncoding.encode(mServiceSpecificInfo)) + ", mMatchFilter=" + (new TlvBufferUtils.TlvIterable(0, 1, - mMatchFilter)).toString() + ", mPublishType=" + mPublishType + ", mPublishCount=" - + mPublishCount + ", mTtlSec=" + mTtlSec + ", mEnableTerminateNotification=" + mMatchFilter)).toString() + ", mPublishType=" + mPublishType + + ", mTtlSec=" + mTtlSec + ", mEnableTerminateNotification=" + mEnableTerminateNotification + "]"; } @@ -116,7 +112,6 @@ public final class PublishConfig implements Parcelable { dest.writeByteArray(mServiceSpecificInfo); dest.writeByteArray(mMatchFilter); dest.writeInt(mPublishType); - dest.writeInt(mPublishCount); dest.writeInt(mTtlSec); dest.writeInt(mEnableTerminateNotification ? 1 : 0); } @@ -133,11 +128,10 @@ public final class PublishConfig implements Parcelable { byte[] ssi = in.createByteArray(); byte[] matchFilter = in.createByteArray(); int publishType = in.readInt(); - int publishCount = in.readInt(); int ttlSec = in.readInt(); boolean enableTerminateNotification = in.readInt() != 0; - return new PublishConfig(serviceName, ssi, matchFilter, publishType, publishCount, + return new PublishConfig(serviceName, ssi, matchFilter, publishType, ttlSec, enableTerminateNotification); } }; @@ -156,7 +150,7 @@ public final class PublishConfig implements Parcelable { return Arrays.equals(mServiceName, lhs.mServiceName) && Arrays.equals(mServiceSpecificInfo, lhs.mServiceSpecificInfo) && Arrays.equals(mMatchFilter, lhs.mMatchFilter) - && mPublishType == lhs.mPublishType && mPublishCount == lhs.mPublishCount + && mPublishType == lhs.mPublishType && mTtlSec == lhs.mTtlSec && mEnableTerminateNotification == lhs.mEnableTerminateNotification; } @@ -169,7 +163,6 @@ public final class PublishConfig implements Parcelable { result = 31 * result + Arrays.hashCode(mServiceSpecificInfo); result = 31 * result + Arrays.hashCode(mMatchFilter); result = 31 * result + mPublishType; - result = 31 * result + mPublishCount; result = 31 * result + mTtlSec; result = 31 * result + (mEnableTerminateNotification ? 1 : 0); @@ -193,9 +186,6 @@ public final class PublishConfig implements Parcelable { if (mPublishType < PUBLISH_TYPE_UNSOLICITED || mPublishType > PUBLISH_TYPE_SOLICITED) { throw new IllegalArgumentException("Invalid publishType - " + mPublishType); } - if (mPublishCount < 0) { - throw new IllegalArgumentException("Invalid publishCount - must be non-negative"); - } if (mTtlSec < 0) { throw new IllegalArgumentException("Invalid ttlSec - must be non-negative"); } @@ -229,7 +219,6 @@ public final class PublishConfig implements Parcelable { private byte[] mServiceSpecificInfo; private byte[] mMatchFilter; private int mPublishType = PUBLISH_TYPE_UNSOLICITED; - private int mPublishCount = 0; private int mTtlSec = 0; private boolean mEnableTerminateNotification = true; @@ -316,30 +305,6 @@ public final class PublishConfig implements Parcelable { return this; } - /** - * Sets the number of times an unsolicited (configured using - * {@link PublishConfig.Builder#setPublishType(int)}) publish session - * will be broadcast. When the count is reached an event will be - * generated for {@link DiscoverySessionCallback#onSessionTerminated()} - * [unless {@link #setTerminateNotificationEnabled(boolean)} disables the callback]. - *

- * Optional. 0 by default - indicating the session doesn't terminate on its own. - * Session will be terminated when {@link DiscoverySession#destroy()} is - * called. - * - * @param publishCount Number of publish packets to broadcast. - * - * @return The builder to facilitate chaining - * {@code builder.setXXX(..).setXXX(..)}. - */ - public Builder setPublishCount(int publishCount) { - if (publishCount < 0) { - throw new IllegalArgumentException("Invalid publishCount - must be non-negative"); - } - mPublishCount = publishCount; - return this; - } - /** * Sets the time interval (in seconds) an unsolicited ( * {@link PublishConfig.Builder#setPublishType(int)}) publish session @@ -387,7 +352,7 @@ public final class PublishConfig implements Parcelable { */ public PublishConfig build() { return new PublishConfig(mServiceName, mServiceSpecificInfo, mMatchFilter, mPublishType, - mPublishCount, mTtlSec, mEnableTerminateNotification); + mTtlSec, mEnableTerminateNotification); } } } diff --git a/wifi/java/android/net/wifi/aware/SubscribeConfig.java b/wifi/java/android/net/wifi/aware/SubscribeConfig.java index 3397c4bc2ac37..97a6a3f91e866 100644 --- a/wifi/java/android/net/wifi/aware/SubscribeConfig.java +++ b/wifi/java/android/net/wifi/aware/SubscribeConfig.java @@ -93,9 +93,6 @@ public final class SubscribeConfig implements Parcelable { /** @hide */ public final int mSubscribeType; - /** @hide */ - public final int mSubscribeCount; - /** @hide */ public final int mTtlSec; @@ -107,13 +104,12 @@ public final class SubscribeConfig implements Parcelable { /** @hide */ public SubscribeConfig(byte[] serviceName, byte[] serviceSpecificInfo, byte[] matchFilter, - int subscribeType, int publichCount, int ttlSec, int matchStyle, + int subscribeType, int ttlSec, int matchStyle, boolean enableTerminateNotification) { mServiceName = serviceName; mServiceSpecificInfo = serviceSpecificInfo; mMatchFilter = matchFilter; mSubscribeType = subscribeType; - mSubscribeCount = publichCount; mTtlSec = ttlSec; mMatchStyle = matchStyle; mEnableTerminateNotification = enableTerminateNotification; @@ -125,7 +121,7 @@ public final class SubscribeConfig implements Parcelable { (mServiceSpecificInfo == null) ? "null" : HexEncoding.encode(mServiceSpecificInfo)) + ", mMatchFilter=" + (new TlvBufferUtils.TlvIterable(0, 1, mMatchFilter)).toString() + ", mSubscribeType=" + mSubscribeType - + ", mSubscribeCount=" + mSubscribeCount + ", mTtlSec=" + mTtlSec + ", mMatchType=" + + ", mTtlSec=" + mTtlSec + ", mMatchType=" + mMatchStyle + ", mEnableTerminateNotification=" + mEnableTerminateNotification + "]"; } @@ -141,7 +137,6 @@ public final class SubscribeConfig implements Parcelable { dest.writeByteArray(mServiceSpecificInfo); dest.writeByteArray(mMatchFilter); dest.writeInt(mSubscribeType); - dest.writeInt(mSubscribeCount); dest.writeInt(mTtlSec); dest.writeInt(mMatchStyle); dest.writeInt(mEnableTerminateNotification ? 1 : 0); @@ -159,12 +154,11 @@ public final class SubscribeConfig implements Parcelable { byte[] ssi = in.createByteArray(); byte[] matchFilter = in.createByteArray(); int subscribeType = in.readInt(); - int subscribeCount = in.readInt(); int ttlSec = in.readInt(); int matchStyle = in.readInt(); boolean enableTerminateNotification = in.readInt() != 0; - return new SubscribeConfig(serviceName, ssi, matchFilter, subscribeType, subscribeCount, + return new SubscribeConfig(serviceName, ssi, matchFilter, subscribeType, ttlSec, matchStyle, enableTerminateNotification); } }; @@ -183,7 +177,7 @@ public final class SubscribeConfig implements Parcelable { return Arrays.equals(mServiceName, lhs.mServiceName) && Arrays.equals(mServiceSpecificInfo, lhs.mServiceSpecificInfo) && Arrays.equals(mMatchFilter, lhs.mMatchFilter) - && mSubscribeType == lhs.mSubscribeType && mSubscribeCount == lhs.mSubscribeCount + && mSubscribeType == lhs.mSubscribeType && mTtlSec == lhs.mTtlSec && mMatchStyle == lhs.mMatchStyle && mEnableTerminateNotification == lhs.mEnableTerminateNotification; } @@ -196,7 +190,6 @@ public final class SubscribeConfig implements Parcelable { result = 31 * result + Arrays.hashCode(mServiceSpecificInfo); result = 31 * result + Arrays.hashCode(mMatchFilter); result = 31 * result + mSubscribeType; - result = 31 * result + mSubscribeCount; result = 31 * result + mTtlSec; result = 31 * result + mMatchStyle; result = 31 * result + (mEnableTerminateNotification ? 1 : 0); @@ -221,9 +214,6 @@ public final class SubscribeConfig implements Parcelable { if (mSubscribeType < SUBSCRIBE_TYPE_PASSIVE || mSubscribeType > SUBSCRIBE_TYPE_ACTIVE) { throw new IllegalArgumentException("Invalid subscribeType - " + mSubscribeType); } - if (mSubscribeCount < 0) { - throw new IllegalArgumentException("Invalid subscribeCount - must be non-negative"); - } if (mTtlSec < 0) { throw new IllegalArgumentException("Invalid ttlSec - must be non-negative"); } @@ -261,7 +251,6 @@ public final class SubscribeConfig implements Parcelable { private byte[] mServiceSpecificInfo; private byte[] mMatchFilter; private int mSubscribeType = SUBSCRIBE_TYPE_PASSIVE; - private int mSubscribeCount = 0; private int mTtlSec = 0; private int mMatchStyle = MATCH_STYLE_ALL; private boolean mEnableTerminateNotification = true; @@ -349,29 +338,6 @@ public final class SubscribeConfig implements Parcelable { return this; } - /** - * Sets the number of times an active ( - * {@link SubscribeConfig.Builder#setSubscribeType(int)}) subscribe session - * will broadcast. When the count is reached an event will be - * generated for {@link DiscoverySessionCallback#onSessionTerminated()}. - *

- * Optional. 0 by default - indicating the session doesn't terminate on its own. - * Session will be terminated when {@link DiscoverySession#destroy()} is - * called. - * - * @param subscribeCount Number of subscribe packets to broadcast. - * - * @return The builder to facilitate chaining - * {@code builder.setXXX(..).setXXX(..)}. - */ - public Builder setSubscribeCount(int subscribeCount) { - if (subscribeCount < 0) { - throw new IllegalArgumentException("Invalid subscribeCount - must be non-negative"); - } - mSubscribeCount = subscribeCount; - return this; - } - /** * Sets the time interval (in seconds) an active ( * {@link SubscribeConfig.Builder#setSubscribeType(int)}) subscribe session @@ -440,7 +406,7 @@ public final class SubscribeConfig implements Parcelable { */ public SubscribeConfig build() { return new SubscribeConfig(mServiceName, mServiceSpecificInfo, mMatchFilter, - mSubscribeType, mSubscribeCount, mTtlSec, mMatchStyle, + mSubscribeType, mTtlSec, mMatchStyle, mEnableTerminateNotification); } } diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java index 4387b0c1dd295..830db22929e8c 100644 --- a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java +++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java @@ -688,7 +688,6 @@ public class WifiAwareManagerTest { collector.checkThat("mServiceName", subscribeConfig.mServiceName, equalTo(null)); collector.checkThat("mSubscribeType", subscribeConfig.mSubscribeType, equalTo(SubscribeConfig.SUBSCRIBE_TYPE_PASSIVE)); - collector.checkThat("mSubscribeCount", subscribeConfig.mSubscribeCount, equalTo(0)); collector.checkThat("mTtlSec", subscribeConfig.mTtlSec, equalTo(0)); collector.checkThat("mMatchStyle", subscribeConfig.mMatchStyle, equalTo(SubscribeConfig.MATCH_STYLE_ALL)); @@ -711,7 +710,7 @@ public class WifiAwareManagerTest { .setServiceSpecificInfo(serviceSpecificInfo.getBytes()).setMatchFilter( new TlvBufferUtils.TlvIterable(0, 1, matchFilter).toList()) .setSubscribeType(subscribeType) - .setSubscribeCount(subscribeCount).setTtlSec(subscribeTtl).setMatchStyle(matchStyle) + .setTtlSec(subscribeTtl).setMatchStyle(matchStyle) .setTerminateNotificationEnabled(enableTerminateNotification).build(); collector.checkThat("mServiceName", serviceName.getBytes(), @@ -721,8 +720,6 @@ public class WifiAwareManagerTest { collector.checkThat("mMatchFilter", matchFilter, equalTo(subscribeConfig.mMatchFilter)); collector.checkThat("mSubscribeType", subscribeType, equalTo(subscribeConfig.mSubscribeType)); - collector.checkThat("mSubscribeCount", subscribeCount, - equalTo(subscribeConfig.mSubscribeCount)); collector.checkThat("mTtlSec", subscribeTtl, equalTo(subscribeConfig.mTtlSec)); collector.checkThat("mMatchStyle", matchStyle, equalTo(subscribeConfig.mMatchStyle)); collector.checkThat("mEnableTerminateNotification", enableTerminateNotification, @@ -744,7 +741,7 @@ public class WifiAwareManagerTest { .setServiceSpecificInfo(serviceSpecificInfo.getBytes()).setMatchFilter( new TlvBufferUtils.TlvIterable(0, 1, matchFilter).toList()) .setSubscribeType(subscribeType) - .setSubscribeCount(subscribeCount).setTtlSec(subscribeTtl).setMatchStyle(matchStyle) + .setTtlSec(subscribeTtl).setMatchStyle(matchStyle) .setTerminateNotificationEnabled(enableTerminateNotification).build(); Parcel parcelW = Parcel.obtain(); @@ -765,11 +762,6 @@ public class WifiAwareManagerTest { new SubscribeConfig.Builder().setSubscribeType(10); } - @Test(expected = IllegalArgumentException.class) - public void testSubscribeConfigBuilderNegativeCount() { - new SubscribeConfig.Builder().setSubscribeCount(-1); - } - @Test(expected = IllegalArgumentException.class) public void testSubscribeConfigBuilderNegativeTtl() { new SubscribeConfig.Builder().setTtlSec(-100); @@ -794,7 +786,6 @@ public class WifiAwareManagerTest { collector.checkThat("mServiceName", publishConfig.mServiceName, equalTo(null)); collector.checkThat("mPublishType", publishConfig.mPublishType, equalTo(PublishConfig.PUBLISH_TYPE_UNSOLICITED)); - collector.checkThat("mPublishCount", publishConfig.mPublishCount, equalTo(0)); collector.checkThat("mTtlSec", publishConfig.mTtlSec, equalTo(0)); collector.checkThat("mEnableTerminateNotification", publishConfig.mEnableTerminateNotification, equalTo(true)); @@ -814,7 +805,7 @@ public class WifiAwareManagerTest { .setServiceSpecificInfo(serviceSpecificInfo.getBytes()).setMatchFilter( new TlvBufferUtils.TlvIterable(0, 1, matchFilter).toList()) .setPublishType(publishType) - .setPublishCount(publishCount).setTtlSec(publishTtl) + .setTtlSec(publishTtl) .setTerminateNotificationEnabled(enableTerminateNotification).build(); collector.checkThat("mServiceName", serviceName.getBytes(), @@ -823,7 +814,6 @@ public class WifiAwareManagerTest { serviceSpecificInfo.getBytes(), equalTo(publishConfig.mServiceSpecificInfo)); collector.checkThat("mMatchFilter", matchFilter, equalTo(publishConfig.mMatchFilter)); collector.checkThat("mPublishType", publishType, equalTo(publishConfig.mPublishType)); - collector.checkThat("mPublishCount", publishCount, equalTo(publishConfig.mPublishCount)); collector.checkThat("mTtlSec", publishTtl, equalTo(publishConfig.mTtlSec)); collector.checkThat("mEnableTerminateNotification", enableTerminateNotification, equalTo(publishConfig.mEnableTerminateNotification)); @@ -843,7 +833,7 @@ public class WifiAwareManagerTest { .setServiceSpecificInfo(serviceSpecificInfo.getBytes()).setMatchFilter( new TlvBufferUtils.TlvIterable(0, 1, matchFilter).toList()) .setPublishType(publishType) - .setPublishCount(publishCount).setTtlSec(publishTtl) + .setTtlSec(publishTtl) .setTerminateNotificationEnabled(enableTerminateNotification).build(); Parcel parcelW = Parcel.obtain(); @@ -864,11 +854,6 @@ public class WifiAwareManagerTest { new PublishConfig.Builder().setPublishType(5); } - @Test(expected = IllegalArgumentException.class) - public void testPublishConfigBuilderNegativeCount() { - new PublishConfig.Builder().setPublishCount(-4); - } - @Test(expected = IllegalArgumentException.class) public void testPublishConfigBuilderNegativeTtl() { new PublishConfig.Builder().setTtlSec(-10);