/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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
*
* 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.apache.cxf.xkms.x509.handlers;
import java.io.InputStream;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.UUID;
import org.apache.cxf.xkms.handlers.Applications;
import org.apache.cxf.xkms.handlers.XKMSConstants;
import org.apache.cxf.xkms.model.xkms.LocateRequestType;
import org.apache.cxf.xkms.model.xkms.MessageAbstractType;
import org.apache.cxf.xkms.model.xkms.QueryKeyBindingType;
import org.apache.cxf.xkms.model.xkms.UnverifiedKeyBindingType;
import org.apache.cxf.xkms.model.xkms.UseKeyWithType;
import org.apache.cxf.xkms.x509.repo.CertificateRepo;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
/**
* Test needs a real LDAP server.
*/
public class X509LocatorTest {
private static final org.apache.cxf.xkms.model.xkms.ObjectFactory XKMS_OF =
new org.apache.cxf.xkms.model.xkms.ObjectFactory();
@Test
public void locate() throws CertificateException {
CertificateRepo certRepo = EasyMock.createMock(CertificateRepo.class);
EasyMock.expect(certRepo.findBySubjectDn(EasyMock.eq("alice"))).andReturn(getAliceCert());
EasyMock.replay(certRepo);
X509Locator locator = new X509Locator(certRepo);
LocateRequestType request = prepareLocateXKMSRequest();
UnverifiedKeyBindingType result = locator.locate(request);
Assert.assertNotNull(result.getKeyInfo());
}
private X509Certificate getAliceCert() {
try {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream is = this.getClass().getResourceAsStream("/cert1.cer");
return (X509Certificate)certFactory.generateCertificate(is);
} catch (CertificateException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
private LocateRequestType prepareLocateXKMSRequest() {
QueryKeyBindingType queryKeyBindingType = XKMS_OF.createQueryKeyBindingType();
UseKeyWithType useKeyWithType = XKMS_OF.createUseKeyWithType();
useKeyWithType.setIdentifier("alice");
useKeyWithType.setApplication(Applications.PKIX.getUri());
queryKeyBindingType.getUseKeyWith().add(useKeyWithType);
LocateRequestType locateRequestType = XKMS_OF.createLocateRequestType();
locateRequestType.setQueryKeyBinding(queryKeyBindingType);
setGenericRequestParams(locateRequestType);
return locateRequestType;
}
private void setGenericRequestParams(MessageAbstractType request) {
request.setService(XKMSConstants.XKMS_ENDPOINT_NAME);
request.setId(UUID.randomUUID().toString());
}
}