/** * Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2014. * * 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.italiangrid.voms.test.req; import java.util.Arrays; import java.util.List; import java.util.Random; import org.bouncycastle.asn1.x509.AttributeCertificate; import org.italiangrid.voms.VOMSError; import org.italiangrid.voms.ac.VOMSACValidator; import org.italiangrid.voms.request.VOMSACRequest; import org.italiangrid.voms.request.VOMSACService; import org.italiangrid.voms.request.VOMSProtocol; import org.italiangrid.voms.request.VOMSProtocolError; import org.italiangrid.voms.request.VOMSResponse; import org.italiangrid.voms.request.VOMSServerInfo; import org.italiangrid.voms.request.impl.DefaultVOMSACRequest; import org.italiangrid.voms.test.utils.EchoVOMSProtocol; import org.italiangrid.voms.test.utils.Fixture; import org.italiangrid.voms.test.utils.Utils; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import eu.emi.security.authn.x509.X509Credential; import eu.emi.security.authn.x509.impl.PEMCredential; public class TestRequests implements Fixture { @Test public void testEchoRequest() throws Exception { VOMSACService acService = Utils.buildACService(new EchoVOMSProtocol(Utils .getAACredential())); VOMSACRequest req = new DefaultVOMSACRequest.Builder("test.vo").build(); PEMCredential holder = Utils.getTestUserCredential(); AttributeCertificate ac = acService .getVOMSAttributeCertificate(holder, req); VOMSACValidator validator = Utils.getVOMSValidator(); List<AttributeCertificate> acs = validator.validateACs(Arrays.asList(ac)); Assert.assertFalse(acs.isEmpty()); } @Test public void testFailureIfVOIsNotKnown() throws Exception { VOMSACService acService = Utils.buildACService(new EchoVOMSProtocol(Utils .getAACredential())); VOMSACRequest req = new DefaultVOMSACRequest.Builder("test.unknown.vo") .build(); PEMCredential holder = Utils.getTestUserCredential(); try { acService.getVOMSAttributeCertificate(holder, req); } catch (VOMSError e) { Assert .assertEquals( "VOMS server for VO test.unknown.vo is not known! Check your vomses configuration.", e.getMessage()); return; } Assert.fail("No exceptions raised for unknown VO"); } @Test public void testNullACBytesHandling() throws Exception { VOMSProtocol nullBytesProtocol = new VOMSProtocol() { public VOMSResponse doRequest(VOMSServerInfo endpoint, X509Credential credential, VOMSACRequest request) { VOMSResponse r = Mockito.mock(VOMSResponse.class); return r; } }; VOMSACService acService = Utils.buildACService(nullBytesProtocol); VOMSACRequest req = new DefaultVOMSACRequest.Builder("test.vo").build(); AttributeCertificate ac = acService.getVOMSAttributeCertificate( Utils.getTestUserCredential(), req); Assert.assertNull(ac); } @Test public void testRandomACBytesHandling() throws Exception { VOMSProtocol nullBytesProtocol = new VOMSProtocol() { public VOMSResponse doRequest(VOMSServerInfo endpoint, X509Credential credential, VOMSACRequest request) { Random r = new Random(); byte[] acBytes = new byte[2048]; r.nextBytes(acBytes); VOMSResponse response = Mockito.mock(VOMSResponse.class); Mockito.when(response.getAC()).thenReturn(acBytes); return response; } }; VOMSACService acService = Utils.buildACService(nullBytesProtocol); VOMSACRequest req = new DefaultVOMSACRequest.Builder("test.vo").build(); AttributeCertificate ac = acService.getVOMSAttributeCertificate( Utils.getTestUserCredential(), req); Assert.assertNull(ac); } @Test public void testProtocolFallback() throws Exception { VOMSProtocol exceptionProtocol = Mockito.mock(VOMSProtocol.class); Mockito.when( exceptionProtocol.doRequest(Mockito.any(VOMSServerInfo.class), Mockito.any(X509Credential.class), Mockito.any(VOMSACRequest.class))) .thenReturn(null); VOMSProtocol fallBackProtocol = Mockito.mock(VOMSProtocol.class); VOMSACService acService = Utils.buildACService(exceptionProtocol, fallBackProtocol); VOMSACRequest req = new DefaultVOMSACRequest.Builder("test.vo").build(); AttributeCertificate ac = acService.getVOMSAttributeCertificate( Utils.getTestUserCredential(), req); Mockito.verify(fallBackProtocol, Mockito.atLeastOnce()).doRequest( Mockito.any(VOMSServerInfo.class), Mockito.any(X509Credential.class), Mockito.any(VOMSACRequest.class)); Assert.assertNull(ac); } @Test public void testProtocolFallback2() throws Exception { VOMSProtocol exceptionProtocol = Mockito.mock(VOMSProtocol.class); Mockito.when( exceptionProtocol.doRequest(Mockito.any(VOMSServerInfo.class), Mockito.any(X509Credential.class), Mockito.any(VOMSACRequest.class))) .thenThrow( new VOMSProtocolError("protocol error", null, null, null, null)); VOMSProtocol fallBackProtocol = Mockito.mock(VOMSProtocol.class); VOMSACService acService = Utils.buildACService(exceptionProtocol, fallBackProtocol); VOMSACRequest req = new DefaultVOMSACRequest.Builder("test.vo").build(); AttributeCertificate ac = acService.getVOMSAttributeCertificate( Utils.getTestUserCredential(), req); Mockito.verify(fallBackProtocol, Mockito.atLeastOnce()).doRequest( Mockito.any(VOMSServerInfo.class), Mockito.any(X509Credential.class), Mockito.any(VOMSACRequest.class)); Assert.assertNull(ac); } }