1e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick/* 2e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * Copyright (C) 2013 The Android Open Source Project 3e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * 4e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 5e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * you may not use this file except in compliance with the License. 6e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * You may obtain a copy of the License at 7e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * 8e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * http://www.apache.org/licenses/LICENSE-2.0 9e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * 10e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * Unless required by applicable law or agreed to in writing, software 11e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * distributed under the License is distributed on an "AS IS" BASIS, 12e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * See the License for the specific language governing permissions and 14e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick * limitations under the License. 15e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick */ 16e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 17e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickpackage com.android.volley.toolbox; 18e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 19e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport com.android.volley.Cache; 20e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport com.android.volley.toolbox.DiskBasedCache.CacheHeader; 21b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.junit.Test; 22e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 23e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport java.io.ByteArrayInputStream; 24e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport java.io.ByteArrayOutputStream; 25e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmannimport java.io.File; 26e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport java.util.HashMap; 27b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrickimport java.util.Map; 28e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 29b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport static org.junit.Assert.*; 30b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick 31b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickpublic class DiskBasedCacheTest { 32e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 33e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick // Simple end-to-end serialize/deserialize test. 34b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void cacheHeaderSerialization() throws Exception { 35e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick Cache.Entry e = new Cache.Entry(); 36e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.data = new byte[8]; 37e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.serverDate = 1234567L; 389324df1b8046548587ffec89ec755264f6fbb097Ralph Bergmann e.lastModified = 13572468L; 39e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.ttl = 9876543L; 40e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.softTtl = 8765432L; 41e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.etag = "etag"; 42e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.responseHeaders = new HashMap<String, String>(); 43e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick e.responseHeaders.put("fruit", "banana"); 44e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 45e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick CacheHeader first = new CacheHeader("my-magical-key", e); 46e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick ByteArrayOutputStream baos = new ByteArrayOutputStream(); 47e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick first.writeHeader(baos); 48e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 49e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick CacheHeader second = CacheHeader.readHeader(bais); 50e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 51e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick assertEquals(first.key, second.key); 52e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick assertEquals(first.serverDate, second.serverDate); 539324df1b8046548587ffec89ec755264f6fbb097Ralph Bergmann assertEquals(first.lastModified, second.lastModified); 54e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick assertEquals(first.ttl, second.ttl); 55e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick assertEquals(first.softTtl, second.softTtl); 56e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick assertEquals(first.etag, second.etag); 57e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick assertEquals(first.responseHeaders, second.responseHeaders); 58e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick } 59e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick 60b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void serializeInt() throws Exception { 61b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayOutputStream baos = new ByteArrayOutputStream(); 62b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeInt(baos, 0); 63b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeInt(baos, 19791214); 64b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeInt(baos, -20050711); 65b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeInt(baos, Integer.MIN_VALUE); 66b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeInt(baos, Integer.MAX_VALUE); 67b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 68b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readInt(bais), 0); 69b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readInt(bais), 19791214); 70b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readInt(bais), -20050711); 71b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readInt(bais), Integer.MIN_VALUE); 72b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readInt(bais), Integer.MAX_VALUE); 73b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick } 74b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick 75b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void serializeLong() throws Exception { 76b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayOutputStream baos = new ByteArrayOutputStream(); 77b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, 0); 78b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, 31337); 79b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, -4160); 80b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, 4295032832L); 81b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, -4314824046L); 82b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, Long.MIN_VALUE); 83b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeLong(baos, Long.MAX_VALUE); 84b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 85b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), 0); 86b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), 31337); 87b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), -4160); 88b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), 4295032832L); 89b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), -4314824046L); 90b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), Long.MIN_VALUE); 91b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readLong(bais), Long.MAX_VALUE); 92b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick } 93b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick 94b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void serializeString() throws Exception { 95b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayOutputStream baos = new ByteArrayOutputStream(); 96b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeString(baos, ""); 97b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeString(baos, "This is a string."); 98b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeString(baos, "ファイカス"); 99b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 100b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readString(bais), ""); 101b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readString(bais), "This is a string."); 102b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readString(bais), "ファイカス"); 103b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick } 104b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick 105b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void serializeMap() throws Exception { 106b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayOutputStream baos = new ByteArrayOutputStream(); 107b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick Map<String, String> empty = new HashMap<String, String>(); 108b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeStringStringMap(empty, baos); 109b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeStringStringMap(null, baos); 110b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick Map<String, String> twoThings = new HashMap<String, String>(); 111b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick twoThings.put("first", "thing"); 112b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick twoThings.put("second", "item"); 113b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeStringStringMap(twoThings, baos); 114b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick Map<String, String> emptyKey = new HashMap<String, String>(); 115b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick emptyKey.put("", "value"); 116b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeStringStringMap(emptyKey, baos); 117b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick Map<String, String> emptyValue = new HashMap<String, String>(); 118b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick emptyValue.put("key", ""); 119b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick DiskBasedCache.writeStringStringMap(emptyValue, baos); 120b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 121b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readStringStringMap(bais), empty); 122b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readStringStringMap(bais), empty); // null reads back empty 123b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readStringStringMap(bais), twoThings); 124b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readStringStringMap(bais), emptyKey); 125b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick assertEquals(DiskBasedCache.readStringStringMap(bais), emptyValue); 126b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick } 1279324df1b8046548587ffec89ec755264f6fbb097Ralph Bergmann 128e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann @Test 129e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann public void publicMethods() throws Exception { 130e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann // Catch-all test to find API-breaking changes. 131e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann assertNotNull(DiskBasedCache.class.getConstructor(File.class, int.class)); 132e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann assertNotNull(DiskBasedCache.class.getConstructor(File.class)); 133e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann 134e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann assertNotNull(DiskBasedCache.class.getMethod("getFileForKey", String.class)); 135e1f0d61968d5194088c18f00b1bcfc46a91adbfdRalph Bergmann } 136e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick} 137