⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsmlcontexttest.java

📁 JAVA开源LDAP浏览器jxplorer的源码!
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        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 = "&lt;&gt;&amp;&apos;&quot;&#66;&#72;&#65;&#64;";

    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 &quot;&lt;&amp;&gt;&apos; 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=\\&quot;Craig \\\nLink\\&quot;,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=\&quot;Fred \\Nurk\&quot;"

    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 + -