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