added unit test for permission service
parent
e59e988809
commit
35f2a03b4e
|
@ -0,0 +1,174 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015 The MITRE Corporation
|
||||
* and the MIT Kerberos and Internet Trust Consortium
|
||||
*
|
||||
* Licensed 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
|
||||
*
|
||||
* 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.mitre.uma.service.impl;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mitre.oauth2.service.SystemScopeService;
|
||||
import org.mitre.uma.model.Permission;
|
||||
import org.mitre.uma.model.ResourceSet;
|
||||
import org.mitre.uma.repository.PermissionRepository;
|
||||
import org.mockito.AdditionalAnswers;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.springframework.security.oauth2.common.exceptions.InsufficientScopeException;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
|
||||
import static org.mockito.Matchers.anySetOf;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
/**
|
||||
* @author jricher
|
||||
*
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class TestDefaultPermissionService {
|
||||
|
||||
@Mock
|
||||
private PermissionRepository permissionRepository;
|
||||
|
||||
@Mock
|
||||
private SystemScopeService scopeService;
|
||||
|
||||
@InjectMocks
|
||||
private DefaultPermissionService permissionService;
|
||||
|
||||
private Set<String> scopes1 = ImmutableSet.of("foo", "bar", "baz");
|
||||
private Set<String> scopes2 = ImmutableSet.of("alpha", "beta", "betest");
|
||||
|
||||
private ResourceSet rs1;
|
||||
private ResourceSet rs2;
|
||||
|
||||
private String rs1Name = "resource set 1";
|
||||
private String rs1Owner = "resource set owner 1";
|
||||
private Long rs1Id = 1L;
|
||||
|
||||
private String rs2Name = "resource set 2";
|
||||
private String rs2Owner = "resource set owner 2";
|
||||
private Long rs2Id = 2L;
|
||||
|
||||
|
||||
@Before
|
||||
public void prepare() {
|
||||
rs1 = new ResourceSet();
|
||||
rs1.setName(rs1Name);
|
||||
rs1.setOwner(rs1Owner);
|
||||
rs1.setId(rs1Id );
|
||||
rs1.setScopes(scopes1);
|
||||
|
||||
rs2 = new ResourceSet();
|
||||
rs2.setName(rs2Name);
|
||||
rs2.setOwner(rs2Owner);
|
||||
rs2.setId(rs2Id);
|
||||
rs2.setScopes(scopes2);
|
||||
|
||||
// have the repository just pass the argument through
|
||||
when(permissionRepository.save(Mockito.any(Permission.class))).then(AdditionalAnswers.returnsFirstArg());
|
||||
|
||||
when(scopeService.scopesMatch(anySetOf(String.class), anySetOf(String.class))).then(new Answer<Boolean>() {
|
||||
|
||||
@Override
|
||||
public Boolean answer(InvocationOnMock invocation) throws Throwable {
|
||||
Object[] arguments = invocation.getArguments();
|
||||
@SuppressWarnings("unchecked")
|
||||
Set<String> expected = (Set<String>) arguments[0];
|
||||
@SuppressWarnings("unchecked")
|
||||
Set<String> actual = (Set<String>) arguments[1];
|
||||
|
||||
return expected.containsAll(actual);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test method for {@link org.mitre.uma.service.impl.DefaultPermissionService#create(org.mitre.uma.model.ResourceSet, java.util.Set)}.
|
||||
*/
|
||||
@Test
|
||||
public void testCreate_ticket() {
|
||||
|
||||
Permission perm = permissionService.create(rs1, scopes1);
|
||||
|
||||
// we want there to be a non-null ticket
|
||||
assertNotNull(perm.getTicket());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreate_uuid() {
|
||||
Permission perm = permissionService.create(rs1, scopes1);
|
||||
|
||||
// we expect this to be a UUID
|
||||
UUID uuid = UUID.fromString(perm.getTicket());
|
||||
|
||||
assertNotNull(uuid);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreate_differentTicketsSameClient() {
|
||||
|
||||
Permission perm1 = permissionService.create(rs1, scopes1);
|
||||
Permission perm2 = permissionService.create(rs1, scopes1);
|
||||
|
||||
assertNotNull(perm1.getTicket());
|
||||
assertNotNull(perm2.getTicket());
|
||||
|
||||
// make sure these are different from each other
|
||||
assertThat(perm1.getTicket(), not(equalTo(perm2.getTicket())));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreate_differentTicketsDifferentClient() {
|
||||
|
||||
Permission perm1 = permissionService.create(rs1, scopes1);
|
||||
Permission perm2 = permissionService.create(rs2, scopes2);
|
||||
|
||||
assertNotNull(perm1.getTicket());
|
||||
assertNotNull(perm2.getTicket());
|
||||
|
||||
// make sure these are different from each other
|
||||
assertThat(perm1.getTicket(), not(equalTo(perm2.getTicket())));
|
||||
|
||||
}
|
||||
|
||||
@Test(expected = InsufficientScopeException.class)
|
||||
public void testCreate_scopeMismatch() {
|
||||
@SuppressWarnings("unused")
|
||||
// try to get scopes outside of what we're allowed to do, this should throw an exception
|
||||
Permission perm = permissionService.create(rs1, scopes2);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue