From 79f5dc6b4ddfd4aad127ee6a726120301f76c44d Mon Sep 17 00:00:00 2001 From: Xiao Ma Date: Fri, 11 Aug 2023 15:53:49 +0900 Subject: [PATCH 1/5] Remove the VisibleForTesting annotation on IaPrefixOption constructor. Fix AndroidLint warning in aosp/2691418. Bug: 260934173 Test: TH Change-Id: Idfaff1342931d6c3ebfd3aa2fea02ab3ed5bb6f1 --- .../com/android/net/module/util/structs/IaPrefixOption.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/staticlibs/device/com/android/net/module/util/structs/IaPrefixOption.java b/staticlibs/device/com/android/net/module/util/structs/IaPrefixOption.java index f0e4409850..59d655ca8b 100644 --- a/staticlibs/device/com/android/net/module/util/structs/IaPrefixOption.java +++ b/staticlibs/device/com/android/net/module/util/structs/IaPrefixOption.java @@ -18,8 +18,6 @@ package com.android.net.module.util.structs; import static com.android.net.module.util.NetworkStackConstants.DHCP6_OPTION_IAPREFIX; -import androidx.annotation.VisibleForTesting; - import com.android.net.module.util.Struct; import com.android.net.module.util.Struct.Field; import com.android.net.module.util.Struct.Type; @@ -69,7 +67,6 @@ public class IaPrefixOption extends Struct { @Field(order = 5, type = Type.ByteArray, arraysize = 16) public final byte[] prefix; - @VisibleForTesting public IaPrefixOption(final short code, final short length, final long preferred, final long valid, final byte prefixLen, final byte[] prefix) { this.code = code; From a3f942de444ead57940a1855b0571c031122d5cf Mon Sep 17 00:00:00 2001 From: Xiao Ma Date: Mon, 7 Aug 2023 12:35:58 +0900 Subject: [PATCH 2/5] Add IA Address option struct. Bug: 293393743 Test: m Change-Id: Id4ab164579a95b87fa8a8d1d00447c6a3bd394d5 --- .../module/util/structs/IaAddressOption.java | 84 +++++++++++++++++++ .../module/util/NetworkStackConstants.java | 1 + 2 files changed, 85 insertions(+) create mode 100644 staticlibs/device/com/android/net/module/util/structs/IaAddressOption.java diff --git a/staticlibs/device/com/android/net/module/util/structs/IaAddressOption.java b/staticlibs/device/com/android/net/module/util/structs/IaAddressOption.java new file mode 100644 index 0000000000..575a1f367f --- /dev/null +++ b/staticlibs/device/com/android/net/module/util/structs/IaAddressOption.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed 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 com.android.net.module.util.structs; + +import static com.android.net.module.util.NetworkStackConstants.DHCP6_OPTION_IA_ADDR; + +import com.android.net.module.util.Struct; +import com.android.net.module.util.Struct.Field; +import com.android.net.module.util.Struct.Type; + +import java.net.Inet6Address; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +/** + * DHCPv6 IA Address option. + * https://tools.ietf.org/html/rfc8415. This does not contain any option. + * + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | OPTION_IAADDR | option-len | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | | + * | IPv6-address | + * | | + * | | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | preferred-lifetime | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | valid-lifetime | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * . . + * . IAaddr-options . + * . . + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +public class IaAddressOption extends Struct { + public static final int LENGTH = 24; // option length excluding IAaddr-options + + @Field(order = 0, type = Type.S16) + public final short code; + @Field(order = 1, type = Type.S16) + public final short length; + @Field(order = 2, type = Type.Ipv6Address) + public final Inet6Address address; + @Field(order = 3, type = Type.U32) + public final long preferred; + @Field(order = 4, type = Type.U32) + public final long valid; + + IaAddressOption(final short code, final short length, final Inet6Address address, + final long preferred, final long valid) { + this.code = code; + this.length = length; + this.address = address; + this.preferred = preferred; + this.valid = valid; + } + + /** + * Build an IA Address option from the required specific parameters. + */ + public static ByteBuffer build(final short length, final long id, final Inet6Address address, + final long preferred, final long valid) { + final IaAddressOption option = new IaAddressOption((short) DHCP6_OPTION_IA_ADDR, + length /* 24 + IAaddr-options length */, address, preferred, valid); + return ByteBuffer.wrap(option.writeToBytes(ByteOrder.BIG_ENDIAN)); + } +} diff --git a/staticlibs/framework/com/android/net/module/util/NetworkStackConstants.java b/staticlibs/framework/com/android/net/module/util/NetworkStackConstants.java index 9149160596..f9895c608c 100644 --- a/staticlibs/framework/com/android/net/module/util/NetworkStackConstants.java +++ b/staticlibs/framework/com/android/net/module/util/NetworkStackConstants.java @@ -240,6 +240,7 @@ public final class NetworkStackConstants { public static final int DHCP6_SERVER_PORT = 547; public static final Inet6Address ALL_DHCP_RELAY_AGENTS_AND_SERVERS = (Inet6Address) InetAddresses.parseNumericAddress("ff02::1:2"); + public static final int DHCP6_OPTION_IA_ADDR = 5; public static final int DHCP6_OPTION_IA_PD = 25; public static final int DHCP6_OPTION_IAPREFIX = 26; From 6a22207190409013fc332e5f1d6033ce14f21484 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Tue, 15 Aug 2023 16:28:34 +0900 Subject: [PATCH 3/5] Remove unnecessary arguments from isTetheringFeatureEnabled Test: m Bug: 279108992 Change-Id: Iadc1b4665c364bf754ed32e7bb53b78e555ed457 --- .../net/module/util/DeviceConfigUtils.java | 20 ++--- .../module/util/DeviceConfigUtilsTest.java | 76 +++++++++---------- 2 files changed, 44 insertions(+), 52 deletions(-) diff --git a/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java b/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java index fb130f6740..771d44fa9e 100644 --- a/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java +++ b/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java @@ -200,24 +200,20 @@ public final class DeviceConfigUtils { * * This is useful to ensure that if a module install is rolled back, flags are not left fully * rolled out on a version where they have not been well tested. + * + * If the feature is disabled by default and enabled by flag push, this method should be used. + * If the feature is enabled by default and disabled by flag push (kill switch), + * {@link #isTetheringFeatureNotChickenedOut(String)} should be used. + * * @param context The global context information about an app environment. - * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. - * @param moduleName The mainline module name which is released as apex. - * @param defaultEnabled The value to return if the property does not exist or its value is - * null. * @return true if this feature is enabled, or false if disabled. */ public static boolean isTetheringFeatureEnabled(@NonNull Context context, - @NonNull String namespace, @NonNull String name, @NonNull String moduleName, - boolean defaultEnabled) { - // TODO: migrate callers to a non-generic isTetheringFeatureEnabled method. - if (!TETHERING_MODULE_NAME.equals(moduleName)) { - throw new IllegalArgumentException( - "This method is only usable by the tethering module"); - } + @NonNull String name) { final long packageVersion = getTetheringModuleVersion(context); - return isFeatureEnabled(context, packageVersion, namespace, name, defaultEnabled); + return isFeatureEnabled(context, packageVersion, NAMESPACE_TETHERING, name, + false /* defaultEnabled */); } private static boolean isFeatureEnabled(@NonNull Context context, long packageVersion, diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java b/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java index f259e687e0..7a71a4ae1e 100644 --- a/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java +++ b/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java @@ -84,7 +84,6 @@ public class DeviceConfigUtilsTest { // that manifest, and is reflected in android.content.pm.ApplicationInfo. Contrary to the APEX // (module) name, different package names are typically used to identify the organization that // built and signed the APEX modules. - private static final String TEST_APEX_NAME = "com.android.tethering"; private static final String TEST_APEX_PACKAGE_NAME = "com.prefix.android.tethering"; private static final String TEST_GO_APEX_PACKAGE_NAME = "com.prefix.android.go.tethering"; private static final String TEST_CONNRES_PACKAGE_NAME = @@ -230,24 +229,24 @@ public class DeviceConfigUtilsTest { @Test public void testFeatureIsEnabled() { - doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); + doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + TEST_EXPERIMENT_FLAG)); + doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @Test public void testFeatureDefaultEnabled() { - doReturn(null).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); + doReturn(null).when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + TEST_EXPERIMENT_FLAG)); + doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, true /* defaultEnabled */)); + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @Test @@ -255,32 +254,33 @@ public class DeviceConfigUtilsTest { doThrow(NameNotFoundException.class).when(mPm).getPackageInfo(anyString(), anyInt()); // Feature should be enabled by flag value "1". - doReturn("1").when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); + doReturn("1").when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + TEST_EXPERIMENT_FLAG)); + doReturn("1").when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); // Feature should be disabled by flag value "999999999". - doReturn("999999999").when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); + doReturn("999999999").when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + TEST_EXPERIMENT_FLAG)); + doReturn("999999999").when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); // Follow defaultEnabled if the flag is not set - doReturn(null).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); + doReturn(null).when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + TEST_EXPERIMENT_FLAG)); + doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, false /* defaultEnabled */)); assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, true /* defaultEnabled */)); - assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, true /* defaultEnabled */)); + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @Test @@ -290,19 +290,17 @@ public class DeviceConfigUtilsTest { doReturn(mApexPackageInfo).when(mPm).getPackageInfo( eq(TEST_GO_APEX_PACKAGE_NAME), anyInt()); doReturn("0").when(() -> DeviceConfig.getProperty( - eq(TEST_NAME_SPACE), eq(TEST_EXPERIMENT_FLAG))); + TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); + doReturn("0").when(() -> DeviceConfig.getProperty( + NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, true /* defaultEnabled */)); + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); - doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); + doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @Test @@ -322,12 +320,10 @@ public class DeviceConfigUtilsTest { @Test public void testFeatureIsEnabledCaching_APEX() throws Exception { - doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); + doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, + TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); // Package info is only queried once verify(mPm, times(1)).getPackageInfo(anyString(), anyInt()); From e323c1db813147ace0c0255d3d86a7634a6e7407 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Tue, 15 Aug 2023 17:27:47 +0900 Subject: [PATCH 4/5] Rename to isNetworkStackFeatureEnabled DeviceConfigUtils had isFeatureEnabled for NetworkStack and Tethering which were confusing since the difference was only the arguments. This CL renames isFeatureEnabled for NetworkStack module to isNetworkStackFeatureEnabled to avoid confusion. This CL also removes unnecessary arguments. Bug: 279108992 Test: m Change-Id: I523b98bd3754c209c64ce7d1513b5afcb36599b9 --- .../net/module/util/DeviceConfigUtils.java | 11 ++-- .../module/util/DeviceConfigUtilsTest.java | 53 +++++++++---------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java b/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java index 771d44fa9e..e646f37a6e 100644 --- a/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java +++ b/staticlibs/device/com/android/net/module/util/DeviceConfigUtils.java @@ -162,13 +162,12 @@ public final class DeviceConfigUtils { * This is useful to ensure that if a module install is rolled back, flags are not left fully * rolled out on a version where they have not been well tested. * @param context The global context information about an app environment. - * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return true if this feature is enabled, or false if disabled. */ - public static boolean isFeatureEnabled(@NonNull Context context, @NonNull String namespace, + public static boolean isNetworkStackFeatureEnabled(@NonNull Context context, @NonNull String name) { - return isFeatureEnabled(context, namespace, name, false /* defaultEnabled */); + return isNetworkStackFeatureEnabled(context, name, false /* defaultEnabled */); } /** @@ -180,16 +179,16 @@ public final class DeviceConfigUtils { * This is useful to ensure that if a module install is rolled back, flags are not left fully * rolled out on a version where they have not been well tested. * @param context The global context information about an app environment. - * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultEnabled The value to return if the property does not exist or its value is * null. * @return true if this feature is enabled, or false if disabled. */ - public static boolean isFeatureEnabled(@NonNull Context context, @NonNull String namespace, + public static boolean isNetworkStackFeatureEnabled(@NonNull Context context, @NonNull String name, boolean defaultEnabled) { final long packageVersion = getPackageVersion(context); - return isFeatureEnabled(context, packageVersion, namespace, name, defaultEnabled); + return isFeatureEnabled(context, packageVersion, NAMESPACE_CONNECTIVITY, name, + defaultEnabled); } /** diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java b/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java index 7a71a4ae1e..5a96bcbb04 100644 --- a/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java +++ b/staticlibs/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java @@ -228,24 +228,26 @@ public class DeviceConfigUtilsTest { } @Test - public void testFeatureIsEnabled() { - doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + public void testIsNetworkStackFeatureEnabled() { + doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); + } + + @Test + public void testIsTetheringFeatureEnabled() { doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG)); assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @Test public void testFeatureDefaultEnabled() { - doReturn(null).when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG)); + assertFalse(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @@ -254,32 +256,30 @@ public class DeviceConfigUtilsTest { doThrow(NameNotFoundException.class).when(mPm).getPackageInfo(anyString(), anyInt()); // Feature should be enabled by flag value "1". - doReturn("1").when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + doReturn("1").when(() -> DeviceConfig.getProperty(NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); doReturn("1").when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); // Feature should be disabled by flag value "999999999". - doReturn("999999999").when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + doReturn("999999999").when(() -> DeviceConfig.getProperty(NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); doReturn("999999999").when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG)); + assertFalse(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); // Follow defaultEnabled if the flag is not set - doReturn(null).when(() -> DeviceConfig.getProperty(TEST_NAME_SPACE, + doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG, true /* defaultEnabled */)); + assertFalse(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG, + false /* defaultEnabled */)); + assertTrue(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG, + true /* defaultEnabled */)); assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); } @@ -290,12 +290,11 @@ public class DeviceConfigUtilsTest { doReturn(mApexPackageInfo).when(mPm).getPackageInfo( eq(TEST_GO_APEX_PACKAGE_NAME), anyInt()); doReturn("0").when(() -> DeviceConfig.getProperty( - TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); + NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); doReturn("0").when(() -> DeviceConfig.getProperty( NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG)); + assertFalse(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, @@ -304,13 +303,11 @@ public class DeviceConfigUtilsTest { } @Test - public void testFeatureIsEnabledCaching_APK() throws Exception { - doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), - eq(TEST_EXPERIMENT_FLAG))); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, - TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + public void testIsNetworkStackFeatureEnabledCaching() throws Exception { + doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_CONNECTIVITY, TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); + assertTrue(DeviceConfigUtils.isNetworkStackFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); // Package info is only queried once verify(mContext, times(1)).getPackageManager(); @@ -319,7 +316,7 @@ public class DeviceConfigUtilsTest { } @Test - public void testFeatureIsEnabledCaching_APEX() throws Exception { + public void testIsTetheringFeatureEnabledCaching() throws Exception { doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING, TEST_EXPERIMENT_FLAG)); assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_EXPERIMENT_FLAG)); From 325f675273d9f20252674d56ce74ea8e74169806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Wed, 6 Sep 2023 23:50:47 +0000 Subject: [PATCH 5/5] fix a compile warning about out of order field init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit http://cs/h/prodkernel/kernel/upstream/torvalds/linux-2.6/+/master:tools/include/uapi/linux/bpf.h?l=1486 struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */ __u32 prog_fd; __u32 retval; __u32 data_size_in; __u32 data_size_out; __aligned_u64 data_in; __aligned_u64 data_out; ... Test: TreeHugger Signed-off-by: Maciej Żenczykowski Change-Id: I2c08b65bdcdbd7fb9872b6d4cbbf542fe28ef916 --- .../native/bpf_syscall_wrappers/include/BpfSyscallWrappers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staticlibs/native/bpf_syscall_wrappers/include/BpfSyscallWrappers.h b/staticlibs/native/bpf_syscall_wrappers/include/BpfSyscallWrappers.h index ba16d53cb7..13f7cb396c 100644 --- a/staticlibs/native/bpf_syscall_wrappers/include/BpfSyscallWrappers.h +++ b/staticlibs/native/bpf_syscall_wrappers/include/BpfSyscallWrappers.h @@ -175,8 +175,8 @@ inline int runProgram(const BPF_FD_TYPE prog_fd, const void* data, return bpf(BPF_PROG_RUN, { .test = { .prog_fd = BPF_FD_TO_U32(prog_fd), - .data_in = ptr_to_u64(data), .data_size_in = data_size, + .data_in = ptr_to_u64(data), }, }); }