Home | History | Annotate | Download | only in toolbox
      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 
     17 package com.android.volley.toolbox;
     18 
     19 import android.test.AndroidTestCase;
     20 
     21 import com.android.volley.Cache;
     22 import com.android.volley.toolbox.DiskBasedCache.CacheHeader;
     23 
     24 import java.io.ByteArrayInputStream;
     25 import java.io.ByteArrayOutputStream;
     26 import java.util.HashMap;
     27 import java.util.Map;
     28 
     29 public 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