/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.protocols.ldap;
import java.util.ArrayList;
import java.util.List;
import org.opends.server.TestCaseUtils;
import org.opends.messages.Message;
import static org.opends.server.protocols.ldap.LDAPConstants.*;
import org.opends.server.protocols.asn1.ASN1Writer;
import org.opends.server.protocols.asn1.ASN1;
import org.opends.server.protocols.asn1.ASN1Reader;
import org.opends.server.types.*;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
public class TestBindResponseProtocolOp extends LdapTestCase {
private static Message message = Message.raw("This is a message");
private static Message message2 = Message.raw("This is a second message");
ResultCode okCode = ResultCode.SUCCESS;
ResultCode busyCode = ResultCode.BUSY;
ResultCode invalidSyntaxCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
private static String dn = "cn=dn, dc=example,dc=com";
private static String dn2 = "cn=dn2, dc=example,dc=com";
private static String saslCreds = "sasl credentials";
private static String saslCreds2 = "sasl2 credentials";
private static String url = "ldap://somewhere.example.com";
private static String url2 = "ldap://somewhere2.example.com";
/**
* Once-only initialization.
*
* @throws Exception
* If an unexpected error occurred.
*/
@BeforeClass
public void setUp() throws Exception {
// This test suite depends on having the schema available, so we'll
// start the server.
TestCaseUtils.startServer();
}
@Test ()
public void testBindRequestToString() throws Exception
{
List<String> referralURLs=new ArrayList<String>();
referralURLs.add(url);
DN responseDn = DN.decode(dn);
ByteString serverSASLCredentials =
ByteString.valueOf(saslCreds);
BindResponseProtocolOp r =
new BindResponseProtocolOp(okCode.getIntValue(),
message, responseDn, referralURLs,
serverSASLCredentials);
toString(r);
}
@Test (expectedExceptions = LDAPException.class)
public void testBindResponseTooFew() throws Exception {
ByteStringBuilder bsb = new ByteStringBuilder();
ASN1Writer writer = ASN1.getWriter(bsb);
writer.writeStartSequence(OP_TYPE_BIND_RESPONSE);
writer.writeOctetString((String)null);
writer.writeOctetString((String)null);
writer.writeEndSequence();
ASN1Reader reader = ASN1.getReader(bsb.toByteString());
LDAPReader.readProtocolOp(reader);
}
/**
* Test to ensure trailing unrecognized components are ignored.
*/
@Test
public void testBindResponseTooMany() throws Exception {
DN responseDn = DN.decode(dn);
ByteStringBuilder bsb = new ByteStringBuilder();
ASN1Writer writer = ASN1.getWriter(bsb);
writer.writeStartSequence(OP_TYPE_BIND_RESPONSE);
writer.writeInteger(okCode.getIntValue());
writer.writeOctetString(responseDn.toString());
writer.writeOctetString(message.toString());
writer.writeBoolean(true);
writer.writeEndSequence();
ASN1Reader reader = ASN1.getReader(bsb.toByteString());
ProtocolOp protocolOp = LDAPReader.readProtocolOp(reader);
assertTrue(protocolOp instanceof BindResponseProtocolOp);
BindResponseProtocolOp bindResponse = (BindResponseProtocolOp)protocolOp;
assertTrue(bindResponse.getResultCode() == okCode.getIntValue());
assertTrue(bindResponse.getMatchedDN().toNormalizedString().equals(responseDn.toNormalizedString()));
assertTrue(bindResponse.getErrorMessage().toString().equals(message.toString()));
assertNull(bindResponse.getReferralURLs());
assertNull(bindResponse.getServerSASLCredentials());
}
@Test (expectedExceptions = LDAPException.class)
public void testBindResponseBadResult() throws Exception {
ByteStringBuilder bsb = new ByteStringBuilder();
ASN1Writer writer = ASN1.getWriter(bsb);
writer.writeStartSequence(OP_TYPE_BIND_RESPONSE);
writer.writeOctetString("invalid element");
writer.writeOctetString((String)null);
writer.writeOctetString((String)null);
writer.writeEndSequence();
ASN1Reader reader = ASN1.getReader(bsb.toByteString());
LDAPReader.readProtocolOp(reader);
}
/**
* Test to ensure trailing unrecognized components are ignored
* without generating an error.
*/
@Test
public void testBindResponseBadReferral() throws Exception {
DN responseDn = DN.decode(dn);
ByteString serverSASLCredentials =
ByteString.valueOf(saslCreds);
ByteStringBuilder bsb = new ByteStringBuilder();
ASN1Writer writer = ASN1.getWriter(bsb);
writer.writeStartSequence(OP_TYPE_BIND_RESPONSE);
writer.writeInteger(okCode.getIntValue());
writer.writeOctetString(responseDn.toString());
writer.writeOctetString(message.toString());
writer.writeInteger(Long.MAX_VALUE);
writer.writeOctetString(TYPE_SERVER_SASL_CREDENTIALS,
serverSASLCredentials);
writer.writeEndSequence();
ASN1Reader reader = ASN1.getReader(bsb.toByteString());
ProtocolOp protocolOp = LDAPReader.readProtocolOp(reader);
assertTrue(protocolOp instanceof BindResponseProtocolOp);
BindResponseProtocolOp bindResponse = (BindResponseProtocolOp)protocolOp;
assertTrue(bindResponse.getResultCode() == okCode.getIntValue());
assertTrue(bindResponse.getMatchedDN().toNormalizedString().equals(responseDn.toNormalizedString()));
assertTrue(bindResponse.getErrorMessage().toString().equals(message.toString()));
assertNull(bindResponse.getReferralURLs());
assertNull(bindResponse.getServerSASLCredentials());
}
@Test
public void testBindResponseEncodeDecode() throws Exception {
List<String> referralURLs=new ArrayList<String>();
referralURLs.add(url);
DN responseDn = DN.decode(dn);
ByteString serverSASLCredentials =
ByteString.valueOf(saslCreds);
BindResponseProtocolOp saslOkResp =
new BindResponseProtocolOp(okCode.getIntValue(),
message, responseDn, referralURLs,
serverSASLCredentials);
BindResponseProtocolOp busyResp =
new BindResponseProtocolOp(busyCode.getIntValue());
BindResponseProtocolOp invalidSyntaxResp =
new BindResponseProtocolOp(invalidSyntaxCode.getIntValue(),
message);
ByteStringBuilder saslOkBuilder = new ByteStringBuilder();
ASN1Writer saslOkWriter = ASN1.getWriter(saslOkBuilder);
ByteStringBuilder busyBuilder = new ByteStringBuilder();
ASN1Writer busyWriter = ASN1.getWriter(busyBuilder);
ByteStringBuilder invalidSyntaxBuilder = new ByteStringBuilder();
ASN1Writer invalidSyntaxWriter = ASN1.getWriter(invalidSyntaxBuilder);
saslOkResp.write(saslOkWriter);
busyResp.write(busyWriter);
invalidSyntaxResp.write(invalidSyntaxWriter);
ASN1Reader saslOkReader = ASN1.getReader(saslOkBuilder.toByteString());
ASN1Reader busyReader = ASN1.getReader(busyBuilder.toByteString());
ASN1Reader invalidSyntaxReader = ASN1.getReader(invalidSyntaxBuilder.toByteString());
ProtocolOp saslOkDec= LDAPReader.readProtocolOp(saslOkReader);
ProtocolOp busyDec = LDAPReader.readProtocolOp(busyReader);
ProtocolOp invalidSyntaxDec = LDAPReader.readProtocolOp(invalidSyntaxReader);
assertTrue(saslOkDec instanceof BindResponseProtocolOp);
assertTrue(busyDec instanceof BindResponseProtocolOp);
assertTrue(invalidSyntaxDec instanceof BindResponseProtocolOp);
BindResponseProtocolOp saslOkOp =
(BindResponseProtocolOp)saslOkDec;
BindResponseProtocolOp busyOp =
(BindResponseProtocolOp)busyDec;
BindResponseProtocolOp invalidSyntaxOp =
(BindResponseProtocolOp)invalidSyntaxDec;
assertTrue(saslOkOp.getProtocolOpName() == saslOkResp.getProtocolOpName());
assertTrue(busyOp.getProtocolOpName() == busyResp.getProtocolOpName());
assertTrue(invalidSyntaxOp.getProtocolOpName() == invalidSyntaxResp.getProtocolOpName());
assertTrue(saslOkOp.getType() == saslOkResp.getType());
assertTrue(busyOp.getType() == busyResp.getType());
assertTrue(invalidSyntaxOp.getType() == invalidSyntaxResp.getType());
assertTrue(saslOkOp.getResultCode() == saslOkResp.getResultCode());
assertTrue(busyOp.getResultCode() == busyResp.getResultCode());
assertTrue(invalidSyntaxOp.getResultCode() == invalidSyntaxResp.getResultCode());
assertTrue(saslOkOp.getErrorMessage().equals(saslOkResp.getErrorMessage()));
assertTrue(invalidSyntaxOp.getErrorMessage().equals(invalidSyntaxResp.getErrorMessage()));
String str1=saslOkOp.getServerSASLCredentials().toString();
String str2=saslOkResp.getServerSASLCredentials().toString();
assertTrue(str1.equals(str2));
List<String> list1 = saslOkOp.getReferralURLs();
List<String> list2 = saslOkResp.getReferralURLs();
assertTrue(list1.equals(list2));
DN dn1=saslOkOp.getMatchedDN();
DN dn2=saslOkResp.getMatchedDN();
assertTrue(dn1.equals(dn2));
}
}