/* (c) 2014 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.geofence.services.servicetest; import org.geoserver.geofence.core.model.GFUser; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.geoserver.geofence.core.model.GSInstance; import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.model.LayerAttribute; import org.geoserver.geofence.core.model.LayerDetails; import org.geoserver.geofence.core.model.UserGroup; import org.geoserver.geofence.core.model.Rule; import org.geoserver.geofence.core.model.enums.AccessType; import org.geoserver.geofence.core.model.enums.GrantType; import org.geoserver.geofence.services.GFUserAdminService; import org.geoserver.geofence.services.InstanceAdminService; import org.geoserver.geofence.services.UserGroupAdminService; import org.geoserver.geofence.services.RuleAdminService; import org.geoserver.geofence.services.UserAdminService; import org.geoserver.geofence.services.dto.ShortGroup; import org.geoserver.geofence.services.rest.utils.InstanceCleaner; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.InitializingBean; /** * * @author ETj (etj at geo-solutions.it) */ public class MainTest implements InitializingBean { private static final Logger LOGGER = LogManager.getLogger(MainTest.class); private RuleAdminService ruleAdminService; private UserGroupAdminService userGroupAdminService; private UserAdminService userAdminService; private GFUserAdminService gfUserAdminService; private InstanceAdminService instanceAdminService; private InstanceCleaner instanceCleaner; public void afterPropertiesSet() throws Exception { LOGGER.info("===== Starting Geofence REST test services ====="); instanceCleaner.removeAll(); instanceCleaner.removeAllGFUsers(); setUpTestRule(); } private void setUpTestRule() { ShortGroup sp1 = new ShortGroup(); sp1.setName("test_profile"); long p1id = userGroupAdminService.insert(sp1); ShortGroup sp2 = new ShortGroup(); sp2.setName("test_profile2"); long p2id = userGroupAdminService.insert(sp2); UserGroup p2 = userGroupAdminService.get(p2id); GFUser u0 = new GFUser(); u0.setName("admin"); u0.setPassword("password"); u0.setEnabled(true); u0.setFullName("Sample G.F. Admin"); u0.setEmailAddress("gf.admin@geofence.net"); u0.setExtId("sample_geoserver_user"); gfUserAdminService.insert(u0); GSUser u1 = new GSUser(); u1.setAdmin(true); u1.setName("admin"); u1.setPassword("password"); u1.getGroups().add(userGroupAdminService.get(p1id)); u1.setEnabled(true); u1.setFullName("Sample G.S. Admin"); u1.setEmailAddress("gs.admin@geofence.net"); u1.setExtId("sample_geoserver_user"); userAdminService.insert(u1); GSInstance gs1 = new GSInstance(); gs1.setName("geoserver01"); gs1.setUsername("admin"); gs1.setPassword("geoserver"); gs1.setBaseURL("http://localhost/geoserver"); gs1.setDescription("A sample instance"); instanceAdminService.insert(gs1); Rule r0 = new Rule(5, u1.getName(), p2.getName(), gs1, null, "s0", "r0", null, null, GrantType.ALLOW); ruleAdminService.insert(r0); final Long r1id; { Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); ruleAdminService.insert(r1); r1id = r1.getId(); } // save details and check it has been saved final Long lid1; { LayerDetails details = new LayerDetails(); details.getAllowedStyles().add("FIRST_style1"); details.getAttributes().add(new LayerAttribute("FIRST_attr1", AccessType.NONE)); ruleAdminService.setDetails(r1id, details); lid1 = details.getId(); assert lid1 != null; } // check details have been set in Rule { Rule loaded = ruleAdminService.get(r1id); LayerDetails details = loaded.getLayerDetails(); assert details != null; assert lid1.equals(details.getId()); assert 1 == details.getAttributes().size(); assert 1 == details.getAllowedStyles().size(); LOGGER.info("Found " + loaded + " --> " + loaded.getLayerDetails()); } // set new details final Long lid2; { LayerDetails details = new LayerDetails(); details.getAttributes().add(new LayerAttribute("attr1", AccessType.NONE)); details.getAttributes().add(new LayerAttribute("attr2", AccessType.READONLY)); details.getAttributes().add(new LayerAttribute("attr3", AccessType.READWRITE)); assert 3 == details.getAttributes().size(); Set<String> styles = new HashSet<String>(); styles.add("style1"); styles.add("style2"); ruleAdminService.setAllowedStyles(r1id, styles); ruleAdminService.setDetails(r1id, details); lid2 = details.getId(); assert lid2 != null; } // check details { Rule loaded = ruleAdminService.get(r1id); LayerDetails details = loaded.getLayerDetails(); assert details != null; for (LayerAttribute layerAttribute : details.getAttributes()) { LOGGER.error(layerAttribute); } assert 3 == details.getAttributes().size(); assert 2 == details.getAllowedStyles().size(); assert details.getAllowedStyles().contains("style1"); } } // ========================================================================== public void setInstanceCleaner(InstanceCleaner instanceCleaner) { this.instanceCleaner = instanceCleaner; } // ========================================================================== public void setUserGroupAdminService(UserGroupAdminService service) { this.userGroupAdminService = service; } public void setUserAdminService(UserAdminService service) { this.userAdminService = service; } public void setInstanceAdminService(InstanceAdminService service) { this.instanceAdminService = service; } public void setRuleAdminService(RuleAdminService service) { this.ruleAdminService = service; } public void setGfUserAdminService(GFUserAdminService service) { this.gfUserAdminService = service; } }