/* (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.assertTrue;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.List;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.gwc.GWC;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geowebcache.config.BlobStoreConfig;
import org.geowebcache.config.ConfigurationException;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.s3.S3BlobStoreConfig;
import org.junit.Test;
/**
*
* Test for the BlobStorePage with S3 BlobStore Panel
*
* @author Niels Charlier
*
*/
public class S3BlobStorePageTest extends GeoServerWicketTestSupport {
@Test
public void testPage() {
BlobStorePage page = new BlobStorePage();
tester.startPage(page);
tester.assertRenderedPage(BlobStorePage.class);
tester.assertComponent("selector", Form.class);
tester.assertComponent("selector:typeOfBlobStore", DropDownChoice.class);
tester.assertComponent("blobConfigContainer", MarkupContainer.class);
tester.assertInvisible("blobConfigContainer:blobStoreForm");
DropDownChoice typeOfBlobStore = (DropDownChoice) tester.getComponentFromLastRenderedPage("selector:typeOfBlobStore");
assertEquals(2, typeOfBlobStore.getChoices().size());
assertEquals("File BlobStore", typeOfBlobStore.getChoices().get(0).toString());
assertEquals("S3 BlobStore", typeOfBlobStore.getChoices().get(1).toString());
executeAjaxEventBehavior("selector:typeOfBlobStore", "change", "0");
tester.assertVisible("blobConfigContainer:blobStoreForm");
tester.assertComponent("blobConfigContainer:blobStoreForm:blobSpecificPanel", FileBlobStorePanel.class);
executeAjaxEventBehavior("selector:typeOfBlobStore", "change", "1");
tester.assertComponent("blobConfigContainer:blobStoreForm:blobSpecificPanel", S3BlobStorePanel.class);
}
@Test
public void testNew() throws ConfigurationException {
BlobStorePage page = new BlobStorePage();
tester.startPage(page);
executeAjaxEventBehavior("selector:typeOfBlobStore", "change", "1");
FormTester formTester = tester.newFormTester("blobConfigContainer:blobStoreForm");
formTester.setValue("id", "myblobstore");
formTester.setValue("enabled", false);
formTester.setValue("blobSpecificPanel:bucket", "mybucket");
formTester.setValue("blobSpecificPanel:awsAccessKey", "myaccesskey");
formTester.setValue("blobSpecificPanel:awsSecretKey", "mysecretkey");
tester.executeAjaxEvent("blobConfigContainer:blobStoreForm:save", "click");
List<BlobStoreConfig> blobStores = GWC.get().getBlobStores();
BlobStoreConfig config = blobStores.get(0);
assertTrue(config instanceof S3BlobStoreConfig);
assertEquals("myblobstore", config.getId());
assertEquals("mybucket", ((S3BlobStoreConfig) config).getBucket());
assertEquals("myaccesskey", ((S3BlobStoreConfig) config).getAwsAccessKey());
assertEquals("mysecretkey", ((S3BlobStoreConfig) config).getAwsSecretKey());
assertEquals(50, ((S3BlobStoreConfig) config).getMaxConnections().intValue());
GWC.get().removeBlobStores(Collections.singleton("myblobstore"));
}
@Test
public void testModify() throws Exception {
S3BlobStoreConfig sconfig = new S3BlobStoreConfig();
Field id = BlobStoreConfig.class.getDeclaredField("id");
id.setAccessible(true);
id.set(sconfig, "myblobstore");
sconfig.setMaxConnections(50);
sconfig.setBucket("mybucket");
sconfig.setAwsAccessKey("myaccesskey");
sconfig.setAwsSecretKey("mysecretkey");
GWC.get().addBlobStore(sconfig);
TileLayer layer = GWC.get().getTileLayerByName("cite:Lakes");
layer.setBlobStoreId("myblobstore");
GWC.get().save(layer);
BlobStorePage page = new BlobStorePage(sconfig);
tester.startPage(page);
tester.assertVisible("blobConfigContainer:blobStoreForm");
tester.assertComponent("blobConfigContainer:blobStoreForm:blobSpecificPanel", S3BlobStorePanel.class);
FormTester formTester = tester.newFormTester("blobConfigContainer:blobStoreForm");
formTester.setValue("id", "yourblobstore");
formTester.setValue("blobSpecificPanel:bucket", "yourbucket");
formTester.submit();
tester.executeAjaxEvent("blobConfigContainer:blobStoreForm:save", "click");
BlobStoreConfig config = GWC.get().getBlobStores().get(0);
assertTrue(config instanceof S3BlobStoreConfig);
assertEquals("yourblobstore", config.getId());
assertEquals("yourbucket", ((S3BlobStoreConfig) config).getBucket());
//test updated id!
layer = GWC.get().getTileLayerByName("cite:Lakes");
assertEquals("yourblobstore", layer.getBlobStoreId());
GWC.get().removeBlobStores(Collections.singleton("yourblobstore"));
}
}