From 322a22bf908b3d4c9c53a92b3698d1027ea85767 Mon Sep 17 00:00:00 2001
From: smaguin <smaguin@localhost>
Date: Thu, 21 Jun 2007 13:42:02 +0000
Subject: [PATCH] check expectedErrorCode and allow to modify a list of attributes

---
 opends/tests/functional-tests/shared/java/modifyAnAttribute.java |  120 +++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 98 insertions(+), 22 deletions(-)

diff --git a/opends/tests/functional-tests/shared/java/modifyAnAttribute.java b/opends/tests/functional-tests/shared/java/modifyAnAttribute.java
index 9fee9ee..2b0ed55 100644
--- a/opends/tests/functional-tests/shared/java/modifyAnAttribute.java
+++ b/opends/tests/functional-tests/shared/java/modifyAnAttribute.java
@@ -37,12 +37,18 @@
 import	 javax.naming.directory.BasicAttributes;
 import  javax.naming.*;
 import  javax.naming.directory.ModificationItem;
+import  java.util.HashSet;
+import  java.util.StringTokenizer;
+import java.util.Iterator;
 
 
 
 /**
   *  modify an entry with an attribute 
   *  the operation can be a replace, delete or a add new attribute
+  *  if expectedErrorCode is set, we compare it with the ldap error code returned in the exception
+  *  the function returns 0 if the code are equals
+  *  otherwise, returns 1 
   */
 
 public class modifyAnAttribute {
@@ -57,6 +63,20 @@
      String dnToModify=null;
      String newAttributeValue=null;
      String changetype=null;
+     String errorCode=null;
+     String errorMessage=null;
+     String listAttributesToModify=null;
+     String expectedErrorCode="0";
+     
+     int ind1;
+     String attributeName;
+     String attributeValue;
+     Hashtable envLdap  = new Hashtable();
+ 	 LdapContext ctx;  
+     
+     Attributes attributes = new BasicAttributes(); 
+     HashSet attributeSet = new HashSet(); 
+
      
      for (int k=0; k< args.length; k++) {
     	 String opt1 = args[k]; 
@@ -86,14 +106,56 @@
     	 if (opt1.equals("-t")) {
     		 changetype = val1;
     	 }
+    	 if (opt1.equals("-E")) {
+    		 expectedErrorCode = val1;
+    	 }
+       	 if (opt1.equals("-l")) {
+     		    listAttributesToModify = val1;
+     		 
+    		 	ind1= val1.indexOf (":");
+
+    		 	attributeName=val1.substring (0,ind1);
+    		 	attributeValue=val1.substring (ind1+1);
+
+    		 	BasicAttribute attrToComplete = null;
+    		 
+    		 	Iterator it = attributeSet.iterator();
+    		 	while (attrToComplete == null && it.hasNext()) {
+    		 		BasicAttribute attr = (BasicAttribute) it.next();
+    		 		if ((attr.getID()).equalsIgnoreCase(attributeName)) {
+    		 			attrToComplete = attr;
+    		 		}
+    		 	}
+    		 	
+    		 	if (attrToComplete == null) {
+    		 		attrToComplete = new BasicAttribute(attributeName);
+    		 		attributeSet.add(attrToComplete);
+    		 	}
+    		 	attributeValue=attributeValue.replaceAll("QUOT","\\\"");
+    		 	attrToComplete.add(attributeValue);
+     	 }
     	 k++;
      }
- 
-    newAttributeValue=newAttributeValue.replaceAll("QUOT","\\\"");
-   
+     
+     if ( attributeToModify != null && newAttributeValue != null ) {
+    	 
+    	    BasicAttribute attrToComplete = null;
+    	    
+    	    attrToComplete = new BasicAttribute(attributeToModify);
+	 		attributeSet.add(attrToComplete);
+	 		newAttributeValue=newAttributeValue.replaceAll("QUOT","\\\"");
+	 		attrToComplete.add(newAttributeValue);
+     }
+    
+     
+     Iterator it2 = attributeSet.iterator();
+     while (it2.hasNext()) {
+		 BasicAttribute attr = (BasicAttribute)it2.next();
+		 attributes.put(attr);
+	 } 
+     
     String provider = "ldap://"  + hostname + ":" + ldapPort  + "/";
 
-    Hashtable envLdap  = new Hashtable();
     
 	envLdap.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
 	envLdap.put(Context.SECURITY_AUTHENTICATION, "simple");
@@ -101,9 +163,9 @@
 	envLdap.put(Context.SECURITY_CREDENTIALS, credential);
 	envLdap.put(Context.PROVIDER_URL, provider);
 
-	LdapContext ctx;
-	
+
 	try {
+
 		
 		CompositeName entryDN = new CompositeName (dnToModify);
 		System.out.println(changetype + " attribute " + attributeToModify + " for entry " + dnToModify);
@@ -111,36 +173,50 @@
 		// connect to server
 		ctx = new InitialLdapContext(envLdap, null);
 		
-		Attributes attrs = new BasicAttributes(true);
-		Attribute attr = new BasicAttribute(attributeToModify);
-		attr.add(newAttributeValue);
-		attrs.put (attr);
-
 		// replace attribute
   		 if (changetype.equals("replace")) {
-  			ctx.modifyAttributes(entryDN, LdapContext.REPLACE_ATTRIBUTE , attrs);
+  			ctx.modifyAttributes(entryDN, LdapContext.REPLACE_ATTRIBUTE , attributes);
 		 }
 		 else if (changetype.equals("add")) { 
 			 // add attribute	
-			 ctx.modifyAttributes(entryDN, LdapContext.ADD_ATTRIBUTE , attrs);
+			 ctx.modifyAttributes(entryDN, LdapContext.ADD_ATTRIBUTE , attributes);
 		 }
 		 else if (changetype.equals("delete")) { 
 			 // add attribute
-			 ctx.modifyAttributes(entryDN, LdapContext.REMOVE_ATTRIBUTE , attrs);
+			 ctx.modifyAttributes(entryDN, LdapContext.REMOVE_ATTRIBUTE , attributes);
 		 }
 		
         ctx.close();
-
 	} catch (CommunicationException e1) {
-		String error = e1.getMessage();
-        System.out.println(" Catch exception : " + e1.getMessage());
-        System.exit(1);
+		errorMessage = e1.getMessage();
+
 	} catch (NamingException e2) {
-        System.out.println(" Catch exception : " + e2.getMessage());
-        System.exit(1);
+		errorMessage = e2.getMessage();
+
     } catch (Exception e3) {
-            System.out.println(" Catch exception : " + e3.getMessage());
-            System.exit(1);
+    	errorMessage= e3.getMessage();
 	}
+    // No error, the modify is success 
+    if ( errorMessage == null ) {
+    	errorCode="0";
+    } 
+    else {
+    	System.out.println (errorMessage);
+    	int ind=errorMessage.indexOf("-");
+    	errorCode=errorMessage.substring(18, ind-1);
+    }
+	// Compare the errorCode and the expected error Code
+    int diff=expectedErrorCode.compareTo(errorCode); 
+    
+    if (diff == 0 ){
+        // Got the expected error Code. The test is success
+    	System.exit(0);
+    }
+    else {
+    	System.out.println ("Error: modify request didn't return the expected error Code");
+    	System.out.println ("Expected " + expectedErrorCode + "; Got" + errorCode);
+    	System.exit(1);
+    }
+ 
 }
 }

--
Gitblit v1.10.0