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;
200aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
210aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport java.util.Random;
220aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
230aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootpublic class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
240aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_1 = 0x7A5F00FF5A55AAA5L;
250aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
260aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_1_ENCODED = "HUXY-A75N-FLKV-F";
270aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
28a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    private static final String TEST_1_ENCODED_LOWERCASE = "huxy-a75n-flkv-f";
29a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
300aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_2 = 0x5A05FF5A05F0A555L;
310aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
320aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_MAXVALUE = Long.MAX_VALUE;
330aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
340aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_MAXVALUE_ENCODED = "H777-7777-7777-7";
350aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
360aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_MINVALUE = Long.MIN_VALUE;
370aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
380aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_MINVALUE_ENCODED = "IAAA-AAAA-AAAA-A";
390aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
400aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_ZERO = 0L;
410aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
420aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_ZERO_ENCODED = "AAAA-AAAA-AAAA-A";
430aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
440aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final long TEST_NEGONE = -1L;
450aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_NEGONE_ENCODED = "P777-7777-7777-7";
470aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
480aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static final String TEST_OVERFLOW_ENCODED = "QAAA-AAAA-AAAA-A";
490aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
50a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    private static final String TEST_SUBSTITUTION_CORRECTED = "OIIO-IIOO-IOOI-I";
51a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
52a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    private static final String TEST_SUBSTITUTION_UNCORRECTED = "0110-1100-1001-1";
53a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
540aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Equals_Success() {
550aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
560aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = new VerifierDeviceIdentity(TEST_1);
570aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
580aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertTrue("The two VerifierDeviceIdentity instances should be equal", id1.equals(id2));
590aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
600aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
610aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Equals_Failure() {
620aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
630aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = new VerifierDeviceIdentity(TEST_2);
640aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
650aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertFalse("The two VerifierDeviceIdentity instances should be unique", id1.equals(id2));
660aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
670aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
680aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_HashCode() {
690aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
700aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
710aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The VerifierDeviceIdentity should have the same hashcode as its identity",
720aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                (int) TEST_1, id1.hashCode());
730aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
740aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
750aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_Success() {
760aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
770aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
780aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
790aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_1_ENCODED, id1.toString());
800aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
810aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
820aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_Largest() {
830aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MAXVALUE);
840aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
850aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
860aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_MAXVALUE_ENCODED, id1.toString());
870aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
880aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
890aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_Zero() {
900aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_ZERO);
910aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
920aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
930aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_ZERO_ENCODED, id1.toString());
940aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
950aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
960aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_NegOne() {
970aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_NEGONE);
980aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
1000aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_NEGONE_ENCODED, id1.toString());
1010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1020aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_ToString_MinValue() {
1040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MINVALUE);
1050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("The identity should encode correctly to the expected Base 32 string",
1070aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                TEST_MINVALUE_ENCODED, id1.toString());
1080aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1090aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parcel_ReadNegative() {
1110aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MINVALUE);
1120aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1130aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        Parcel parcel = Parcel.obtain();
1140aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        parcel.writeLong(TEST_MINVALUE);
1150aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        parcel.setDataPosition(0);
1160aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1170aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.CREATOR.createFromParcel(parcel);
1180aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1190aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Parcel created should match expected value", id1, id2);
1200aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1210aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1220aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parcel_Read_Pass() {
1230aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
1240aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1250aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        Parcel parcel = Parcel.obtain();
1260aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        id1.writeToParcel(parcel, 0);
1270aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        parcel.setDataPosition(0);
1280aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1290aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.CREATOR.createFromParcel(parcel);
1300aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1310aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Original identity and parceled identity should be the same", id1, id2);
1320aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1330aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
134a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    @SuppressWarnings("serial")
1350aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    private static class MockRandom extends Random {
1360aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        private long mNextLong;
1370aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1380aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        public MockRandom() {
1390aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1400aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1410aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        public void setNextLong(long nextLong) {
1420aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            mNextLong = nextLong;
1430aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1440aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1450aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        @Override
1460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        public long nextLong() {
1470aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            return mNextLong;
1480aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1490aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1500aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1510aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Generate_MinValue() {
1520aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MINVALUE);
1530aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1540aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        MockRandom random = new MockRandom();
1550aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        random.setNextLong(Long.MIN_VALUE);
1560aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.generate(random);
1570aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1580aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Identity created from Long.MIN_VALUE and one created from return from RNG"
1590aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                + " should be the same", id1, id2);
1600aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1610aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1620aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Generate_Random() {
1630aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
1640aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1650aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        MockRandom random = new MockRandom();
1660aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        random.setNextLong(TEST_1);
1670aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.generate(random);
1680aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1690aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Identity should end up being same when coming from RNG", id1, id2);
1700aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1710aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1720aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_Normal() {
1730aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
1740aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1750aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_1_ENCODED);
1760aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1770aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Parsed device identity should have the same value as original identity",
1780aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root                id1, id2);
1790aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1800aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1810aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_MaxValue() {
1820aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_MAXVALUE);
1830aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1840aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_MAXVALUE_ENCODED);
1850aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1860aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        assertEquals("Original max value and parsed max value should be equal", id1, id2);
1870aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1880aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1890aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_TooShort() {
1900aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
191a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-");
1920aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when device identifier is too short");
1930aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
1940aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
1950aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
1960aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
1970aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1980aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_WayTooShort() {
1990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
200a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse("----------------");
2010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when device identifier is too short");
2020aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
2030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
2040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
2050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
2060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
2070aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_TooLong() {
2080aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
209a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-AA");
2100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when device identifier is too long");
2110aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
2120aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
2130aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
2140aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
2150aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
2160aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public void testVerifierDeviceIdentity_Parse_Overflow() {
2170aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
218a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root            VerifierDeviceIdentity.parse(TEST_OVERFLOW_ENCODED);
2190aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            fail("Parsing should fail when the value will overflow");
2200aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (IllegalArgumentException e) {
2210aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // success
2220aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
2230aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
224a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
225a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    public void testVerifierDeviceIdentity_Parse_SquashToUppercase() {
226a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
227a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
228a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_1_ENCODED_LOWERCASE);
229a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
230a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Lowercase should parse to be the same as uppercase", id1, id2);
231a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
232a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Substituted identity should render to the same string",
233a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root                id1.toString(), id2.toString());
234a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    }
235a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
236a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    public void testVerifierDeviceIdentity_Parse_1I_And_0O_Substitution() {
237a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id1 = VerifierDeviceIdentity.parse(TEST_SUBSTITUTION_CORRECTED);
238a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
239a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_SUBSTITUTION_UNCORRECTED);
240a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
241a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Substitution should replace 0 with O and 1 with I", id1, id2);
242a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root
243a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root        assertEquals("Substituted identity should render to the same string",
244a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root                id1.toString(), id2.toString());
245a0f264e1afa3c0a00a5af0db362f884b122d978dKenny Root    }
2460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root}
247