15df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun/* 25df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * Copyright (C) 2016 The Android Open Source Project 35df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * 45df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * Licensed under the Apache License, Version 2.0 (the "License"); 55df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * you may not use this file except in compliance with the License. 65df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * You may obtain a copy of the License at 75df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * 85df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * http://www.apache.org/licenses/LICENSE-2.0 95df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * 105df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * Unless required by applicable law or agreed to in writing, software 115df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * distributed under the License is distributed on an "AS IS" BASIS, 125df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * See the License for the specific language governing permissions and 145df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun * limitations under the License. 155df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun */ 165df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 175df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunpackage com.android.internal.telephony.uicc.euicc.asn1; 185df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 195df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport static org.junit.Assert.assertArrayEquals; 205df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport static org.junit.Assert.assertEquals; 215df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport static org.junit.Assert.assertFalse; 225df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport static org.junit.Assert.assertTrue; 235df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport static org.junit.Assert.fail; 245df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 255df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport android.test.suitebuilder.annotation.SmallTest; 265df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 275df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport com.android.internal.telephony.uicc.IccUtils; 285df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport com.android.internal.telephony.uicc.asn1.Asn1Decoder; 295df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport com.android.internal.telephony.uicc.asn1.Asn1Node; 305df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport com.android.internal.telephony.uicc.asn1.InvalidAsn1DataException; 315df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport com.android.internal.telephony.uicc.asn1.TagNotFoundException; 325df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 335df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunimport org.junit.Test; 345df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 355df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sunpublic class Asn1NodeTest { 365df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 375df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 385df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 395df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testCreateConstructedNodeWithShortTag() { 405df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0x65).build(); 415df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x65, node.getTag()); 425df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertTrue(node.isConstructed()); 435df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(2, node.getEncodedLength()); 445df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getDataLength()); 455df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertArrayEquals(new byte[] {0x65, 0x00}, node.toBytes()); 465df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 475df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 485df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 495df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 505df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testCreateConstructedNodeWithLongTag() { 515df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0x3F34).build(); 525df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x3F34, node.getTag()); 535df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertTrue(node.isConstructed()); 545df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(3, node.getEncodedLength()); 555df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getDataLength()); 565df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertArrayEquals(new byte[] {0x3F, 0x34, 0x00}, node.toBytes()); 575df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 585df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 595df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 605df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 615df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testChildren() throws TagNotFoundException, InvalidAsn1DataException { 625df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = 635df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0x3F34) 645df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChild(Asn1Node.newBuilder(0x35).addChild(Asn1Node.newBuilder(0x36))) 655df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChild(Asn1Node.newBuilder(0x35)) 665df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChild(Asn1Node.newBuilder(0x37)) 675df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .build(); 685df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 695df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x3F34, node.getTag()); 705df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(3, node.getChildren().size()); 715df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x35, node.getChildren().get(0).getTag()); 725df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x35, node.getChildren().get(1).getTag()); 735df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x37, node.getChildren().get(2).getTag()); 745df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(2, node.getChildren(0x35).size()); 755df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x35, node.getChildren(0x35).get(0).getTag()); 765df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x35, node.getChildren(0x35).get(1).getTag()); 775df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(1, node.getChild(0x35).getChildren().size()); 785df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getChildren().get(1).getChildren().size()); 795df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x36, node.getChild(0x35).getChildren().get(0).getTag()); 805df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 815df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertTrue(node.hasChild(0x35, 0x36)); 825df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertFalse(node.hasChild(0x38, 0x39)); 835df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertTrue(node.getChild(0x35).hasChild(0x36)); 845df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertFalse(node.getChild(0x35).hasChild(0x39)); 855df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 865df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 875df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 885df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 895df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testNonExitingChildren() throws TagNotFoundException, InvalidAsn1DataException { 905df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = 915df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0x3F34) 925df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChild(Asn1Node.newBuilder(0x34)) 935df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChild(Asn1Node.newBuilder(0x35).addChild(Asn1Node.newBuilder(0x36))) 945df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsInteger(0x11, 123) 955df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .build(); 965df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 975df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getChild(0x34).getChildren(0x37).size()); 985df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getChildren(0x37).size()); 995df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getChild(0x11).getChildren(0x37).size()); 1005df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0, node.getChild(0x11).getChildren().size()); 1015df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun try { 1025df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(0x35).getChild(0x37); 1035df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun fail("0x37 should not exist."); 1045df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } catch (TagNotFoundException e) { 1055df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x37, e.getTag()); 1065df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1075df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun try { 1085df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(0x35, 0x37); 1095df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun fail("0x37 should not exist."); 1105df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } catch (TagNotFoundException e) { 1115df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x37, e.getTag()); 1125df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1135df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun try { 1145df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(0x11).getChild(0x37); 1155df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun fail("0x37 should not exist."); 1165df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } catch (TagNotFoundException e) { 1175df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x37, e.getTag()); 1185df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1195df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1205df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1215df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 1225df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 1235df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilderAndGetters() throws TagNotFoundException, InvalidAsn1DataException { 1245df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = 1255df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0x30) 1265df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsInteger(0x11, 1234567) 1275df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsString(0x12, "This is a test.") 1285df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChild( 1295df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0x31) 1305df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsBits(0x13, 0xF2344) 1315df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsBytes(0x14, new byte[] {-1, 0, -1})) 1325df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsBoolean(0x15, true) 1335df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildAsBoolean(0x16, false) 1345df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .addChildren(IccUtils.hexStringToBytes("13040422C4F01403FF00FF")) 1355df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun .build(); 1365df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1375df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(54, node.getEncodedLength()); 1385df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(52, node.getDataLength()); 1395df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1405df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun final String nodeHex = 1415df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun "3034110312D687120F54686973206973206120746573742E310B13040422C4F0" 1425df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun + "1403FF00FF1501FF16010013040422C4F01403FF00FF"; 1435df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(nodeHex, node.toHex()); 1445df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals("3034", node.getHeadAsHex()); 1455df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(1234567, node.getChild(0x11).asInteger()); 1465df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals("This is a test.", node.getChild(0x12).asString()); 1475df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0xF2344, node.getChild(0x31).getChild(0x13).asBits()); 1485df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertArrayEquals(new byte[] {-1, 0, -1}, node.getChild(0x31).getChild(0x14).asBytes()); 1495df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertTrue(node.getChild(0x15).asBoolean()); 1505df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertFalse(node.getChild(0x16).asBoolean()); 1515df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0xF2344, node.getChild(0x13).asBits()); 1525df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertArrayEquals(new byte[] {-1, 0, -1}, node.getChild(0x14).asBytes()); 1535df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1545df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1555df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 1565df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 1575df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testGettersInvalidData() throws TagNotFoundException, InvalidAsn1DataException { 1585df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0x30).addChildAsString(0x12, "string").build(); 1595df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun try { 1605df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(0x12).asInteger(); 1615df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun fail("Should not be parsed."); 1625df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } catch (InvalidAsn1DataException e) { 1635df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x12, e.getTag()); 1645df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1655df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun try { 1665df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(0x12).asBits(); 1675df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun fail("Should not be parsed."); 1685df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } catch (InvalidAsn1DataException e) { 1695df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x12, e.getTag()); 1705df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1715df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun try { 1725df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(0x12).asBoolean(); 1735df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun fail("Should not be parsed."); 1745df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } catch (InvalidAsn1DataException e) { 1755df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(0x12, e.getTag()); 1765df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1775df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1785df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1795df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 1805df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 1815df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testWriteToBytes() throws InvalidAsn1DataException { 1825df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun final String nodeHex = 1835df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun "3031110312D687120F54686973206973206120746573742E310B13040422C4F0" 1845df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun + "1403FF00FF1501FF13040422C4F01403FF00FF"; 1855df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1865df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = new Asn1Decoder(nodeHex).nextNode(); 1875df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun // Writes the bytes before children accessed. 1885df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(nodeHex, node.toHex()); 1895df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun // Writes the bytes after children accessed. 1905df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChildren(); 1915df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(nodeHex, node.toHex()); 1925df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 1935df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 1945df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 1955df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test 1965df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testLongFormLength() throws TagNotFoundException, InvalidAsn1DataException { 1975df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).addChildAsBytes(0x5A, new byte[257]).build(); 1985df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(266, node.getEncodedLength()); 1995df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(261, node.getDataLength()); 2005df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals(257, node.getChild(0x5A).getDataLength()); 2015df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertEquals("BF37820105", node.getHeadAsHex()); 2025df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2035df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun byte[] expected = new byte[266]; 2045df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun System.arraycopy(IccUtils.hexStringToBytes("BF378201055A820101"), 0, expected, 0, 9); 2055df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun byte[] actual = new byte[266]; 2065df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.writeToBytes(actual, 0); 2075df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun assertArrayEquals(expected, actual); 2085df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2095df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2105df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2115df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalArgumentException.class) 2125df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilder_NonConstructedTag() { 2135df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0x87); 2145df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2155df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2165df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2175df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2185df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilderAddChildAsInteger_ConstructedTag() { 2195df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0xBF37).addChildAsInteger(0xBF37, 1); 2205df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2215df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2225df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2235df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2245df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilderAddChildAsString_ConstructedTag() { 2255df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0xBF37).addChildAsString(0xBF37, ""); 2265df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2275df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2285df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2295df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2305df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilderAddChildAsBytes_ConstructedTag() { 2315df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0xBF37).addChildAsBytesFromHex(0xBF37, "00"); 2325df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2335df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2345df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2355df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2365df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilderAddChildAsBits_ConstructedTag() { 2375df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0xBF37).addChildAsBits(0xBF37, 1); 2385df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2395df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2405df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2415df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2425df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testBuilderAddChildAsBoolean_ConstructedTag() { 2435df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node.newBuilder(0xBF37).addChildAsBoolean(0xBF37, true); 2445df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2455df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2465df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2475df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2485df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsInteger_ConstructedTag() throws InvalidAsn1DataException { 2495df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).build(); 2505df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.asInteger(); 2515df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2525df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2535df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2545df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2555df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsLong_ConstructedTag() throws InvalidAsn1DataException { 2565df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).build(); 2575df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.asRawLong(); 2585df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2595df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2605df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2615df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2625df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsString_ConstructedTag() throws InvalidAsn1DataException { 2635df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).build(); 2645df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.asString(); 2655df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2665df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2675df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2685df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2695df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsBytes_ConstructedTag() throws InvalidAsn1DataException { 2705df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).build(); 2715df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.asBytes(); 2725df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2735df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2745df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2755df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2765df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsBits_ConstructedTag() throws InvalidAsn1DataException { 2775df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).build(); 2785df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.asBits(); 2795df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2805df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2815df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2825df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IllegalStateException.class) 2835df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsBoolean_ConstructedTag() throws InvalidAsn1DataException { 2845df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).build(); 2855df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.asBoolean(); 2865df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2875df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2885df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2895df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = InvalidAsn1DataException.class) 2905df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testAsBoolean_InvalidData() throws TagNotFoundException, InvalidAsn1DataException { 2915df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).addChildAsString(1, "1").build(); 2925df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.getChild(1).asBoolean(); 2935df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 2945df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun 2955df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @SmallTest 2965df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun @Test(expected = IndexOutOfBoundsException.class) 2975df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun public void testWriteToBytes_IndexOutOfBounds() 2985df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun throws TagNotFoundException, InvalidAsn1DataException { 2995df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun Asn1Node node = Asn1Node.newBuilder(0xBF37).addChildAsString(1, "1").build(); 3005df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun byte[] bytes = new byte[1]; 3015df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun node.writeToBytes(bytes, 0); 3025df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun } 3035df6f558161aba520c84eb76d0926d4cb43fff1dHolly Jiuyu Sun} 304