/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.catalog.impl;
import static org.easymock.classextension.EasyMock.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.easymock.EasyMock;
import org.easymock.IArgumentMatcher;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.catalog.NamespaceWorkspaceConsistencyListener;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.catalog.event.CatalogListener;
import org.geoserver.catalog.event.CatalogModifyEvent;
import org.geoserver.catalog.event.CatalogPostModifyEvent;
import org.junit.Test;
public class WorkspaceNamespaceConstencyTest {
@Test
public void testChangeWorkspace() {
Catalog cat = createMock(Catalog.class);
cat.addListener((CatalogListener) anyObject());
expectLastCall();
NamespaceInfo ns = createMock(NamespaceInfo.class);
ns.setPrefix("abcd");
expectLastCall();
expect(cat.getNamespaceByPrefix("gs")).andReturn(ns);
cat.save(ns);
expectLastCall();
WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class);
CatalogModifyEvent e = createNiceMock(CatalogModifyEvent.class);
expect(e.getSource()).andReturn(ws).anyTimes();
expect(e.getPropertyNames()).andReturn(Arrays.asList("name"));
expect(e.getOldValues()).andReturn((List)Arrays.asList("gs"));
expect(e.getNewValues()).andReturn((List)Arrays.asList("abcd"));
replay(e, ws, ns, cat);
new NamespaceWorkspaceConsistencyListener(cat).handleModifyEvent(e);
verify(ns, cat);
}
@Test
public void testChangeNamespace() {
Catalog cat = createMock(Catalog.class);
cat.addListener((CatalogListener) anyObject());
expectLastCall();
WorkspaceInfo ws = createMock(WorkspaceInfo.class);
ws.setName("abcd");
expectLastCall();
expect(cat.getWorkspaceByName("gs")).andReturn(ws);
cat.save(ws);
expectLastCall();
NamespaceInfo ns = createNiceMock(NamespaceInfo.class);
CatalogModifyEvent e = createNiceMock(CatalogModifyEvent.class);
expect(e.getSource()).andReturn(ns).anyTimes();
expect(e.getPropertyNames()).andReturn(Arrays.asList("prefix"));
expect(e.getOldValues()).andReturn((List)Arrays.asList("gs"));
expect(e.getNewValues()).andReturn((List)Arrays.asList("abcd"));
replay(e, ws, ns, cat);
new NamespaceWorkspaceConsistencyListener(cat).handleModifyEvent(e);
verify(ws, cat);
}
@Test
public void testChangeDefaultWorkspace() {
Catalog cat = createMock(Catalog.class);
cat.addListener((CatalogListener) anyObject());
expectLastCall();
NamespaceInfo def = createNiceMock(NamespaceInfo.class);
expect(cat.getDefaultNamespace()).andReturn(def);
NamespaceInfo ns = createNiceMock(NamespaceInfo.class);
expect(cat.getNamespaceByPrefix("abcd")).andReturn(ns);
cat.setDefaultNamespace(ns);
expectLastCall();
WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class);
expect(ws.getName()).andReturn("abcd");
CatalogModifyEvent e = createNiceMock(CatalogModifyEvent.class);
expect(e.getSource()).andReturn(cat).anyTimes();
expect(e.getPropertyNames()).andReturn(Arrays.asList("defaultWorkspace"));
expect(e.getNewValues()).andReturn((List)Arrays.asList(ws));
replay(ns, ws, e, cat);
new NamespaceWorkspaceConsistencyListener(cat).handleModifyEvent(e);
verify(ns, ws, cat);
}
@Test
public void testChangeDefaultNamespace() {
Catalog cat = createMock(Catalog.class);
cat.addListener((CatalogListener) anyObject());
expectLastCall();
WorkspaceInfo def = createNiceMock(WorkspaceInfo.class);
expect(cat.getDefaultWorkspace()).andReturn(def);
WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class);
expect(cat.getWorkspaceByName("abcd")).andReturn(ws);
cat.setDefaultWorkspace(ws);
expectLastCall();
NamespaceInfo ns = createNiceMock(NamespaceInfo.class);
expect(ns.getPrefix()).andReturn("abcd");
CatalogModifyEvent e = createNiceMock(CatalogModifyEvent.class);
expect(e.getSource()).andReturn(cat).anyTimes();
expect(e.getPropertyNames()).andReturn(Arrays.asList("defaultNamespace"));
expect(e.getNewValues()).andReturn((List)Arrays.asList(ns));
replay(ns, ws, e, cat);
new NamespaceWorkspaceConsistencyListener(cat).handleModifyEvent(e);
verify(ns, ws, cat);
}
@Test
public void testChangeNamespaceURI() {
Catalog cat = createMock(Catalog.class);
cat.addListener((CatalogListener) anyObject());
expectLastCall();
NamespaceInfo ns = createNiceMock(NamespaceInfo.class);
expect(ns.getPrefix()).andReturn("foo");
expect(ns.getURI()).andReturn("http://foo.org");
WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class);
expect(cat.getWorkspaceByName("foo")).andReturn(ws);
DataStoreInfo ds = createNiceMock(DataStoreInfo.class);
expect(cat.getDataStoresByWorkspace(ws)).andReturn(Arrays.asList(ds));
HashMap params = new HashMap();
params.put("namespace", "http://bar.org");
expect(ds.getConnectionParameters()).andReturn(params).anyTimes();
cat.save(hasNamespace("http://foo.org"));
expectLastCall();
CatalogPostModifyEvent e = createNiceMock(CatalogPostModifyEvent.class);
expect(e.getSource()).andReturn(ns).anyTimes();
replay(ds, ws, ns, e, cat);
new NamespaceWorkspaceConsistencyListener(cat).handlePostModifyEvent(e);
verify(cat);
}
protected StoreInfo hasNamespace(final String namespace) {
EasyMock.reportMatcher(new IArgumentMatcher() {
@Override
public boolean matches(Object argument) {
return namespace.equals(((StoreInfo)argument).getConnectionParameters().get("namespace"));
}
@Override
public void appendTo(StringBuffer buffer) {
buffer.append("hasNamespace '").append(namespace).append("'");
}
});
return null;
}
}