/* (c) 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.cluster.impl.handlers.configuration;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.catalog.impl.WorkspaceInfoImpl;
import org.geoserver.cluster.impl.events.configuration.JMSEventType;
import org.geoserver.cluster.impl.events.configuration.JMSSettingsModifyEvent;
import org.geoserver.config.SettingsInfo;
import org.geoserver.config.impl.SettingsInfoImpl;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.test.GeoServerSystemTestSupport;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
public class JmsWorkspaceHandlerTest extends GeoServerSystemTestSupport {
private WorkspaceInfo testWorkspace;
@Override
protected void setUpSpring(List<String> springContextLocations) {
super.setUpSpring(springContextLocations);
springContextLocations.add("classpath:TestContext.xml");
}
@Before
public void setup() {
// create a test workspace
WorkspaceInfoImpl workspace = new WorkspaceInfoImpl();
workspace.setId("jms-test-workspace");
workspace.setName("jms-test-workspace");
getCatalog().add(workspace);
testWorkspace = workspace;
}
@After
public void clean() {
// remove test workspace
getCatalog().remove(getCatalog().getWorkspace("jms-test-workspace"));
}
@Test
public void testSettingsSimpleCrud() throws Exception {
// settings events handler
JMSSettingsHandler handler = createHandler();
// create a new settings
handler.synchronize(createNewSettingsEvent("settings1", "settings1"));
checkSettingsExists("settings1");
// update settings
handler.synchronize(createModifySettingsEvent("settings2"));
checkSettingsExists("settings2");
// delete settings
handler.synchronize(createRemoveSettings());
assertThat(getGeoServer().getSettings(testWorkspace), nullValue());
}
private void checkSettingsExists(String settingsTile) {
SettingsInfo settingsInfo = getGeoServer().getSettings(testWorkspace);
assertThat(settingsInfo, notNullValue());
assertThat(settingsInfo.getTitle(), is(settingsTile));
}
private JMSSettingsModifyEvent createNewSettingsEvent(String settingsId, String settingsTitle) {
// our settings information
SettingsInfoImpl settingsInfo = new SettingsInfoImpl();
settingsInfo.setId(settingsId);
settingsInfo.setTitle(settingsTitle);
settingsInfo.setWorkspace(testWorkspace);
// create jms settings modify event
return new JMSSettingsModifyEvent(settingsInfo, JMSEventType.ADDED);
}
private JMSSettingsModifyEvent createModifySettingsEvent(String newSettingsTitle) {
// settings information
SettingsInfo settingsInfo = getGeoServer().getSettings(testWorkspace);
String oldSettingsTitle = settingsInfo.getTitle();
settingsInfo.setTitle(newSettingsTitle);
// create jms settings modify event
return new JMSSettingsModifyEvent(settingsInfo, Collections.singletonList("title"),
Collections.singletonList(oldSettingsTitle),
Collections.singletonList(newSettingsTitle),
JMSEventType.MODIFIED);
}
private JMSSettingsModifyEvent createRemoveSettings() {
// our settings information
SettingsInfo settingsInfo = getGeoServer().getSettings(testWorkspace);
// create jms settings modify event
return new JMSSettingsModifyEvent(settingsInfo, JMSEventType.REMOVED);
}
private JMSSettingsHandler createHandler() {
JMSSettingsHandlerSPI handlerSpi = GeoServerExtensions.bean(JMSSettingsHandlerSPI.class);
return (JMSSettingsHandler) handlerSpi.createHandler();
}
}