DiskBasedCacheTest.java revision b33d0d6651b0b31e965839211d410136db2dcb5b
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 android.test.AndroidTestCase;
20e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
21e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport com.android.volley.Cache;
22e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport com.android.volley.toolbox.DiskBasedCache.CacheHeader;
23e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
24e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport java.io.ByteArrayInputStream;
25e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport java.io.ByteArrayOutputStream;
26e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickimport java.util.HashMap;
27b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrickimport java.util.Map;
28e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
29e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrickpublic class DiskBasedCacheTest extends AndroidTestCase {
30e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
31e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick    // Simple end-to-end serialize/deserialize test.
32e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick    public void testCacheHeaderSerialization() throws Exception {
33e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        Cache.Entry e = new Cache.Entry();
34e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.data = new byte[8];
35e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.serverDate = 1234567L;
36e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.ttl = 9876543L;
37e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.softTtl = 8765432L;
38e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.etag = "etag";
39e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.responseHeaders = new HashMap<String, String>();
40e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        e.responseHeaders.put("fruit", "banana");
41e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
42e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        CacheHeader first = new CacheHeader("my-magical-key", e);
43e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        ByteArrayOutputStream baos = new ByteArrayOutputStream();
44e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        first.writeHeader(baos);
45e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
46e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        CacheHeader second = CacheHeader.readHeader(bais);
47e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
48e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        assertEquals(first.key, second.key);
49e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        assertEquals(first.serverDate, second.serverDate);
50e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        assertEquals(first.ttl, second.ttl);
51e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        assertEquals(first.softTtl, second.softTtl);
52e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        assertEquals(first.etag, second.etag);
53e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick        assertEquals(first.responseHeaders, second.responseHeaders);
54e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick    }
55e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick
56b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    public void testSerializeInt() throws Exception {
57b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayOutputStream baos = new ByteArrayOutputStream();
58b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeInt(baos, 0);
59b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeInt(baos, 19791214);
60b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeInt(baos, -20050711);
61b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeInt(baos, Integer.MIN_VALUE);
62b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeInt(baos, Integer.MAX_VALUE);
63b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
64b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readInt(bais), 0);
65b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readInt(bais), 19791214);
66b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readInt(bais), -20050711);
67b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readInt(bais), Integer.MIN_VALUE);
68b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readInt(bais), Integer.MAX_VALUE);
69b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    }
70b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick
71b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    public void testSerializeLong() throws Exception {
72b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayOutputStream baos = new ByteArrayOutputStream();
73b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, 0);
74b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, 31337);
75b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, -4160);
76b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, 4295032832L);
77b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, -4314824046L);
78b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, Long.MIN_VALUE);
79b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeLong(baos, Long.MAX_VALUE);
80b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
81b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), 0);
82b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), 31337);
83b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), -4160);
84b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), 4295032832L);
85b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), -4314824046L);
86b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), Long.MIN_VALUE);
87b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readLong(bais), Long.MAX_VALUE);
88b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    }
89b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick
90b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    public void testSerializeString() throws Exception {
91b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayOutputStream baos = new ByteArrayOutputStream();
92b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeString(baos, "");
93b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeString(baos, "This is a string.");
94b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeString(baos, "ファイカス");
95b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
96b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readString(bais), "");
97b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readString(bais), "This is a string.");
98b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readString(bais), "ファイカス");
99b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    }
100b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick
101b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    public void testSerializeMap() throws Exception {
102b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayOutputStream baos = new ByteArrayOutputStream();
103b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        Map<String, String> empty = new HashMap<String, String>();
104b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeStringStringMap(empty, baos);
105b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeStringStringMap(null, baos);
106b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        Map<String, String> twoThings = new HashMap<String, String>();
107b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        twoThings.put("first", "thing");
108b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        twoThings.put("second", "item");
109b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeStringStringMap(twoThings, baos);
110b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        Map<String, String> emptyKey = new HashMap<String, String>();
111b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        emptyKey.put("", "value");
112b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeStringStringMap(emptyKey, baos);
113b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        Map<String, String> emptyValue = new HashMap<String, String>();
114b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        emptyValue.put("key", "");
115b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        DiskBasedCache.writeStringStringMap(emptyValue, baos);
116b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
117b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readStringStringMap(bais), empty);
118b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readStringStringMap(bais), empty); // null reads back empty
119b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readStringStringMap(bais), twoThings);
120b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readStringStringMap(bais), emptyKey);
121b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick        assertEquals(DiskBasedCache.readStringStringMap(bais), emptyValue);
122b33d0d6651b0b31e965839211d410136db2dcb5bFicus Kirkpatrick    }
123e5a344749f100325cd8ef0d78cd7db5221b5e628Ficus Kirkpatrick}
124