summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Plass <mplass@google.com>2018-05-07 16:39:04 -0700
committerMichael Plass <mplass@google.com>2018-05-21 11:06:22 -0700
commit0e5fc47e8d6585855927fe8485c924cce2c5c4f7 (patch)
tree453031148537ded69b2d4e21188ee04e10f60ac5
parente93744bec9cb63b00b4597d49a20378749634358 (diff)
downloadwifi-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.java38
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ScoringParamsTest.java40
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));
}
/**