10aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root/*
20aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * Copyright (C) 2011 The Android Open Source Project
30aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root *
40aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
50aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * you may not use this file except in compliance with the License.
60aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * You may obtain a copy of the License at
70aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root *
80aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root *      http://www.apache.org/licenses/LICENSE-2.0
90aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root *
100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * Unless required by applicable law or agreed to in writing, software
110aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
120aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * See the License for the specific language governing permissions and
140aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * limitations under the License.
150aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root */
160aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
170aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootpackage android.content.pm;
180aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
190aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport android.os.Parcel;
20bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikasimport android.support.test.filters.LargeTest;
210aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
220aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport java.util.Random;
230aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
24bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikas@LargeTest
250aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootpublic class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
260aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_1 = 0x7A5F00FF5A55AAA5L;
270aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
280aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_1_ENCODED = "HUXY-A75N-FLKV-F";
290aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
30a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    private static final String TEST_1_ENCODED_LOWERCASE = "huxy-a75n-flkv-f";
31a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
320aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_2 = 0x5A05FF5A05F0A555L;
330aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
340aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_MAXVALUE = Long.MAX_VALUE;
350aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
360aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_MAXVALUE_ENCODED = "H777-7777-7777-7";
370aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
380aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_MINVALUE = Long.MIN_VALUE;
390aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
400aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_MINVALUE_ENCODED = "IAAA-AAAA-AAAA-A";
410aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
420aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_ZERO = 0L;
430aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
440aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_ZERO_ENCODED = "AAAA-AAAA-AAAA-A";
450aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_NEGONE = -1L;
470aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
480aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_NEGONE_ENCODED = "P777-7777-7777-7";
490aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
500aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_OVERFLOW_ENCODED = "QAAA-AAAA-AAAA-A";
510aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
52a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    private static final String TEST_SUBSTITUTION_CORRECTED = "OIIO-IIOO-IOOI-I";
53a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
54a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    private static final String TEST_SUBSTITUTION_UNCORRECTED = "0110-1100-1001-1";
55a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
560aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Equals_Success() {
570aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
580aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = new VerifierDeviceIdentity(TEST_1);
590aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
600aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertTrue("The two VerifierDeviceIdentity instances should be equal", id1.equals(id2));
610aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
620aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
630aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Equals_Failure() {
640aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
650aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = new VerifierDeviceIdentity(TEST_2);
660aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
670aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertFalse("The two VerifierDeviceIdentity instances should be unique", id1.equals(id2));
680aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
690aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
700aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_HashCode() {
710aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
720aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
730aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The VerifierDeviceIdentity should have the same hashcode as its identity",
740aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                (int) TEST_1, id1.hashCode());
750aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
760aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
770aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_Success() {
780aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
790aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
800aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
810aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_1_ENCODED, id1.toString());
820aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
830aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
840aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_Largest() {
850aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MAXVALUE);
860aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
870aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
880aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_MAXVALUE_ENCODED, id1.toString());
890aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
900aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
910aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_Zero() {
920aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_ZERO);
930aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
940aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
950aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_ZERO_ENCODED, id1.toString());
960aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
970aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
980aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_NegOne() {
990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_NEGONE);
1000aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
1020aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_NEGONE_ENCODED, id1.toString());
1030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_MinValue() {
1060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MINVALUE);
1070aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1080aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
1090aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_MINVALUE_ENCODED, id1.toString());
1100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1110aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1120aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parcel_ReadNegative() {
1130aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MINVALUE);
1140aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1150aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        Parcel parcel = Parcel.obtain();
1160aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        parcel.writeLong(TEST_MINVALUE);
1170aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        parcel.setDataPosition(0);
1180aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1190aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.CREATOR.createFromParcel(parcel);
1200aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1210aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Parcel created should match expected value", id1, id2);
1220aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1230aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1240aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parcel_Read_Pass() {
1250aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
1260aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1270aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        Parcel parcel = Parcel.obtain();
1280aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        id1.writeToParcel(parcel, 0);
1290aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        parcel.setDataPosition(0);
1300aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1310aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.CREATOR.createFromParcel(parcel);
1320aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1330aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Original identity and parceled identity should be the same", id1, id2);
1340aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1350aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
136a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    @SuppressWarnings("serial")
1370aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static class MockRandom extends Random {
1380aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        private long mNextLong;
1390aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1400aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        public MockRandom() {
1410aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1420aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1430aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        public void setNextLong(long nextLong) {
1440aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            mNextLong = nextLong;
1450aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1470aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        @Override
1480aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        public long nextLong() {
1490aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            return mNextLong;
1500aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1510aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1520aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1530aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Generate_MinValue() {
1540aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MINVALUE);
1550aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1560aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        MockRandom random = new MockRandom();
1570aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        random.setNextLong(Long.MIN_VALUE);
1580aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.generate(random);
1590aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1600aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Identity created from Long.MIN_VALUE and one created from return from RNG"
1610aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                + " should be the same", id1, id2);
1620aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1630aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1640aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Generate_Random() {
1650aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
1660aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1670aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        MockRandom random = new MockRandom();
1680aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        random.setNextLong(TEST_1);
1690aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.generate(random);
1700aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1710aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Identity should end up being same when coming from RNG", id1, id2);
1720aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1730aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1740aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_Normal() {
1750aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
1760aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1770aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_1_ENCODED);
1780aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1790aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Parsed device identity should have the same value as original identity",
1800aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                id1, id2);
1810aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1820aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1830aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_MaxValue() {
1840aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MAXVALUE);
1850aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1860aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_MAXVALUE_ENCODED);
1870aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1880aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Original max value and parsed max value should be equal", id1, id2);
1890aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1900aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1910aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_TooShort() {
1920aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
193a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-");
1940aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when device identifier is too short");
1950aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
1960aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
1970aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1980aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
2000aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_WayTooShort() {
2010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
202a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse("----------------");
2030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when device identifier is too short");
2040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
2050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
2060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
2070aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
2080aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
2090aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_TooLong() {
2100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
211a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-AA");
2120aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when device identifier is too long");
2130aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
2140aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
2150aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
2160aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
2170aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
2180aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_Overflow() {
2190aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
220a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse(TEST_OVERFLOW_ENCODED);
2210aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when the value will overflow");
2220aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
2230aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
2240aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
2250aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
226a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
227a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    public void testVerifierDeviceIdentity_Parse_SquashToUppercase() {
228a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
229a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
230a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_1_ENCODED_LOWERCASE);
231a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
232a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Lowercase should parse to be the same as uppercase", id1, id2);
233a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
234a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Substituted identity should render to the same string",
235a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root                id1.toString(), id2.toString());
236a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    }
237a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
238a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    public void testVerifierDeviceIdentity_Parse_1I_And_0O_Substitution() {
239a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id1 = VerifierDeviceIdentity.parse(TEST_SUBSTITUTION_CORRECTED);
240a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
241a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_SUBSTITUTION_UNCORRECTED);
242a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
243a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Substitution should replace 0 with O and 1 with I", id1, id2);
244a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
245a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Substituted identity should render to the same string",
246a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root                id1.toString(), id2.toString());
247a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    }
2480aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root}
249