1b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen/* 2b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * Copyright (C) 2016 The Android Open Source Project 3b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * 4b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 5b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * you may not use this file except in compliance with the License. 6b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * You may obtain a copy of the License at 7b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * 8b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * http://www.apache.org/licenses/LICENSE-2.0 9b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * 10b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * Unless required by applicable law or agreed to in writing, software 11b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * distributed under the License is distributed on an "AS IS" BASIS, 12b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * See the License for the specific language governing permissions and 14b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * limitations under the License. 15b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen */ 16b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 17b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenpackage android.net.wifi.aware; 18b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 19b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenimport static org.hamcrest.core.IsEqual.equalTo; 20b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 21b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenimport android.test.suitebuilder.annotation.SmallTest; 22b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 23b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenimport org.junit.Rule; 24b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenimport org.junit.Test; 25b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenimport org.junit.rules.ErrorCollector; 26b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 271857b982c320311e10e109064c204e7894aa0730Etan Cohenimport java.nio.BufferOverflowException; 281857b982c320311e10e109064c204e7894aa0730Etan Cohenimport java.util.ArrayList; 291857b982c320311e10e109064c204e7894aa0730Etan Cohenimport java.util.List; 301857b982c320311e10e109064c204e7894aa0730Etan Cohen 31b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen/** 32b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * Unit test harness for TlvBufferUtils class. 33b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen */ 34b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen@SmallTest 35b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohenpublic class TlvBufferUtilsTest { 36b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Rule 37b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public ErrorCollector collector = new ErrorCollector(); 38b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 39b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen /* 40b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * TlvBufferUtils Tests 41b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen */ 42b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 43b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test 44b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvBuild() { 45b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv11 = new TlvBufferUtils.TlvConstructor(1, 1); 46b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv11.allocate(15); 47b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv11.putByte(0, (byte) 2); 48b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv11.putByteArray(2, new byte[] { 49b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }); 50b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 51b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv11-correct-construction", 52b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv11.getArray(), equalTo(new byte[]{0, 1, 2, 2, 3, 0, 1, 2})); 53b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 541857b982c320311e10e109064c204e7894aa0730Etan Cohen TlvBufferUtils.TlvConstructor tlv01 = new TlvBufferUtils.TlvConstructor(0, 1); 55b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv01.allocate(15); 561857b982c320311e10e109064c204e7894aa0730Etan Cohen tlv01.putByte(0, (byte) 2); 57b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv01.putByteArray(2, new byte[] { 58b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }); 59b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 60b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv01-correct-construction", 61b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv01.getArray(), equalTo(new byte[] {1, 2, 3, 0, 1, 2 })); 62b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 63b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv11-valid", 64b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.isValid(tlv11.getArray(), 1, 1), 65b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(true)); 66b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv01-valid", 671857b982c320311e10e109064c204e7894aa0730Etan Cohen TlvBufferUtils.isValid(tlv01.getArray(), 0, 1), 68b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(true)); 69b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 70b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 711857b982c320311e10e109064c204e7894aa0730Etan Cohen /** 721857b982c320311e10e109064c204e7894aa0730Etan Cohen * Verify that can build a valid TLV from a List of byte[]. 731857b982c320311e10e109064c204e7894aa0730Etan Cohen */ 741857b982c320311e10e109064c204e7894aa0730Etan Cohen @Test 751857b982c320311e10e109064c204e7894aa0730Etan Cohen public void testTlvListOperations() { 761857b982c320311e10e109064c204e7894aa0730Etan Cohen byte[] entry1 = { 1, 2, 3 }; 771857b982c320311e10e109064c204e7894aa0730Etan Cohen byte[] entry2 = { 4, 5 }; 781857b982c320311e10e109064c204e7894aa0730Etan Cohen byte[] entry3 = new byte[0]; 791857b982c320311e10e109064c204e7894aa0730Etan Cohen List<byte[]> data = new ArrayList<>(); 801857b982c320311e10e109064c204e7894aa0730Etan Cohen data.add(entry1); 811857b982c320311e10e109064c204e7894aa0730Etan Cohen data.add(entry2); 821857b982c320311e10e109064c204e7894aa0730Etan Cohen data.add(entry3); 831857b982c320311e10e109064c204e7894aa0730Etan Cohen data.add(null); // zero-length should work 841857b982c320311e10e109064c204e7894aa0730Etan Cohen 851857b982c320311e10e109064c204e7894aa0730Etan Cohen TlvBufferUtils.TlvConstructor tlv01 = new TlvBufferUtils.TlvConstructor(0, 1); 861857b982c320311e10e109064c204e7894aa0730Etan Cohen tlv01.allocateAndPut(data); 871857b982c320311e10e109064c204e7894aa0730Etan Cohen byte[] tlvData = tlv01.getArray(); 881857b982c320311e10e109064c204e7894aa0730Etan Cohen List<byte[]> parsedList = new TlvBufferUtils.TlvIterable(0, 1, tlvData).toList(); 891857b982c320311e10e109064c204e7894aa0730Etan Cohen 901857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("tlvData-correct-length", tlvData.length, 911857b982c320311e10e109064c204e7894aa0730Etan Cohen equalTo(entry1.length + 1 + entry2.length + 1 + entry3.length + 1 + 1)); 921857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-correct-length", parsedList.size(), equalTo(4)); 931857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry1", parsedList.get(0), equalTo(entry1)); 941857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry2", parsedList.get(1), equalTo(entry2)); 951857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry3", parsedList.get(2), equalTo(entry3)); 961857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry4", parsedList.get(3), equalTo(new byte[0])); 971857b982c320311e10e109064c204e7894aa0730Etan Cohen } 981857b982c320311e10e109064c204e7894aa0730Etan Cohen 991857b982c320311e10e109064c204e7894aa0730Etan Cohen /** 1001857b982c320311e10e109064c204e7894aa0730Etan Cohen * Verify that can parse a (correctly formatted) byte array to a list. 1011857b982c320311e10e109064c204e7894aa0730Etan Cohen */ 1021857b982c320311e10e109064c204e7894aa0730Etan Cohen @Test 1031857b982c320311e10e109064c204e7894aa0730Etan Cohen public void testTlvParseToList() { 1041857b982c320311e10e109064c204e7894aa0730Etan Cohen byte[] validTlv01 = { 0, 1, 55, 2, 33, 66, 0 }; 1051857b982c320311e10e109064c204e7894aa0730Etan Cohen 1061857b982c320311e10e109064c204e7894aa0730Etan Cohen List<byte[]> parsedList = new TlvBufferUtils.TlvIterable(0, 1, validTlv01).toList(); 1071857b982c320311e10e109064c204e7894aa0730Etan Cohen 1081857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry1", parsedList.get(0), equalTo(new byte[0])); 1091857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry2", parsedList.get(1), equalTo(new byte[] { 55 })); 1101857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry3", parsedList.get(2), equalTo(new byte[] { 33, 66 })); 1111857b982c320311e10e109064c204e7894aa0730Etan Cohen collector.checkThat("parsedList-entry4", parsedList.get(3), equalTo(new byte[0])); 1121857b982c320311e10e109064c204e7894aa0730Etan Cohen } 1131857b982c320311e10e109064c204e7894aa0730Etan Cohen 1141857b982c320311e10e109064c204e7894aa0730Etan Cohen /** 1151857b982c320311e10e109064c204e7894aa0730Etan Cohen * Verify that an exception is thrown when trying to parse an invalid array. 1161857b982c320311e10e109064c204e7894aa0730Etan Cohen */ 1171857b982c320311e10e109064c204e7894aa0730Etan Cohen @Test(expected = BufferOverflowException.class) 1181857b982c320311e10e109064c204e7894aa0730Etan Cohen public void testTlvParseToListError() { 1191857b982c320311e10e109064c204e7894aa0730Etan Cohen byte[] invalidTlv01 = { 0, 1, 55, 2, 55, 66, 3 }; // bad data 1201857b982c320311e10e109064c204e7894aa0730Etan Cohen 1211857b982c320311e10e109064c204e7894aa0730Etan Cohen List<byte[]> data = new TlvBufferUtils.TlvIterable(0, 1, invalidTlv01).toList(); 1221857b982c320311e10e109064c204e7894aa0730Etan Cohen } 1231857b982c320311e10e109064c204e7894aa0730Etan Cohen 124b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test 125b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvIterate() { 126b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final String ascii = "ABC"; 127b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final String nonAscii = "何かもっと複雑な"; 128b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 129b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv22 = new TlvBufferUtils.TlvConstructor(2, 2); 130b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv22.allocate(18); 131b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv22.putInt(0, 2); 132b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv22.putShort(2, (short) 3); 133b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv22.putZeroLengthElement(55); 134b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 135b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlv22It = new TlvBufferUtils.TlvIterable(2, 2, tlv22.getArray()); 136b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen int count = 0; 137b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen for (TlvBufferUtils.TlvElement tlv : tlv22It) { 138b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen if (count == 0) { 139b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-mType", tlv.type, equalTo(0)); 140b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-mLength", tlv.length, equalTo(4)); 141b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-DATA", tlv.getInt(), equalTo(2)); 142b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } else if (count == 1) { 143b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-mType", tlv.type, equalTo(2)); 144b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-mLength", tlv.length, equalTo(2)); 145b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-DATA", (int) tlv.getShort(), 146b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(3)); 147b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } else if (count == 2) { 148b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-mType", tlv.type, equalTo(55)); 149b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-correct-iteration-mLength", tlv.length, equalTo(0)); 150b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } else { 151b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("Invalid number of iterations in loop - tlv22", true, 152b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(false)); 153b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 154b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen ++count; 155b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 156b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen if (count != 3) { 157b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("Invalid number of iterations outside loop - tlv22", true, 158b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(false)); 159b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 160b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 161b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv02 = new TlvBufferUtils.TlvConstructor(0, 2); 162b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv02.allocate(100); 163b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv02.putByte(0, (byte) 2); 164b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv02.putString(0, ascii); 165b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv02.putString(0, nonAscii); 166b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 167b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlv02It = new TlvBufferUtils.TlvIterable(0, 2, tlv02.getArray()); 168b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen count = 0; 169b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen for (TlvBufferUtils.TlvElement tlv : tlv02It) { 170b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen if (count == 0) { 171b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-correct-iteration-mLength", tlv.length, equalTo(1)); 172b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-correct-iteration-DATA", (int) tlv.getByte(), 173b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(2)); 174b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } else if (count == 1) { 175b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-correct-iteration-mLength", tlv.length, 176b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(ascii.length())); 177b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-correct-iteration-DATA", tlv.getString().equals(ascii), 178b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(true)); 179b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } else if (count == 2) { 180b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-correct-iteration-mLength", tlv.length, 181b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(nonAscii.getBytes().length)); 182b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-correct-iteration-DATA", 183b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv.getString().equals(nonAscii), equalTo(true)); 184b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } else { 185b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("Invalid number of iterations in loop - tlv02", true, 186b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(false)); 187b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 188b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen ++count; 189b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 190b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("Invalid number of iterations outside loop - tlv02", count, 191b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(3)); 192b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 193b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv22-valid", 194b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.isValid(tlv22.getArray(), 2, 2), 195b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(true)); 196b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv02-valid", 1971857b982c320311e10e109064c204e7894aa0730Etan Cohen TlvBufferUtils.isValid(tlv02.getArray(), 0, 2), 198b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen equalTo(true)); 199b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 200b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 201b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 202b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvInvalidSizeT1L0() { 203b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv10 = new TlvBufferUtils.TlvConstructor(1, 0); 204b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 205b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 206b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 207b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvInvalidSizeTm3L2() { 208b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv10 = new TlvBufferUtils.TlvConstructor(-3, 2); 209b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 210b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 211b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 212b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvInvalidSizeT1Lm2() { 213b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv10 = new TlvBufferUtils.TlvConstructor(1, -2); 214b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 215b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 216b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 217b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvInvalidSizeT1L3() { 218b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv10 = new TlvBufferUtils.TlvConstructor(1, 3); 219b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 220b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 221b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 222b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvInvalidSizeT3L1() { 223b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvConstructor tlv10 = new TlvBufferUtils.TlvConstructor(3, 1); 224b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 225b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 226b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 227b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvItInvalidSizeT1L0() { 228b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final byte[] dummy = { 229b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }; 230b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final int dummyLength = 3; 231b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlvIt10 = new TlvBufferUtils.TlvIterable(1, 0, dummy); 232b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 233b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 234b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 235b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvItInvalidSizeTm3L2() { 236b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final byte[] dummy = { 237b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }; 238b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final int dummyLength = 3; 239b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlvIt10 = new TlvBufferUtils.TlvIterable(-3, 2, dummy); 240b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 241b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 242b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 243b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvItInvalidSizeT1Lm2() { 244b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final byte[] dummy = { 245b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }; 246b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final int dummyLength = 3; 247b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlvIt10 = new TlvBufferUtils.TlvIterable(1, -2, dummy); 248b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 249b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 250b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 251b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvItInvalidSizeT1L3() { 252b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final byte[] dummy = { 253b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }; 254b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final int dummyLength = 3; 255b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlvIt10 = new TlvBufferUtils.TlvIterable(1, 3, dummy); 256b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 257b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 258b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test(expected = IllegalArgumentException.class) 259b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvItInvalidSizeT3L1() { 260b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final byte[] dummy = { 261b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 0, 1, 2 }; 262b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen final int dummyLength = 3; 263b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen TlvBufferUtils.TlvIterable tlvIt10 = new TlvBufferUtils.TlvIterable(3, 1, dummy); 264b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 265b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 266b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen /** 267b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen * Validate that a malformed byte array fails the TLV validity test. 268b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen */ 269b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen @Test 270b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen public void testTlvInvalidByteArray() { 2711857b982c320311e10e109064c204e7894aa0730Etan Cohen TlvBufferUtils.TlvConstructor tlv01 = new TlvBufferUtils.TlvConstructor(0, 1); 272b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv01.allocate(15); 2731857b982c320311e10e109064c204e7894aa0730Etan Cohen tlv01.putByte(0, (byte) 2); 274b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen tlv01.putByteArray(2, new byte[]{0, 1, 2}); 275b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 276b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen byte[] array = tlv01.getArray(); 277b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen array[0] = 10; 278b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen 279b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen collector.checkThat("tlv01-invalid", 2801857b982c320311e10e109064c204e7894aa0730Etan Cohen TlvBufferUtils.isValid(array, 0, 1), equalTo(false)); 281b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen } 282b77b69545ea32f336a90ac9403ceb826d8798f1bEtan Cohen} 283