diff options
author | Michael Plass <mplass@google.com> | 2018-05-07 16:39:04 -0700 |
---|---|---|
committer | Michael Plass <mplass@google.com> | 2018-05-21 11:06:22 -0700 |
commit | 0e5fc47e8d6585855927fe8485c924cce2c5c4f7 (patch) | |
tree | 453031148537ded69b2d4e21188ee04e10f60ac5 | |
parent | e93744bec9cb63b00b4597d49a20378749634358 (diff) | |
download | wifi-0e5fc47e8d6585855927fe8485c924cce2c5c4f7.tar.gz |
Add wifi ScoringParams expid
Add an experiment identifier to wifi ScoringParams.
Also add a method to return a digest of the parameter values, which may
be useful for checking the accuracy of the expid label.
Bug: 79482323
Test: Unit tests added
Change-Id: Ic34c471b978576b734443fb93590809f45ae4c24
-rw-r--r-- | service/java/com/android/server/wifi/ScoringParams.java | 38 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/ScoringParamsTest.java | 40 |
2 files changed, 73 insertions, 5 deletions
diff --git a/service/java/com/android/server/wifi/ScoringParams.java b/service/java/com/android/server/wifi/ScoringParams.java index 5b9951ff8..6c42faf6b 100644 --- a/service/java/com/android/server/wifi/ScoringParams.java +++ b/service/java/com/android/server/wifi/ScoringParams.java @@ -27,6 +27,11 @@ import android.util.Log; import com.android.internal.R; +import libcore.util.HexEncoding; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + /** * Holds parameters used for scoring networks. * @@ -70,6 +75,12 @@ public class ScoringParams { public static final int MAX_NUD = 10; public int nud = 8; + /** Experiment identifier */ + public static final String KEY_EXPID = "expid"; + public static final int MIN_EXPID = 0; + public static final int MAX_EXPID = Integer.MAX_VALUE; + public int expid = 0; + Values() { } @@ -85,6 +96,7 @@ public class ScoringParams { } horizon = source.horizon; nud = source.nud; + expid = source.expid; } public void validate() throws IllegalArgumentException { @@ -93,6 +105,7 @@ public class ScoringParams { validateOrderedNonNegativeArray(pps); validateRange(horizon, MIN_HORIZON, MAX_HORIZON); validateRange(nud, MIN_NUD, MAX_NUD); + validateRange(expid, MIN_EXPID, MAX_EXPID); } private void validateRssiArray(int[] rssi) throws IllegalArgumentException { @@ -131,6 +144,7 @@ public class ScoringParams { updateIntArray(pps, parser, KEY_PPS); horizon = updateInt(parser, KEY_HORIZON, horizon); nud = updateInt(parser, KEY_NUD, nud); + expid = updateInt(parser, KEY_EXPID, expid); } private int updateInt(KeyValueListParser parser, String key, int defaultValue) @@ -168,6 +182,8 @@ public class ScoringParams { sb.append(horizon); appendKey(sb, KEY_NUD); sb.append(nud); + appendKey(sb, KEY_EXPID); + sb.append(expid); return sb.toString(); } @@ -352,6 +368,15 @@ public class ScoringParams { return mVal.nud; } + /** + * Returns the experiment identifier. + * + * This value may be used to tag a set of experimental settings. + */ + public int getExperimentIdentifier() { + return mVal.expid; + } + private static final int MINIMUM_5GHZ_BAND_FREQUENCY_IN_MEGAHERTZ = 5000; private int[] getRssiArray(int frequency) { @@ -366,4 +391,17 @@ public class ScoringParams { public String toString() { return mVal.toString(); } + + /** + * Calculates the SHA-256 digest of the scoring params, encoded in hex. + */ + public String hexDigest() { + String digest = null; + try { + MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(mVal.toString().getBytes()); + digest = HexEncoding.encodeToString(messageDigest.digest()); + } catch (NoSuchAlgorithmException e) { } + return digest; + } } diff --git a/tests/wifitests/src/com/android/server/wifi/ScoringParamsTest.java b/tests/wifitests/src/com/android/server/wifi/ScoringParamsTest.java index fc9b33ad2..fb7f868a7 100644 --- a/tests/wifitests/src/com/android/server/wifi/ScoringParamsTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ScoringParamsTest.java @@ -49,7 +49,10 @@ import org.mockito.Spy; @SmallTest public class ScoringParamsTest { - ScoringParams mScoringParams; + private static final String EXPECTED_DEFAULTS = + "rssi2=-83:-80:-73:-60,rssi5=-80:-77:-70:-57,pps=0:1:100,horizon=15,nud=8,expid=0"; + + private ScoringParams mScoringParams; /** * Sets up for unit test @@ -93,20 +96,30 @@ public class ScoringParamsTest { @Test public void testToString() throws Exception { mScoringParams = new ScoringParams(); - String expect = - "rssi2=-83:-80:-73:-60,rssi5=-80:-77:-70:-57,pps=0:1:100,horizon=15,nud=8"; + String expect = EXPECTED_DEFAULTS; String actual = mScoringParams.toString(); assertEquals(expect, actual); } /** + * Test hexDigest + */ + @Test + public void testHexDigest() throws Exception { + mScoringParams = new ScoringParams(); + //hint: printf %s "$EXPECTED_DEFAULTS" | openssl dgst -hex -sha256 + String expect = "BC3DB98DD8DD16C251FE9A0592444106B8FB09026D66558242196C7E81D1FAC2"; + String actual = mScoringParams.hexDigest(); + assertEquals(expect, actual); + } + + /** * Test complete update */ @Test public void testUpdateEverything() throws Exception { mScoringParams = new ScoringParams(); - String params = - "rssi2=-86:-84:-77:-10,rssi5=-88:-77:-66:-55,pps=1:10:30,horizon=3,nud=3"; + String params = EXPECTED_DEFAULTS.replaceAll("8", "9"); assertTrue(mScoringParams.update(params)); assertEquals(params, mScoringParams.toString()); } @@ -200,6 +213,22 @@ public class ScoringParamsTest { } /** + * Test that expid is hooked up, including effect on digest + */ + @Test + public void testExperimentIdentifier() throws Exception { + mScoringParams = new ScoringParams(); + String digestBefore = mScoringParams.hexDigest(); + assertEquals(0, mScoringParams.getExperimentIdentifier()); + assertTrue(mScoringParams.update("expid=99")); + assertEquals(99, mScoringParams.getExperimentIdentifier()); + String digestAfter = mScoringParams.hexDigest(); + assertTrue(!digestBefore.equals(digestAfter)); + assertTrue(mScoringParams.update("expid=0")); + assertEquals(digestBefore, mScoringParams.hexDigest()); + } + + /** * Check character set */ @Test @@ -225,6 +254,7 @@ public class ScoringParamsTest { assertEquals(param100.substring(0, 90), mScoringParams.sanitize(param100 + "00000000000").substring(0, 90)); assertEquals("q?=???", mScoringParams.sanitize("q\b= ~[")); + assertEquals("", mScoringParams.sanitize(null)); } /** |