1990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/* 2990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Copyright (C) 2008 The Android Open Source Project 3990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * 4990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * you may not use this file except in compliance with the License. 6990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * You may obtain a copy of the License at 7990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * 8990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * 10990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Unless required by applicable law or agreed to in writing, software 11990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * See the License for the specific language governing permissions and 14990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * limitations under the License. 15990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */ 16990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 17990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpackage libcore.java.util.zip; 18990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 19990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.TestCase; 20990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 21990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.util.zip.Adler32; 22990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.util.zip.CRC32; 23990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 24990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/** 25990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * tests for CRC32 and Adler32 checksum algorithms. 26990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */ 27990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpublic class OldAndroidChecksumTest extends TestCase { 28990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 29990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson public void testChecksum() throws Exception { 30990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson /* 31990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Values computed experimentally, using C interfaces. 32990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */ 33990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler32Test(mTestString, 0x9de210dbL); 34990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson cRC32Test(mTestString, 0x939f04afL); 35990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 36990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // Test for issue 1016037 37990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson wrongChecksumWithAdler32Test(); 38990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 39990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 40990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson private void adler32Test(byte[] values, long expected) { 41990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson Adler32 adler = new Adler32(); 42990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 43990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // try it all at once 44990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler.update(values); 45990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson assertEquals(adler.getValue(), expected); 46990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 47990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // try resetting and computing one byte at a time 48990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler.reset(); 49990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson for (int i = 0; i < values.length; i++) { 50990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler.update(values[i]); 51990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 52990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson assertEquals(adler.getValue(), expected); 53990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 54990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 55990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson private void cRC32Test(byte[] values, long expected) { 56990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson CRC32 crc = new CRC32(); 57990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 58990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // try it all at once 59990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson crc.update(values); 60990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson assertEquals(crc.getValue(), expected); 61990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 62990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // try resetting and computing one byte at a time 63990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson crc.reset(); 64990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson for (int i = 0; i < values.length; i++) { 65990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson crc.update(values[i]); 66990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 67990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson assertEquals(crc.getValue(), expected); 68990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 69990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 70990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // "The quick brown fox jumped over the lazy dogs\n" 71990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson private static byte[] mTestString = { 72990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, 73990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 0x6b, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x20, 74990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 0x66, 0x6f, 0x78, 0x20, 0x6a, 0x75, 0x6d, 0x70, 75990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 0x65, 0x64, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 76990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x7a, 0x79, 77990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 0x20, 0x64, 0x6f, 0x67, 0x73, 0x2e, 0x0a 78990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson }; 79990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 80990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 81990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson // Test for issue 1016037 82990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson private void wrongChecksumWithAdler32Test() { 83990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson byte[] bytes = {1, 0, 5, 0, 15, 0, 1, 11, 0, 1}; 84990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson Adler32 adler = new Adler32(); 85990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler.update(bytes); 86990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson long arrayChecksum = adler.getValue(); 87990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler.reset(); 88990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson for (int i = 0; i < bytes.length; i++) { 89990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson adler.update(bytes[i]); 90990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 91990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson assertEquals("Checksums not equal: expected: " + arrayChecksum + 92990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson " actual: " + adler.getValue(), arrayChecksum, adler.getValue()); 93990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 94990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson} 95990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 96