Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8836855 authored by Hai Shalom's avatar Hai Shalom
Browse files

[Passpoint] Fix credential unique ID calculation

Fix credential unique ID to allow multiple instances of same
credential type.

Bug: 151478195
Test: atest CredentialTest PasspointConfigurationTest
Change-Id: Ie99fe0430aa31ee7d461150eca5c9ce718f75aaf
parent 83d02a97
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -1037,18 +1037,7 @@ public final class Credential implements Parcelable {
     * @return a Unique identifier for a Credential object
     */
    public int getUniqueId() {
        int usedCredential;

        // Initialize usedCredential based on the credential type of the profile
        if (mUserCredential != null) {
            usedCredential = 0;
        } else if (mCertCredential != null) {
            usedCredential = 1;
        } else {
            usedCredential = 2;
        }

        return Objects.hash(usedCredential, mRealm);
        return Objects.hash(mUserCredential, mCertCredential, mSimCredential, mRealm);
    }

    @Override
+65 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.net.wifi.hotspot2.pps;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;

import android.net.wifi.EAPConstants;
@@ -551,4 +552,68 @@ public class CredentialTest {
    public void validateTwoCertificateDifferent() {
        assertFalse(Credential.isX509CertificateEquals(FakeKeys.CA_CERT0, FakeKeys.CA_CERT1));
    }

    /**
     * Verify that unique identifiers are the same for objects with the same credentials
     */
    @Test
    public void testUniqueIdSameCredentialTypes() throws Exception {
        assertEquals(createCredentialWithSimCredential().getUniqueId(),
                createCredentialWithSimCredential().getUniqueId());
        assertEquals(createCredentialWithCertificateCredential().getUniqueId(),
                createCredentialWithCertificateCredential().getUniqueId());
        assertEquals(createCredentialWithUserCredential().getUniqueId(),
                createCredentialWithUserCredential().getUniqueId());
    }

    /**
     * Verify that unique identifiers are different for each credential
     */
    @Test
    public void testUniqueIdDifferentForDifferentCredentialTypes() throws Exception {
        Credential simCred = createCredentialWithSimCredential();
        Credential certCred = createCredentialWithCertificateCredential();
        Credential userCred = createCredentialWithUserCredential();

        assertNotEquals(simCred.getUniqueId(), userCred.getUniqueId());
        assertNotEquals(simCred.getUniqueId(), certCred.getUniqueId());
        assertNotEquals(certCred.getUniqueId(), userCred.getUniqueId());
    }

    /**
     * Verify that unique identifiers are different for a credential with different values
     */
    @Test
    public void testUniqueIdDifferentForSimCredentialsWithDifferentValues() throws Exception {
        Credential simCred1 = createCredentialWithSimCredential();
        Credential simCred2 = createCredentialWithSimCredential();
        simCred2.getSimCredential().setImsi("567890*");

        assertNotEquals(simCred1.getUniqueId(), simCred2.getUniqueId());
    }

    /**
     * Verify that unique identifiers are different for a credential with different values
     */
    @Test
    public void testUniqueIdDifferentForUserCredentialsWithDifferentValues() throws Exception {
        Credential userCred1 = createCredentialWithUserCredential();
        Credential userCred2 = createCredentialWithUserCredential();
        userCred2.getUserCredential().setUsername("anotheruser");

        assertNotEquals(userCred1.getUniqueId(), userCred2.getUniqueId());
    }

    /**
     * Verify that unique identifiers are different for a credential with different values
     */
    @Test
    public void testUniqueIdDifferentForCertCredentialsWithDifferentValues() throws Exception {
        Credential certCred1 = createCredentialWithCertificateCredential();
        Credential certCred2 = createCredentialWithCertificateCredential();
        certCred2.getCertCredential().setCertSha256Fingerprint(
                MessageDigest.getInstance("SHA-256").digest(FakeKeys.CA_CERT0.getEncoded()));

        assertNotEquals(certCred1.getUniqueId(), certCred2.getUniqueId());
    }
}