/* * Copyright 2015 Victor Albertos * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.rx_cache2.internal; import io.rx_cache2.internal.common.BaseTest; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertNull; public class DiskTest extends BaseTest { private final static String KEY = "store/store"; private final static String VALUE = "dummy"; @Test public void When_A_Record_Is_Supplied_Retrieve_It() { disk.save(KEY, new io.rx_cache2.internal.Record(new Mock(VALUE)), false, null); io.rx_cache2.internal.Record<Mock> diskRecord = disk.retrieveRecord(KEY, false, null); assertThat(diskRecord.getData().getMessage(), is(VALUE)); } @Test public void When_A_Record_Collection_Is_Supplied_Retrieve_It() { List<Mock> mocks = Arrays.asList(new Mock(VALUE), new Mock(VALUE + 1)); disk.save(KEY, new io.rx_cache2.internal.Record(mocks), false, null); io.rx_cache2.internal.Record<List<Mock>> diskRecord = disk.retrieveRecord(KEY, false, null); assertThat(diskRecord.getData().get(0).getMessage(), is(VALUE)); assertThat(diskRecord.getData().get(1).getMessage(), is(VALUE+1)); } @Test public void When_A_Record_Array_Is_Supplied_Retrieve_It() { Mock[] mocks = {new Mock(VALUE), new Mock(VALUE+1)}; disk.save(KEY, new io.rx_cache2.internal.Record(mocks), false, null); io.rx_cache2.internal.Record<Mock[]> diskRecord = disk.retrieveRecord(KEY, false, null); assertThat(diskRecord.getData()[0].getMessage(), is(VALUE)); assertThat(diskRecord.getData()[1].getMessage(), is(VALUE+1)); } @Test public void When_A_Record_Map_Is_Supplied_Retrieve_It() { Map<Integer, Mock> mocks = new HashMap(); mocks.put(1, new Mock(VALUE)); mocks.put(2, new Mock(VALUE + 1)); disk.save(KEY, new io.rx_cache2.internal.Record(mocks), false, null); io.rx_cache2.internal.Record<Map<Integer, Mock>> diskRecord = disk.retrieveRecord(KEY, false, null); assertThat(diskRecord.getData().get(1).getMessage(), is(VALUE)); assertThat(diskRecord.getData().get(2).getMessage(), is(VALUE+1)); } @Test public void When_A_Collection_Is_Supplied_Retrieve_It() { List<Mock> mockArrayList = new ArrayList(); mockArrayList.add(new Mock(VALUE)); mockArrayList.add(new Mock(VALUE + 1)); disk.save(KEY, mockArrayList, false, null); mockArrayList = disk.retrieveCollection(KEY, List.class, Mock.class); assertThat(mockArrayList.get(0).getMessage(), is(VALUE)); assertThat(mockArrayList.get(1).getMessage(), is(VALUE + 1)); } @Test public void When_A_Map_Is_Supplied_Retrieve_It() { Map<Integer, Mock> mocksHashMap = new HashMap(); mocksHashMap.put(1, new Mock(VALUE)); mocksHashMap.put(2, new Mock(VALUE + 1)); disk.save(KEY, mocksHashMap, false, null); mocksHashMap = disk.retrieveMap(KEY, Map.class, Integer.class, Mock.class); assertThat(mocksHashMap.get(1).getMessage(), is(VALUE)); assertThat(mocksHashMap.get(2).getMessage(), is(VALUE+1)); } @Test public void When_An_Array_Is_Supplied_Retrieve_It() { Mock[] mocksArray = {new Mock(VALUE), new Mock(VALUE+1)}; disk.save(KEY, mocksArray, false, null); mocksArray = disk.retrieveArray(KEY, Mock.class); assertThat(mocksArray[0].getMessage(), is(VALUE)); assertThat(mocksArray[1].getMessage(), is(VALUE+1)); } @Test public void When_Encrypt_Is_False_Then_Retrieve_Record_Without_Encrypt() { disk.save(KEY, new io.rx_cache2.internal.Record(new Mock(VALUE)), false, null); io.rx_cache2.internal.Record<Mock> diskRecord = disk.retrieveRecord(KEY, false, null); assertThat(diskRecord.getData().getMessage(), is(VALUE)); } @Test public void When_Encrypt_Is_True_Then_Retrieve_Record_Decrypted() { disk.save(KEY, new io.rx_cache2.internal.Record(new Mock(VALUE)), true, "key"); io.rx_cache2.internal.Record<Mock> diskRecord = disk.retrieveRecord(KEY, true, "key"); assertThat(diskRecord.getData().getMessage(), is(VALUE)); } @Test public void When_Encrypt_Is_False_And_I_Try_Retrieve_It_Encrypted_Then_Record_Is_Null() { disk.save(KEY, new io.rx_cache2.internal.Record(new Mock(VALUE)), false, null); io.rx_cache2.internal.Record<Mock> diskRecord = disk.retrieveRecord(KEY, true, "key"); assertNull(diskRecord); } @Test public void When_Encrypt_Is_True_And_I_Try_Retrieve_It_Without_Encrypt_Then_Record_Is_Null() { disk.save(KEY, new io.rx_cache2.internal.Record(new Mock(VALUE)), true, "key"); io.rx_cache2.internal.Record<Mock> diskRecord = disk.retrieveRecord(KEY, false, null); assertNull(diskRecord); } @Test public void When_Encrypt_Is_True_And_I_Try_Retrieve_It_With_Another_Key_Then_Record_Is_Null() { disk.save(KEY, new io.rx_cache2.internal.Record(new Mock(VALUE)), true, "key"); io.rx_cache2.internal.Record<Mock> diskRecord = disk.retrieveRecord(KEY, true, "otherkey"); assertNull(diskRecord); } @Test public void When_Evict_Cache_Then_Evict_Cache() { for (int i = 0; i < 100; i++) { disk.save(String.valueOf(i), new io.rx_cache2.internal.Record(new Mock(VALUE)), false, null); } assertThat(disk.allKeys().size(), is(100)); disk.evictAll(); assertThat(disk.allKeys().size(), is(0)); } }