📄 dsmlcontexttest.java
字号:
DsmlContext.getDeleteRequestElement(buffy, "cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU");
assertXMLEquals(deleteRequest1, buffy.toString());
}
private static String escapeString = "<>&'"fred";
private static String rawString = "<>&'\"fred";
private static String yuckyEscapeString = "<>&'"BHA@";
public void testEscape()
{
assertEquals(escapeString, DsmlContext.escape(rawString));
}
public void testUnescape()
{
assertEquals(rawString, DsmlContext.unescape(escapeString));
assertEquals(rawString, DsmlContext.unescape(yuckyEscapeString));
}
private static String stringElement = "<dsml:value>organizationalPerson</dsml:value>";
private static String binaryElement = "<dsml:value xsi:type=\"xsd:base64Binary\">c2VjcmV0IHBhc3N3b3Jk</dsml:value>";
private static byte[] password = new byte[]{115, 101, 99, 114, 101, 116, 32, 112, 97, 115, 115, 119, 111, 114, 100}; // the password 'secret password'
private static String address = "21 Jump Street$New York$90210";
public void testCreateDsmlElement()
throws NamingException
{
StringBuffer buffy1 = new StringBuffer();
DsmlContext.createDsmlValueElement("organizationalPerson", buffy1);
assertEquals(stringElement, buffy1.toString().trim());
StringBuffer buffy2 = new StringBuffer();
DsmlContext.createDsmlValueElement(password, buffy2);
assertEquals(binaryElement, buffy2.toString().trim());
}
/**
* Add cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU
*/
private static String addRequest1 =
" <dsml:addRequest dn=\"cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU\">" +
" <dsml:attr name=\"cn\">" +
" <dsml:value>Alana SHORE</dsml:value>" +
" </dsml:attr>" +
" <dsml:attr name=\"objectClass\">" +
" <dsml:value>inetOrgPerson</dsml:value>" +
" <dsml:value>organizationalPerson</dsml:value>" +
" <dsml:value>person</dsml:value>" +
" <dsml:value>top</dsml:value>" +
" </dsml:attr>" +
" <dsml:attr name=\"sn\">" +
" <dsml:value>SHORE</dsml:value>" +
" </dsml:attr>" +
" <dsml:attr name=\"userPassword\">" +
" <dsml:value xsi:type=\"xsd:base64Binary\">c2VjcmV0IHBhc3N3b3Jk</dsml:value>" +
" </dsml:attr>" +
" </dsml:addRequest>";
public void testAddRequest()
throws NamingException
{
OrderedAttributes testAtts = new OrderedAttributes();
testAtts.put(new BasicAttribute("cn", "Alana SHORE"));
OrderedAttribute oc = new OrderedAttribute("objectClass");
oc.add("inetOrgPerson");
oc.add("organizationalPerson");
oc.add("person");
oc.add("top");
testAtts.put(oc);
testAtts.put(new BasicAttribute("userPassword", password));
testAtts.put(new BasicAttribute("sn", "SHORE"));
String dn = "cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU";
StringBuffer addRequest = new StringBuffer();
DsmlContext.getAddRequestElement(addRequest, dn, testAtts);
//System.out.println(addRequest);
assertXMLEquals(addRequest1, addRequest.toString());
}
/**
* Modify (add a jpegPhoto) to cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU
*/
private static String modifyRequest1 =
"<dsml:batchRequest xmlns:dsml=\"urn:oasis:names:tc:DSML:2:0:core\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
" <dsml:modifyRequest dn=\"cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU\">" +
" <dsml:modification name=\"favoriteDrink\" operation=\"add\">" +
" <dsml:value>japanese slipper</dsml:value>" +
" </dsml:modification>" +
" <dsml:modification name=\"sn\" operation=\"delete\"/>" +
" <dsml:modification name=\"userPassword\" operation=\"replace\">" +
" <dsml:value xsi:type=\"xsd:base64Binary\">c2VjcmV0IHBhc3N3b3Jk</dsml:value>" +
" </dsml:modification>" +
" </dsml:modifyRequest>" +
"</dsml:batchRequest>";
/**
* Modify (add a jpegPhoto) to cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU
*/
private static String modifyRequest2 =
"<dsml:batchRequest xmlns:dsml=\"urn:oasis:names:tc:DSML:2:0:core\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
" <dsml:modifyRequest dn=\"cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU\">" +
" <dsml:modification name=\"jpegPhoto\" operation=\"add\">" +
" <dsml:value xsi:type=\"xsd:base64Binary\">/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAA3ACkDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD7KqK5mitreS4nkWOKJC8jscBVAySamxzXk37WviZ/DHwK16aGXy7m/RbCAjs0p2n/AMd3VpSh7Saj3E3ZXMT4a/tLeB/F/inU9DuXbSfJnIsbi4b93dRjjJPRGyOh7V7XaXtndrutbqGcYz+7cN/KvgbwTonijT/BFrquh+EZtW0N5/ssrW1uskrSfxORjOPfpXq3wG0fxHZfGiXXbJli8NRacYL1Gl2FXOCqeX3II69smvpcwybC0aU5xqe/HeKTaTeyv09ddexwUsVUlUUXHR7M+q6MUKQwDDoaWvlj0AyPWvlL/gojrhi8LeG/DscgDXV61zIuOdsa4H6tX0F431W90WeC+s1EoEbCSFj8rge/Y18a/tXeONY8fXemSz6XaadpGizncPN3ztI2AWP+yMdB7mpy7H0J4t0W7STtr5rf8QrUpRpqXc1fgF8cp/Bvw/Tw/cabLclGdrSWMgAM3VXB9D3rpfg/qBuvFmnajqt5IiT3pa7EbYV95JUEf3Q+2vnrSJ4XvLwQMHiWRfmXpkjnFdfpHiS4sIjFZlDMFJUyvtTI5AJ/Kv1yhgaE6NS1r1FZvva6v+uh87Vqz5o26H6IDGOMUlcx8KZNcm+HWhTeJJ45tWls0kuHQcEtyPrwQM966j86/KKsPZ1JQvezsfQRd0mZXiXT1v8ATyhAJXJ59O9eDeI/2d9O8eS3OpS6xc6dAwLWiQoCssg6SOD1T/ZGM+tfRzKCCCMg01VWOMKihVUYAHQV5tLBRpY/67B2lZadLrqbSqOVP2b2PzR1rRL3wzqF3pWoWf2S6trhoJU243MP4sehHINQWyCaAWzgss8iocDJClhux+Ga+h/Ffwe8R/ETRNa8VW999o8QJq9wlukxCRXUCMVAH91hjAPTiuo/Zu+BN34YvD4m8bRW0mpBDHaWIIkS3B+87HoznGBjgDPrX6v/AKxYNYVVYNXstFpq0nt0VzwvqdR1LdD2D4d6pY6xoFld6Q92bCK3S3U3EJQuVUAMM/zrp9vuaSNFjQIihUAwFAwBT6/Nmk22la57KukFQ3YkNvIsLBZGXCn0J6GiiiSugItIsLfS9Nt9PtQRDAgRc9T6k+5PNW6KKIpJWQBRRRTA/9k=</dsml:value>" +
" </dsml:modification>" +
" </dsml:modifyRequest>" +
"</dsml:batchRequest>";
private static String modifyRequest3 =
" <dsml:modifyRequest dn=\"cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU\">\n" +
" <dsml:modification name=\"userPassword\" operation=\"add\">\n" +
" <dsml:value xsi:type=\"xsd:base64Binary\">c2VjcmV0IHBhc3N3b3Jk</dsml:value>\n" +
" </dsml:modification>\n" +
" <dsml:modification name=\"address\" operation=\"delete\">\n" +
" <dsml:value>21 Jump Street$New York$90210</dsml:value>\n" +
" </dsml:modification>\n" +
" <dsml:modification name=\"objectClass\" operation=\"replace\">\n" +
" <dsml:value>inetOrgPerson</dsml:value>\n" +
" <dsml:value>organizationalPerson</dsml:value>\n" +
" <dsml:value>person</dsml:value>\n" +
" <dsml:value>top</dsml:value>\n" +
" </dsml:modification>\n" +
" </dsml:modifyRequest>";
public void testModRequest()
throws NamingException
{
OrderedAttributes testAtts = new OrderedAttributes();
testAtts.put(new BasicAttribute("cn", "Alana SHORE"));
OrderedAttribute oc = new OrderedAttribute("objectClass");
oc.add("inetOrgPerson");
oc.add("organizationalPerson");
oc.add("person");
oc.add("top");
String dn = "cn=Alana SHORE,ou=Infrastructure,ou=Support,o=DEMOCORP,c=AU";
StringBuffer modRequest = new StringBuffer();
ModificationItem[] mods = new ModificationItem[3];
mods[0] = new ModificationItem(DsmlContext.ADD_ATTRIBUTE, new BasicAttribute("userPassword", password));
mods[1] = new ModificationItem(DsmlContext.REMOVE_ATTRIBUTE, new BasicAttribute("address", address));
mods[2] = new ModificationItem(DsmlContext.REPLACE_ATTRIBUTE, oc);
DsmlContext.getModRequestElement(modRequest, dn, mods);
//System.out.println(modRequest);
assertXMLEquals(modifyRequest3, modRequest.toString());
}
private static String escapedName1 = "cn=Juliet "<&>' LEVY";
private static String unescapedName1= "cn=Juliet \"<&>' LEVY";
public void testNameEscaping()
{
assertEquals(escapedName1, DsmlContext.escapeName(unescapedName1));
}
private static String modDNRequest =
" <dsml:modDNRequest dn=\"CN=Alice Johnson,DC=Example,DC=COM\"\n" +
" newrdn=\"CN=Alice Weiss\"\n" +
" deleteoldrdn=\"false\"/>";
private static String modDNRequest2 =
" <dsml:modDNRequest dn=\"CN=Alice Johnson,DC=Example,DC=COM\"\n" +
" newrdn=\"CN=Alice Weiss\"\n" +
" deleteoldrdn=\"true\"/>";
private static String modDNRequest3 =
" <dsml:modDNRequest dn=\"CN=Alice Johnson,DC=Example,DC=COM\"\n" +
" newrdn=\"CN=Alice Weiss\"\n" +
" deleteoldrdn=\"true\"/>";
// DSML
// cn=\\"Craig \\\nLink\\",ou=Administration,ou=Corporate,o=DEMOCORP,c=AU
// java+ldap
// "cn=\\\"Craig \\\\nLink\\\",ou=Administration,ou=Corporate,o= DEMOCORP,c=AU"
// ldap
// cn=\"Craig \\nLink\",ou=Administration,ou=Corporate,o=DEMOCORP,c=AU
// no good - needs quotes escaped...
// newrdn="cn=\"Fred \\Nurk\""
// this seems to work...
// newrdn="cn=\"Fred \\Nurk\""
private static String modDNRequest4 =
" <dsml:modDNRequest dn=\"CN=Alice Johnson,DC=Example,DC=COM\"\n" +
" newrdn=\"CN=Alice Weiss\"\n" +
" deleteoldrdn=\"true\"/>";
public void testModDNRequest()
throws NamingException
{
Hashtable env = new Hashtable();
env.put("java.naming.ldap.deleteRDN", "false");
DsmlContext testCtx = new DsmlContext(env);
StringBuffer buffy = new StringBuffer();
testCtx.getModDNRequestElement(buffy, "CN=Alice Johnson,DC=Example,DC=COM", "CN=Alice Weiss");
assertXMLEquals(modDNRequest, buffy.toString());
testCtx.addToEnvironment("java.naming.ldap.deleteRDN", "true");
buffy = new StringBuffer();
testCtx.getModDNRequestElement(buffy, "CN=Alice Johnson,DC=Example,DC=COM", "CN=Alice Weiss");
assertXMLEquals(modDNRequest2, buffy.toString());
testCtx.addToEnvironment("java.naming.ldap.deleteRDN", "true");
buffy = new StringBuffer();
testCtx.getModDNRequestElement(buffy, "CN=Alice Johnson,DC=Example,DC=COM", "CN=Alice Weiss");
assertXMLEquals(modDNRequest3, buffy.toString());
testCtx.addToEnvironment("java.naming.ldap.deleteRDN", "true");
buffy = new StringBuffer();
testCtx.getModDNRequestElement(buffy, "CN=Alice Johnson,DC=Example,DC=COM", "CN=Alice Weiss");
assertXMLEquals(modDNRequest4, buffy.toString());
}
/**
* Search request for Alana SHORE.
*/
private static String searchRequest4 =
"<dsml:batchRequest xmlns:dsml=\"urn:oasis:names:tc:DSML:2:0:core\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
" <dsml:searchRequest dn=\"c=AU\" scope=\"wholeSubtree\" derefAliases=\"derefInSearching\">" +
" <dsml:filter>" +
" <dsml:equalityMatch name=\"cn\">" +
" <dsml:value>Alana SHORE</dsml:value>" +
" </dsml:equalityMatch>" +
" </dsml:filter>" +
" <dsml:attributes>" +
" <dsml:attribute name=\"objectClass\"/>" +
" </dsml:attributes>" +
" </dsml:searchRequest>" +
"</dsml:batchRequest>";
/**
* The expected add response xml.
*/
private static String addResponse =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<batchResponse xmlns=\"urn:oasis:names:tc:DSML:2:0:core\">" +
"<addResponse>" +
"<resultCode code=\"0\"/>" +
"</addResponse>" +
"</batchResponse>\n\n";
/**
* The expected delete response xml.
*/
private static String delResponse =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<batchResponse xmlns=\"urn:oasis:names:tc:DSML:2:0:core\">" +
"<delResponse>" +
"<resultCode code=\"0\"/>" +
"</delResponse>" +
"</batchResponse>\n\n";
// Example from the DSML v2.0 spec
private static String delResponse2 =
"<delResponse matchedDN=\"OU=HR,DC=Example,DC=COM\">\n" +
" <resultCode code=\"32\" descr=\"noSuchObject\"/>\n" +
" <errorMessage>DSDEL::230234</errorMessage>\n" +
"</delResponse>\n";
// Example from the DSML v2.0 spec
private static String modResponse2 =
"<modifyResponse>\n" +
" <resultCode code=\"53\" descr=\"unwillingToPerform\"/>\n" +
" <errorMessage>System Attribute may not be modified</errorMessage>\n" +
"</modifyResponse>\n";
private static String errorResponse =
" <errorResponse type=\"malformedRequest\">\n" +
" <message>Unknown element 慴ogusRequest
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -