/*
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a
* copy of the License at the following location:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jasig.cas.services;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.jasig.cas.authentication.principal.Principal;
import org.jasig.cas.authentication.principal.Service;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author battags
* @since 3.0
*
*/
public class DefaultServicesManagerImplTests {
private DefaultServicesManagerImpl defaultServicesManagerImpl;
@Before
public void setUp() throws Exception {
final InMemoryServiceRegistryDaoImpl dao = new InMemoryServiceRegistryDaoImpl();
final List<RegisteredService> list = new ArrayList<RegisteredService>();
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(2500);
r.setServiceId("serviceId");
r.setName("serviceName");
r.setEvaluationOrder(1000);
list.add(r);
dao.setRegisteredServices(list);
this.defaultServicesManagerImpl = new DefaultServicesManagerImpl(dao);
}
@Test
public void testSaveAndGet() {
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(1000);
r.setName("test");
r.setServiceId("test");
this.defaultServicesManagerImpl.save(r);
assertNotNull(this.defaultServicesManagerImpl.findServiceBy(1000));
}
@Test
public void testMultiServicesBySameName() {
RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(666);
r.setName("testServiceName");
r.setServiceId("testServiceA");
this.defaultServicesManagerImpl.save(r);
r = new RegisteredServiceImpl();
r.setId(999);
r.setName("testServiceName");
r.setServiceId("testServiceB");
this.defaultServicesManagerImpl.save(r);
/** Added 2 above, plus another that is added during @Setup **/
assertEquals(3, this.defaultServicesManagerImpl.getAllServices().size());
}
@Test
public void testSaveWithReturnedPersistedInstance() {
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(1000L);
r.setName("test");
r.setServiceId("test");
final RegisteredService persistedRs = this.defaultServicesManagerImpl.save(r);
assertNotNull(persistedRs);
assertEquals(1000L, persistedRs.getId());
}
@Test
public void testDeleteAndGet() {
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(1000);
r.setName("test");
r.setServiceId("test");
this.defaultServicesManagerImpl.save(r);
assertEquals(r, this.defaultServicesManagerImpl.findServiceBy(r.getId()));
this.defaultServicesManagerImpl.delete(r.getId());
assertNull(this.defaultServicesManagerImpl.findServiceBy(r.getId()));
}
@Test
public void testDeleteNotExistentService() {
assertNull(this.defaultServicesManagerImpl.delete(1500));
}
@Test
public void testMatchesExistingService() {
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(1000);
r.setName("test");
r.setServiceId("test");
final Service service = new SimpleService("test");
final Service service2 = new SimpleService("fdfa");
this.defaultServicesManagerImpl.save(r);
assertTrue(this.defaultServicesManagerImpl.matchesExistingService(service));
assertEquals(r, this.defaultServicesManagerImpl.findServiceBy(service));
assertNull(this.defaultServicesManagerImpl.findServiceBy(service2));
}
@Test
public void testAllService() {
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(1000);
r.setName("test");
r.setServiceId("test");
r.setEvaluationOrder(2);
this.defaultServicesManagerImpl.save(r);
assertEquals(2, this.defaultServicesManagerImpl.getAllServices().size());
assertTrue(this.defaultServicesManagerImpl.getAllServices().contains(r));
}
@Test
public void testEmptyServicesRegistry() {
final SimpleService s = new SimpleService("http://www.google.com");
for (final RegisteredService svc : defaultServicesManagerImpl.getAllServices()) {
defaultServicesManagerImpl.delete(svc.getId());
}
assertTrue(this.defaultServicesManagerImpl.getAllServices().size() == 0);
assertNull(this.defaultServicesManagerImpl.findServiceBy(s));
assertNull(this.defaultServicesManagerImpl.findServiceBy(1000));
}
@Test
public void testEvaluationOrderOfServices() {
final RegisteredServiceImpl r = new RegisteredServiceImpl();
r.setId(100);
r.setName("test");
r.setServiceId("test");
r.setEvaluationOrder(200);
final RegisteredServiceImpl r2 = new RegisteredServiceImpl();
r2.setId(101);
r2.setName("test");
r2.setServiceId("test");
r2.setEvaluationOrder(80);
final RegisteredServiceImpl r3 = new RegisteredServiceImpl();
r3.setId(102);
r3.setName("Sample test service");
r3.setServiceId("test");
r3.setEvaluationOrder(80);
this.defaultServicesManagerImpl.save(r);
this.defaultServicesManagerImpl.save(r3);
this.defaultServicesManagerImpl.save(r2);
final List<RegisteredService> allServices = new ArrayList<RegisteredService>(
this.defaultServicesManagerImpl.getAllServices());
//We expect the 3 newly added services, plus the one added in setUp()
assertEquals(4, allServices.size());
assertEquals(allServices.get(0).getId(), r3.getId());
assertEquals(allServices.get(1).getId(), r2.getId());
assertEquals(allServices.get(2).getId(), r.getId());
}
protected class SimpleService implements Service {
/**
* Comment for <code>serialVersionUID</code>.
*/
private static final long serialVersionUID = 6572142033945243669L;
private String id;
protected SimpleService(final String id) {
this.id = id;
}
public Map<String, Object> getAttributes() {
return null;
}
public String getId() {
return this.id;
}
public void setPrincipal(final Principal principal) {
// nothing to do
}
public boolean matches(final Service service) {
return true;
}
}
}