/* (c) 2015 - 2016 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.gwc.web.blob;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestHandler;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.form.CheckBox;
import org.geoserver.gwc.GWC;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.web.wicket.GeoServerDialog;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geowebcache.config.BlobStoreConfig;
import org.geowebcache.config.FileBlobStoreConfig;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.s3.S3BlobStoreConfig;
import org.junit.Test;
/**
*
* Modified Test for the BlobStoresPage, but now with a S3 BlobStore
*
* @author Niels Charlier
*
*/
public class S3BlobStoresPageTest extends GeoServerWicketTestSupport {
private static final String ID_DUMMY1 = "zzz";
private static final String ID_DUMMY2 = "yyy";
public BlobStoreConfig dummyStore1() {
FileBlobStoreConfig config = new FileBlobStoreConfig(ID_DUMMY1);
config.setFileSystemBlockSize(1024);
config.setBaseDirectory("/tmp");
return config;
}
public BlobStoreConfig dummyStore2() throws Exception {
S3BlobStoreConfig config = new S3BlobStoreConfig();
Field id = BlobStoreConfig.class.getDeclaredField("id");
id.setAccessible(true);
id.set(config, ID_DUMMY2);
config.setBucket("bucket");
return config;
}
@Test
public void testPage() {
BlobStoresPage page = new BlobStoresPage();
tester.startPage(page);
tester.assertRenderedPage(BlobStoresPage.class);
tester.assertComponent("storesPanel", GeoServerTablePanel.class);
tester.assertComponent("confirmDeleteDialog", GeoServerDialog.class);
tester.assertComponent("headerPanel:addNew", AjaxLink.class);
tester.assertComponent("headerPanel:removeSelected", AjaxLink.class);
}
@Test
public void testBlobStores() throws Exception {
BlobStoresPage page = new BlobStoresPage();
BlobStoreConfig dummy1 = dummyStore1();
GWC.get().addBlobStore(dummy1);
List<BlobStoreConfig> blobStores = GWC.get().getBlobStores();
tester.startPage(page);
GeoServerTablePanel table = (GeoServerTablePanel) tester.getComponentFromLastRenderedPage("storesPanel");
assertEquals(blobStores.size(), table.getDataProvider().size());
assertTrue(getStoresFromTable(table).contains(dummy1));
BlobStoreConfig dummy2 = dummyStore2();
GWC.get().addBlobStore(dummy2);
assertEquals(blobStores.size() + 1, table.getDataProvider().size());
assertTrue(getStoresFromTable(table).contains(dummy2));
//sort descending on type, S3 should be on top
tester.clickLink("storesPanel:listContainer:sortableLinks:1:header:link", true);
tester.clickLink("storesPanel:listContainer:sortableLinks:1:header:link", true);
assertEquals(dummy2, getStoresFromTable(table).get(0));
GWC.get().removeBlobStores(Collections.singleton(ID_DUMMY1));
GWC.get().removeBlobStores(Collections.singleton(ID_DUMMY2));
}
@Test
public void testNew() {
BlobStoresPage page = new BlobStoresPage();
tester.startPage(page);
tester.clickLink("headerPanel:addNew", true);
tester.assertRenderedPage(BlobStorePage.class);
}
@Test
public void testDelete() throws Exception {
BlobStoresPage page = new BlobStoresPage();
tester.startPage(page);
GeoServerTablePanel table = (GeoServerTablePanel) tester.getComponentFromLastRenderedPage("storesPanel");
BlobStoreConfig dummy1 = dummyStore1();
GWC.get().addBlobStore(dummy1);
assertTrue(GWC.get().getBlobStores().contains(dummy1));
//sort descending on id
tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);
tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);
//select
CheckBox selector = ((CheckBox) tester.getComponentFromLastRenderedPage("storesPanel:listContainer:items:1:selectItemContainer:selectItem"));
tester.getRequest().setParameter(selector.getInputName(), "true");
tester.executeAjaxEvent(selector, "click");
assertEquals(1, table.getSelection().size());
assertEquals(dummy1, table.getSelection().get(0));
//click delete
tester.clickLink("headerPanel:removeSelected", true);
assertFalse(GWC.get().getBlobStores().contains(dummy1));
//with layer
GWC.get().addBlobStore(dummy1);
assertTrue(GWC.get().getBlobStores().contains(dummy1));
TileLayer layer = GWC.get().getTileLayerByName("cite:Lakes");
layer.setBlobStoreId(ID_DUMMY1);
assertEquals(ID_DUMMY1, layer.getBlobStoreId());
GWC.get().save(layer);
//sort descending on id
tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);
tester.clickLink("storesPanel:listContainer:sortableLinks:0:header:link", true);
//select
//super.print(page, false, false, true);
selector = ((CheckBox) tester.getComponentFromLastRenderedPage("storesPanel:listContainer:items:2:selectItemContainer:selectItem"));
tester.getRequest().setParameter(selector.getInputName(), "true");
tester.executeAjaxEvent(selector, "click");
//click delete
assertEquals(1, table.getSelection().size());
assertEquals(dummy1, table.getSelection().get(0));
ModalWindow w = (ModalWindow) tester.getComponentFromLastRenderedPage("confirmDeleteDialog:dialog");
assertFalse(w.isShown());
tester.clickLink("headerPanel:removeSelected", true);
assertTrue(w.isShown());
//confirm
GeoServerDialog dialog = (GeoServerDialog) tester.getComponentFromLastRenderedPage("confirmDeleteDialog");
dialog.submit(new AjaxRequestHandler(tester.getLastRenderedPage()));
assertFalse(GWC.get().getBlobStores().contains(dummy1));
layer = GWC.get().getTileLayerByName("cite:Lakes");
assertNull(layer.getBlobStoreId());
}
public List<BlobStoreConfig> getStoresFromTable(GeoServerTablePanel table) {
List<BlobStoreConfig> result = new ArrayList<BlobStoreConfig>();
Iterator it = table.getDataProvider().iterator(0, table.size());
while (it.hasNext()) {
result.add( (BlobStoreConfig) it.next());
}
return result;
}
}