blob: d042adc4bdb77d7ff47930c037424c03ef6b4026 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 Christian Pontesegger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christian Pontesegger - initial API and implementation
*******************************************************************************/
package org.eclipse.skills.service.storage;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.ByteArrayInputStream;
import java.io.EOFException;
import java.io.IOException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class DataStorageProxyTest extends AbstractStorageTest {
private IDataStorage fBaseStorage;
@Override
protected IDataStorage createStorage() {
fBaseStorage = mock(IDataStorage.class);
return new DataStorageProxy(fBaseStorage);
}
@Override
public DataStorageProxy getDataStorage() {
return (DataStorageProxy) super.getDataStorage();
}
@Test
@DisplayName("constructor throws when baseStorage is null")
public void throwsWhenBaseStorageIsNull() {
assertThrows(IllegalArgumentException.class, () -> new DataStorageProxy(null));
}
@Test
@DisplayName("getStorage() returns baseStorage")
public void getStorage() {
assertEquals(fBaseStorage, getDataStorage().getStorage());
}
@Override
@Test
@DisplayName("hasResource() == false when file does not exist")
public void hasResourceFalseWhenFileDoesNotExist() {
when(fBaseStorage.hasResource(any())).thenReturn(false);
super.hasResourceFalseWhenFileDoesNotExist();
}
@Override
@Test
@DisplayName("hasResource() == true when file exists")
public void hasResourceTrueWhenFileExists() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(true);
super.hasResourceTrueWhenFileExists();
}
@Override
@Test
@DisplayName("loadResource() throws when file does not exist")
public void loadResourceThrowsWhenFileDoesNotExist() {
when(fBaseStorage.hasResource(any())).thenReturn(false);
super.loadResourceThrowsWhenFileDoesNotExist();
}
@Override
@Test
@DisplayName("loadResource() returns file content when file exists")
public void loadResourceReturnsFileContent() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(true);
when(fBaseStorage.loadResource(any())).thenReturn(DEFAULT_CONTENT);
super.loadResourceReturnsFileContent();
}
@Test
@DisplayName("loadResource() throws when base storage throws")
public void loadResourceThrowsWhenBaseStorageThrows() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(true);
when(fBaseStorage.loadResource(any())).thenThrow(new EOFException());
assertThrows(EOFException.class, () -> getDataStorage().loadResource("any"));
}
@Override
@Test
@DisplayName("openResource() throws when file does not exist")
public void openResourceThrowsWhenFileDoesNotExist() {
when(fBaseStorage.hasResource(any())).thenReturn(false);
super.openResourceThrowsWhenFileDoesNotExist();
}
@Override
@Test
@DisplayName("openResource() returns file content when file exists")
public void openResourceReturnsFileContent() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(true);
when(fBaseStorage.openResource(any())).thenReturn(new ByteArrayInputStream(DEFAULT_CONTENT));
super.openResourceReturnsFileContent();
}
@Test
@DisplayName("openResource() throws when base storage throws")
public void openResourceThrowsWhenBaseStorageThrows() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(true);
when(fBaseStorage.openResource(any())).thenThrow(new EOFException());
assertThrows(EOFException.class, () -> getDataStorage().openResource("any"));
}
@Override
@Test
@DisplayName("stored resource can be reloaded")
public void storedResourceCanBeReloaded() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(true);
when(fBaseStorage.loadResource(any())).thenReturn(DEFAULT_CONTENT);
getDataStorage().storeResource("any", DEFAULT_CONTENT);
assertArrayEquals(DEFAULT_CONTENT, getDataStorage().loadResource("any"));
verify(fBaseStorage, times(1)).storeResource(any(), any());
}
@Override
@Test
@DisplayName("hasResource() == true after storeResource()")
public void hasResourceIsTrueAfterStoreResource() throws IOException {
when(fBaseStorage.hasResource(any())).thenReturn(false).thenReturn(true);
super.hasResourceIsTrueAfterStoreResource();
verify(fBaseStorage, times(1)).storeResource(any(), any());
}
@Test
@DisplayName("storeResource() throws when base storage throws")
public void storeResourceThrowsWhenBaseStorageThrows() throws IOException {
doThrow(new EOFException()).when(fBaseStorage).storeResource(any(), any());
assertThrows(EOFException.class, () -> getDataStorage().storeResource("any", DEFAULT_CONTENT));
}
@Test
@DisplayName("setStorage() throws when baseStorage == null")
public void setStorageThrowsOnNullParameter() {
assertThrows(IllegalArgumentException.class, () -> getDataStorage().setStorage(null));
}
@Test
@DisplayName("setStorage() allows to replace storage")
public void setStorageSetsTheStorage() {
when(fBaseStorage.hasResource(any())).thenReturn(true);
final IDataStorage newStorage = mock(IDataStorage.class);
when(newStorage.hasResource(any())).thenReturn(false);
assertTrue(getDataStorage().hasResource("any"));
getDataStorage().setStorage(newStorage);
assertEquals(newStorage, getDataStorage().getStorage());
assertFalse(getDataStorage().hasResource("any"));
}
}