mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	cleanup: remove test/src-not-used/ (#9007)
This commit is contained in:
		
							parent
							
								
									ea11128cb3
								
							
						
					
					
						commit
						7a34194237
					
				| @ -1,188 +0,0 @@ | |||||||
| // 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 com.cloud.sample; |  | ||||||
| 
 |  | ||||||
| import java.io.FileInputStream; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Collections; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Properties; |  | ||||||
| import java.util.StringTokenizer; |  | ||||||
| 
 |  | ||||||
| import javax.crypto.Mac; |  | ||||||
| import javax.crypto.spec.SecretKeySpec; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.codec.binary.Base64; |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Sample CloudStack Management User API Executor. |  | ||||||
|  * |  | ||||||
|  * Prerequisites: - Edit usercloud.properties to include your host, apiUrl, apiKey, and secretKey - Use ./executeUserAPI.sh to |  | ||||||
|  * execute this test class |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public class UserCloudAPIExecutor { |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         // Host |  | ||||||
|         String host = null; |  | ||||||
| 
 |  | ||||||
|         // Fully qualified URL with http(s)://host:port |  | ||||||
|         String apiUrl = null; |  | ||||||
| 
 |  | ||||||
|         // ApiKey and secretKey as given by your CloudStack vendor |  | ||||||
|         String apiKey = null; |  | ||||||
|         String secretKey = null; |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             Properties prop = new Properties(); |  | ||||||
|             prop.load(new FileInputStream("usercloud.properties")); |  | ||||||
| 
 |  | ||||||
|             // host |  | ||||||
|             host = prop.getProperty("host"); |  | ||||||
|             if (host == null) { |  | ||||||
|                 System.out.println("Please specify a valid host in the format of http(s)://:/client/api in your usercloud.properties file."); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             // apiUrl |  | ||||||
|             apiUrl = prop.getProperty("apiUrl"); |  | ||||||
|             if (apiUrl == null) { |  | ||||||
|                 System.out.println("Please specify a valid API URL in the format of command=¶m1=¶m2=... in your usercloud.properties file."); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             // apiKey |  | ||||||
|             apiKey = prop.getProperty("apiKey"); |  | ||||||
|             if (apiKey == null) { |  | ||||||
|                 System.out.println("Please specify your API Key as provided by your CloudStack vendor in your usercloud.properties file."); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             // secretKey |  | ||||||
|             secretKey = prop.getProperty("secretKey"); |  | ||||||
|             if (secretKey == null) { |  | ||||||
|                 System.out.println("Please specify your secret Key as provided by your CloudStack vendor in your usercloud.properties file."); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (apiUrl == null || apiKey == null || secretKey == null) { |  | ||||||
|                 return; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             System.out.println("Constructing API call to host = '" + host + "' with API command = '" + apiUrl + "' using apiKey = '" + apiKey + "' and secretKey = '" + |  | ||||||
|                 secretKey + "'"); |  | ||||||
| 
 |  | ||||||
|             // Step 1: Make sure your APIKey is URL encoded |  | ||||||
|             String encodedApiKey = URLEncoder.encode(apiKey, "UTF-8"); |  | ||||||
| 
 |  | ||||||
|             // Step 2: URL encode each parameter value, then sort the parameters and apiKey in |  | ||||||
|             // alphabetical order, and then toLowerCase all the parameters, parameter values and apiKey. |  | ||||||
|             // Please note that if any parameters with a '&' as a value will cause this test client to fail since we are using |  | ||||||
|             // '&' to delimit |  | ||||||
|             // the string |  | ||||||
|             List<String> sortedParams = new ArrayList<String>(); |  | ||||||
|             sortedParams.add("apikey=" + encodedApiKey.toLowerCase()); |  | ||||||
|             StringTokenizer st = new StringTokenizer(apiUrl, "&"); |  | ||||||
|             String url = null; |  | ||||||
|             boolean first = true; |  | ||||||
|             while (st.hasMoreTokens()) { |  | ||||||
|                 String paramValue = st.nextToken(); |  | ||||||
|                 String param = paramValue.substring(0, paramValue.indexOf("=")); |  | ||||||
|                 String value = URLEncoder.encode(paramValue.substring(paramValue.indexOf("=") + 1, paramValue.length()), "UTF-8"); |  | ||||||
|                 if (first) { |  | ||||||
|                     url = param + "=" + value; |  | ||||||
|                     first = false; |  | ||||||
|                 } else { |  | ||||||
|                     url = url + "&" + param + "=" + value; |  | ||||||
|                 } |  | ||||||
|                 sortedParams.add(param.toLowerCase() + "=" + value.toLowerCase()); |  | ||||||
|             } |  | ||||||
|             Collections.sort(sortedParams); |  | ||||||
| 
 |  | ||||||
|             System.out.println("Sorted Parameters: " + sortedParams); |  | ||||||
| 
 |  | ||||||
|             // Step 3: Construct the sorted URL and sign and URL encode the sorted URL with your secret key |  | ||||||
|             String sortedUrl = null; |  | ||||||
|             first = true; |  | ||||||
|             for (String param : sortedParams) { |  | ||||||
|                 if (first) { |  | ||||||
|                     sortedUrl = param; |  | ||||||
|                     first = false; |  | ||||||
|                 } else { |  | ||||||
|                     sortedUrl = sortedUrl + "&" + param; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             System.out.println("sorted URL : " + sortedUrl); |  | ||||||
|             String encodedSignature = signRequest(sortedUrl, secretKey); |  | ||||||
| 
 |  | ||||||
|             // Step 4: Construct the final URL we want to send to the CloudStack Management Server |  | ||||||
|             // Final result should look like: |  | ||||||
|             // http(s)://://client/api?&apiKey=&signature= |  | ||||||
|             String finalUrl = host + "?" + url + "&apiKey=" + apiKey + "&signature=" + encodedSignature; |  | ||||||
|             System.out.println("final URL : " + finalUrl); |  | ||||||
| 
 |  | ||||||
|             // Step 5: Perform a HTTP GET on this URL to execute the command |  | ||||||
|             HttpClient client = new HttpClient(); |  | ||||||
|             HttpMethod method = new GetMethod(finalUrl); |  | ||||||
|             int responseCode = client.executeMethod(method); |  | ||||||
|             if (responseCode == 200) { |  | ||||||
|                 // SUCCESS! |  | ||||||
|                 System.out.println("Successfully executed command"); |  | ||||||
|             } else { |  | ||||||
|                 // FAILED! |  | ||||||
|                 System.out.println("Unable to execute command with response code: " + responseCode); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } catch (Throwable t) { |  | ||||||
|             System.out.println(t); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * 1. Signs a string with a secret key using SHA-1 2. Base64 encode the result 3. URL encode the final result |  | ||||||
|      * |  | ||||||
|      * @param request |  | ||||||
|      * @param key |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     public static String signRequest(String request, String key) { |  | ||||||
|         try { |  | ||||||
|             Mac mac = Mac.getInstance("HmacSHA1"); |  | ||||||
|             SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "HmacSHA1"); |  | ||||||
|             mac.init(keySpec); |  | ||||||
|             mac.update(request.getBytes()); |  | ||||||
|             byte[] encryptedBytes = mac.doFinal(); |  | ||||||
|             return URLEncoder.encode(Base64.encodeBase64String(encryptedBytes), "UTF-8"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println(ex); |  | ||||||
|         } |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,123 +0,0 @@ | |||||||
| // 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 com.cloud.test.longrun; |  | ||||||
| 
 |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Random; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| public class BuildGuestNetwork { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(BuildGuestNetwork.class.getClass()); |  | ||||||
|     private static final int ApiPort = 8096; |  | ||||||
|     private static final int DeveloperPort = 8080; |  | ||||||
|     private static final String ApiUrl = "/client/api"; |  | ||||||
|     private static int numVM = 1; |  | ||||||
|     private static long zoneId = -1L; |  | ||||||
|     private static long templateId = 3; |  | ||||||
|     private static long serviceOfferingId = 1; |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
| 
 |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         String host = "http://localhost"; |  | ||||||
|         int numThreads = 1; |  | ||||||
| 
 |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             if (arg.equals("-h")) { |  | ||||||
|                 host = "http://" + iter.next(); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-t")) { |  | ||||||
|                 numThreads = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-n")) { |  | ||||||
|                 numVM = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-z")) { |  | ||||||
|                 zoneId = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-e")) { |  | ||||||
|                 templateId = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-s")) { |  | ||||||
|                 serviceOfferingId = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         final String server = host + ":" + ApiPort + "/"; |  | ||||||
|         final String developerServer = host + ":" + DeveloperPort + ApiUrl; |  | ||||||
|         s_logger.info("Starting test in " + numThreads + " thread(s). Each thread is launching " + numVM + " VMs"); |  | ||||||
| 
 |  | ||||||
|         for (int i = 0; i < numThreads; i++) { |  | ||||||
|             new Thread(new Runnable() { |  | ||||||
|                 @Override |  | ||||||
|                 public void run() { |  | ||||||
|                     try { |  | ||||||
| 
 |  | ||||||
|                         String username = null; |  | ||||||
|                         String singlePrivateIp = null; |  | ||||||
|                         Random ran = new Random(); |  | ||||||
|                         username = Math.abs(ran.nextInt()) + "-user"; |  | ||||||
| 
 |  | ||||||
|                         //Create User |  | ||||||
|                         User myUser = new User(username, username, server, developerServer); |  | ||||||
|                         try { |  | ||||||
|                             myUser.launchUser(); |  | ||||||
|                             myUser.registerUser(); |  | ||||||
|                         } catch (Exception e) { |  | ||||||
|                             s_logger.warn("Error code: ", e); |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         if (myUser.getUserId() != null) { |  | ||||||
|                             s_logger.info("User " + myUser.getUserName() + " was created successfully, starting VM creation"); |  | ||||||
|                             //create VMs for the user |  | ||||||
|                             for (int i = 0; i < numVM; i++) { |  | ||||||
|                                 //Create a new VM, add it to the list of user's VMs |  | ||||||
|                                 VirtualMachine myVM = new VirtualMachine(myUser.getUserId()); |  | ||||||
|                                 myVM.deployVM(zoneId, serviceOfferingId, templateId, myUser.getDeveloperServer(), myUser.getApiKey(), myUser.getSecretKey()); |  | ||||||
|                                 myUser.getVirtualMachines().add(myVM); |  | ||||||
|                                 singlePrivateIp = myVM.getPrivateIp(); |  | ||||||
| 
 |  | ||||||
|                                 if (singlePrivateIp != null) { |  | ||||||
|                                     s_logger.info("VM with private Ip " + singlePrivateIp + " was successfully created"); |  | ||||||
|                                 } else { |  | ||||||
|                                     s_logger.info("Problems with VM creation for a user" + myUser.getUserName()); |  | ||||||
|                                     s_logger.info("Deployment failed"); |  | ||||||
|                                     break; |  | ||||||
|                                 } |  | ||||||
|                             } |  | ||||||
| 
 |  | ||||||
|                             s_logger.info("Deployment done..." + numVM + " VMs were created."); |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                     } catch (Exception e) { |  | ||||||
|                         s_logger.error(e); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             }).start(); |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,107 +0,0 @@ | |||||||
| // 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 com.cloud.test.longrun; |  | ||||||
| 
 |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Random; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.apache.log4j.NDC; |  | ||||||
| 
 |  | ||||||
| import com.trilead.ssh2.Connection; |  | ||||||
| import com.trilead.ssh2.Session; |  | ||||||
| 
 |  | ||||||
| public class GuestNetwork implements Runnable { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(GuestNetwork.class.getClass()); |  | ||||||
| 
 |  | ||||||
|     private String publicIp; |  | ||||||
|     private ArrayList<VirtualMachine> virtualMachines; |  | ||||||
|     private int retryNum; |  | ||||||
| 
 |  | ||||||
|     public GuestNetwork(String publicIp, int retryNum) { |  | ||||||
|         this.publicIp = publicIp; |  | ||||||
|         this.retryNum = retryNum; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public ArrayList<VirtualMachine> getVirtualMachines() { |  | ||||||
|         return virtualMachines; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setVirtualMachines(ArrayList<VirtualMachine> virtualMachines) { |  | ||||||
|         this.virtualMachines = virtualMachines; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public void run() { |  | ||||||
|         NDC.push("Following thread has started" + Thread.currentThread().getName()); |  | ||||||
|         int retry = 0; |  | ||||||
| 
 |  | ||||||
|         //Start copying files between machines in the network |  | ||||||
|         s_logger.info("The size of the array is " + this.virtualMachines.size()); |  | ||||||
|         while (true) { |  | ||||||
|             try { |  | ||||||
|                 if (retry > 0) { |  | ||||||
|                     s_logger.info("Retry attempt : " + retry + " ...sleeping 120 seconds before next attempt"); |  | ||||||
|                     Thread.sleep(120000); |  | ||||||
|                 } |  | ||||||
|                 for (VirtualMachine vm : this.virtualMachines) { |  | ||||||
| 
 |  | ||||||
|                     s_logger.info("Attempting to SSH into linux host " + this.publicIp + " with retry attempt: " + retry); |  | ||||||
|                     Connection conn = new Connection(this.publicIp); |  | ||||||
|                     conn.connect(null, 600000, 600000); |  | ||||||
| 
 |  | ||||||
|                     s_logger.info("SSHed successfully into linux host " + this.publicIp); |  | ||||||
| 
 |  | ||||||
|                     boolean isAuthenticated = conn.authenticateWithPassword("root", "password"); |  | ||||||
| 
 |  | ||||||
|                     if (isAuthenticated == false) { |  | ||||||
|                         s_logger.info("Authentication failed"); |  | ||||||
|                     } |  | ||||||
|                     //execute copy command |  | ||||||
|                     Session sess = conn.openSession(); |  | ||||||
|                     String fileName; |  | ||||||
|                     Random ran = new Random(); |  | ||||||
|                     fileName = Math.abs(ran.nextInt()) + "-file"; |  | ||||||
|                     String copyCommand = new String("./scpScript " + vm.getPrivateIp() + " " + fileName); |  | ||||||
|                     s_logger.info("Executing " + copyCommand); |  | ||||||
|                     sess.execCommand(copyCommand); |  | ||||||
|                     Thread.sleep(120000); |  | ||||||
|                     sess.close(); |  | ||||||
| 
 |  | ||||||
|                     //execute wget command |  | ||||||
|                     sess = conn.openSession(); |  | ||||||
|                     String downloadCommand = |  | ||||||
|                         new String("wget http://172.16.0.220/scripts/checkDiskSpace.sh; chmod +x *sh; ./checkDiskSpace.sh; rm -rf checkDiskSpace.sh"); |  | ||||||
|                     s_logger.info("Executing " + downloadCommand); |  | ||||||
|                     sess.execCommand(downloadCommand); |  | ||||||
|                     Thread.sleep(120000); |  | ||||||
|                     sess.close(); |  | ||||||
| 
 |  | ||||||
|                     //close the connection |  | ||||||
|                     conn.close(); |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error(ex); |  | ||||||
|                 retry++; |  | ||||||
|                 if (retry == retryNum) { |  | ||||||
|                     s_logger.info("Performance Guest Network test failed with error " + ex.getMessage()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,190 +0,0 @@ | |||||||
| // 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 com.cloud.test.longrun; |  | ||||||
| 
 |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Random; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.stress.TestClientWithAPI; |  | ||||||
| 
 |  | ||||||
| public class PerformanceWithAPI { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(PerformanceWithAPI.class.getClass()); |  | ||||||
|     private static final int Retry = 10; |  | ||||||
|     private static final int ApiPort = 8096; |  | ||||||
|     private static int s_numVM = 2; |  | ||||||
|     private static final long ZoneId = -1L; |  | ||||||
|     private static final long TemplateId = 3; |  | ||||||
|     private static final long ServiceOfferingId = 1; |  | ||||||
|     private static final String ApiUrl = "/client/api"; |  | ||||||
|     private static final int DeveloperPort = 8080; |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
| 
 |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         String host = "http://localhost"; |  | ||||||
|         int numThreads = 1; |  | ||||||
| 
 |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             if (arg.equals("-h")) { |  | ||||||
|                 host = "http://" + iter.next(); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-t")) { |  | ||||||
|                 numThreads = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-n")) { |  | ||||||
|                 s_numVM = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         final String server = host + ":" + ApiPort + "/"; |  | ||||||
|         final String developerServer = host + ":" + DeveloperPort + ApiUrl; |  | ||||||
| 
 |  | ||||||
|         s_logger.info("Starting test in " + numThreads + " thread(s). Each thread is launching " + s_numVM + " VMs"); |  | ||||||
| 
 |  | ||||||
|         for (int i = 0; i < numThreads; i++) { |  | ||||||
|             new Thread(new Runnable() { |  | ||||||
|                 @Override |  | ||||||
|                 public void run() { |  | ||||||
|                     try { |  | ||||||
| 
 |  | ||||||
|                         String username = null; |  | ||||||
|                         String singlePrivateIp = null; |  | ||||||
|                         String singlePublicIp = null; |  | ||||||
|                         Random ran = new Random(); |  | ||||||
|                         username = Math.abs(ran.nextInt()) + "-user"; |  | ||||||
| 
 |  | ||||||
|                         //Create User |  | ||||||
|                         User myUser = new User(username, username, server, developerServer); |  | ||||||
|                         try { |  | ||||||
|                             myUser.launchUser(); |  | ||||||
|                             myUser.registerUser(); |  | ||||||
|                         } catch (Exception e) { |  | ||||||
|                             s_logger.warn("Error code: ", e); |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         if (myUser.getUserId() != null) { |  | ||||||
|                             s_logger.info("User " + myUser.getUserName() + " was created successfully, starting VM creation"); |  | ||||||
|                             //create VMs for the user |  | ||||||
|                             for (int i = 0; i < s_numVM; i++) { |  | ||||||
|                                 //Create a new VM, add it to the list of user's VMs |  | ||||||
|                                 VirtualMachine myVM = new VirtualMachine(myUser.getUserId()); |  | ||||||
|                                 myVM.deployVM(ZoneId, ServiceOfferingId, TemplateId, myUser.getDeveloperServer(), myUser.getApiKey(), myUser.getSecretKey()); |  | ||||||
|                                 myUser.getVirtualMachines().add(myVM); |  | ||||||
|                                 singlePrivateIp = myVM.getPrivateIp(); |  | ||||||
| 
 |  | ||||||
|                                 if (singlePrivateIp != null) { |  | ||||||
|                                     s_logger.info("VM with private Ip " + singlePrivateIp + " was successfully created"); |  | ||||||
|                                 } else { |  | ||||||
|                                     s_logger.info("Problems with VM creation for a user" + myUser.getUserName()); |  | ||||||
|                                     break; |  | ||||||
|                                 } |  | ||||||
| 
 |  | ||||||
|                                 //get public IP address for the User |  | ||||||
|                                 myUser.retrievePublicIp(ZoneId); |  | ||||||
|                                 singlePublicIp = myUser.getPublicIp().get(myUser.getPublicIp().size() - 1); |  | ||||||
|                                 if (singlePublicIp != null) { |  | ||||||
|                                     s_logger.info("Successfully got public Ip " + singlePublicIp + " for user " + myUser.getUserName()); |  | ||||||
|                                 } else { |  | ||||||
|                                     s_logger.info("Problems with getting public Ip address for user" + myUser.getUserName()); |  | ||||||
|                                     break; |  | ||||||
|                                 } |  | ||||||
| 
 |  | ||||||
|                                 //create ForwardProxy rules for user's VMs |  | ||||||
|                                 int responseCode = CreateForwardingRule(myUser, singlePrivateIp, singlePublicIp, "22", "22"); |  | ||||||
|                                 if (responseCode == 500) |  | ||||||
|                                     break; |  | ||||||
|                             } |  | ||||||
| 
 |  | ||||||
|                             s_logger.info("Deployment successful..." + s_numVM + " VMs were created. Waiting for 5 min before performance test"); |  | ||||||
|                             Thread.sleep(300000L); // Wait |  | ||||||
| 
 |  | ||||||
|                             //Start performance test for the user |  | ||||||
|                             s_logger.info("Starting performance test for Guest network that has " + myUser.getPublicIp().size() + " public IP addresses"); |  | ||||||
|                             for (int j = 0; j < myUser.getPublicIp().size(); j++) { |  | ||||||
|                                 s_logger.info("Starting test for user which has " + myUser.getVirtualMachines().size() + " vms. Public IP for the user is " + |  | ||||||
|                                     myUser.getPublicIp().get(j) + " , number of retries is " + Retry + " , private IP address of the machine is" + |  | ||||||
|                                     myUser.getVirtualMachines().get(j).getPrivateIp()); |  | ||||||
|                                 GuestNetwork myNetwork = new GuestNetwork(myUser.getPublicIp().get(j), Retry); |  | ||||||
|                                 myNetwork.setVirtualMachines(myUser.getVirtualMachines()); |  | ||||||
|                                 new Thread(myNetwork).start(); |  | ||||||
|                             } |  | ||||||
| 
 |  | ||||||
|                         } |  | ||||||
|                     } catch (Exception e) { |  | ||||||
|                         s_logger.error(e); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             }).start(); |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private static int CreateForwardingRule(User myUser, String privateIp, String publicIp, String publicPort, String privatePort) throws IOException { |  | ||||||
|         String encodedPrivateIp = URLEncoder.encode("" + privateIp, "UTF-8"); |  | ||||||
|         String encodedPublicIp = URLEncoder.encode("" + publicIp, "UTF-8"); |  | ||||||
|         String encodedPrivatePort = URLEncoder.encode("" + privatePort, "UTF-8"); |  | ||||||
|         String encodedPublicPort = URLEncoder.encode("" + publicPort, "UTF-8"); |  | ||||||
|         String encodedApiKey = URLEncoder.encode(myUser.getApiKey(), "UTF-8"); |  | ||||||
|         int responseCode = 500; |  | ||||||
| 
 |  | ||||||
|         String requestToSign = |  | ||||||
|             "apiKey=" + encodedApiKey + "&command=createOrUpdateIpForwardingRule&privateIp=" + encodedPrivateIp + "&privatePort=" + encodedPrivatePort + |  | ||||||
|                 "&protocol=tcp&publicIp=" + encodedPublicIp + "&publicPort=" + encodedPublicPort; |  | ||||||
| 
 |  | ||||||
|         requestToSign = requestToSign.toLowerCase(); |  | ||||||
|         s_logger.info("Request to sign is " + requestToSign); |  | ||||||
| 
 |  | ||||||
|         String signature = TestClientWithAPI.signRequest(requestToSign, myUser.getSecretKey()); |  | ||||||
|         String encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
| 
 |  | ||||||
|         String url = |  | ||||||
|             myUser.getDeveloperServer() + "?command=createOrUpdateIpForwardingRule" + "&publicIp=" + encodedPublicIp + "&publicPort=" + encodedPublicPort + |  | ||||||
|                 "&privateIp=" + encodedPrivateIp + "&privatePort=" + encodedPrivatePort + "&protocol=tcp&apiKey=" + encodedApiKey + "&signature=" + encodedSignature; |  | ||||||
| 
 |  | ||||||
|         s_logger.info("Trying to create IP forwarding rule: " + url); |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         HttpMethod method = new GetMethod(url); |  | ||||||
|         responseCode = client.executeMethod(method); |  | ||||||
|         s_logger.info("create ip forwarding rule response code: " + responseCode); |  | ||||||
|         if (responseCode == 200) { |  | ||||||
|             s_logger.info("The rule is created successfully"); |  | ||||||
|         } else if (responseCode == 500) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> errorInfo = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"errorCode", "description"}); |  | ||||||
|             s_logger.error("create ip forwarding rule (linux) test failed with errorCode: " + errorInfo.get("errorCode") + " and description: " + |  | ||||||
|                 errorInfo.get("description")); |  | ||||||
|         } else { |  | ||||||
|             s_logger.error("internal error processing request: " + method.getStatusText()); |  | ||||||
|         } |  | ||||||
|         return responseCode; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,202 +0,0 @@ | |||||||
| // 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 com.cloud.test.longrun; |  | ||||||
| 
 |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Map; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpException; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.stress.TestClientWithAPI; |  | ||||||
| 
 |  | ||||||
| public class User { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(User.class.getClass()); |  | ||||||
| 
 |  | ||||||
|     private ArrayList<VirtualMachine> virtualMachines; |  | ||||||
|     private ArrayList<String> publicIp; |  | ||||||
|     private String server; |  | ||||||
|     private String developerServer; |  | ||||||
|     private String userName; |  | ||||||
|     private String userId; |  | ||||||
|     private String apiKey; |  | ||||||
|     private String secretKey; |  | ||||||
|     private String password; |  | ||||||
|     private String encryptedPassword; |  | ||||||
| 
 |  | ||||||
|     public User(String userName, String password, String server, String developerServer) { |  | ||||||
|         this.server = server; |  | ||||||
|         this.developerServer = developerServer; |  | ||||||
|         this.userName = userName; |  | ||||||
|         this.password = password; |  | ||||||
|         this.virtualMachines = new ArrayList<VirtualMachine>(); |  | ||||||
|         this.publicIp = new ArrayList<String>(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public ArrayList<VirtualMachine> getVirtualMachines() { |  | ||||||
|         return virtualMachines; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setVirtualMachines(ArrayList<VirtualMachine> virtualMachines) { |  | ||||||
|         this.virtualMachines = virtualMachines; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getUserId() { |  | ||||||
|         return userId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setUserId(String userId) { |  | ||||||
|         this.userId = userId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public ArrayList<String> getPublicIp() { |  | ||||||
|         return publicIp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setPublicIp(ArrayList<String> publicIp) { |  | ||||||
|         this.publicIp = publicIp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getServer() { |  | ||||||
|         return server; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setServer(String server) { |  | ||||||
|         this.server = server; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getUserName() { |  | ||||||
|         return userName; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setUserName(String userName) { |  | ||||||
|         this.userName = userName; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getApiKey() { |  | ||||||
|         return apiKey; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setApiKey(String apiKey) { |  | ||||||
|         this.apiKey = apiKey; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getPassword() { |  | ||||||
|         return password; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setPassword(String password) { |  | ||||||
|         this.password = password; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getSecretKey() { |  | ||||||
|         return secretKey; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setSecretKey(String secretKey) { |  | ||||||
|         this.secretKey = secretKey; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getDeveloperServer() { |  | ||||||
|         return developerServer; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setDeveloperServer(String developerServer) { |  | ||||||
|         this.developerServer = developerServer; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void launchUser() throws IOException { |  | ||||||
|         String encodedUsername = URLEncoder.encode(this.getUserName(), "UTF-8"); |  | ||||||
|         this.encryptedPassword = TestClientWithAPI.createMD5Password(this.getPassword()); |  | ||||||
|         String encodedPassword = URLEncoder.encode(this.encryptedPassword, "UTF-8"); |  | ||||||
|         String url = |  | ||||||
|             this.server + "?command=createUser&username=" + encodedUsername + "&password=" + encodedPassword + |  | ||||||
|                 "&firstname=Test&lastname=Test&email=alena@vmops.com&domainId=1"; |  | ||||||
|         String userIdStr = null; |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         HttpMethod method = new GetMethod(url); |  | ||||||
|         int responseCode = client.executeMethod(method); |  | ||||||
| 
 |  | ||||||
|         if (responseCode == 200) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> userIdValues = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"id"}); |  | ||||||
|             userIdStr = userIdValues.get("id"); |  | ||||||
|             if ((userIdStr != null) && (Long.parseLong(userIdStr) != -1)) { |  | ||||||
|                 this.setUserId(userIdStr); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void retrievePublicIp(long zoneId) throws IOException { |  | ||||||
| 
 |  | ||||||
|         String encodedApiKey = URLEncoder.encode(this.apiKey, "UTF-8"); |  | ||||||
|         String encodedZoneId = URLEncoder.encode("" + zoneId, "UTF-8"); |  | ||||||
|         String requestToSign = "apiKey=" + encodedApiKey + "&command=associateIpAddress" + "&zoneId=" + encodedZoneId; |  | ||||||
|         requestToSign = requestToSign.toLowerCase(); |  | ||||||
|         String signature = TestClientWithAPI.signRequest(requestToSign, this.secretKey); |  | ||||||
|         String encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
| 
 |  | ||||||
|         String url = this.developerServer + "?command=associateIpAddress" + "&apiKey=" + encodedApiKey + "&zoneId=" + encodedZoneId + "&signature=" + encodedSignature; |  | ||||||
| 
 |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         HttpMethod method = new GetMethod(url); |  | ||||||
|         int responseCode = client.executeMethod(method); |  | ||||||
|         if (responseCode == 200) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> values = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"ipaddress"}); |  | ||||||
|             this.getPublicIp().add(values.get("ipaddress")); |  | ||||||
|             s_logger.info("Ip address is " + values.get("ipaddress")); |  | ||||||
|         } else if (responseCode == 500) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> errorInfo = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"errorcode", "description"}); |  | ||||||
|             s_logger.error("associate ip test failed with errorCode: " + errorInfo.get("errorCode") + " and description: " + errorInfo.get("description")); |  | ||||||
|         } else { |  | ||||||
|             s_logger.error("internal error processing request: " + method.getStatusText()); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void registerUser() throws HttpException, IOException { |  | ||||||
| 
 |  | ||||||
|         String encodedUsername = URLEncoder.encode(this.userName, "UTF-8"); |  | ||||||
|         String encodedPassword = URLEncoder.encode(this.password, "UTF-8"); |  | ||||||
|         String url = server + "?command=register&username=" + encodedUsername + "&domainid=1"; |  | ||||||
|         s_logger.info("registering: " + this.userName + " with url " + url); |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         HttpMethod method = new GetMethod(url); |  | ||||||
|         int responseCode = client.executeMethod(method); |  | ||||||
|         if (responseCode == 200) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> requestKeyValues = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"apikey", "secretkey"}); |  | ||||||
|             this.setApiKey(requestKeyValues.get("apikey")); |  | ||||||
|             this.setSecretKey(requestKeyValues.get("secretkey")); |  | ||||||
|         } else if (responseCode == 500) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> errorInfo = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"errorcode", "description"}); |  | ||||||
|             s_logger.error("registration failed with errorCode: " + errorInfo.get("errorCode") + " and description: " + errorInfo.get("description")); |  | ||||||
|         } else { |  | ||||||
|             s_logger.error("internal error processing request: " + method.getStatusText()); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,95 +0,0 @@ | |||||||
| // 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 com.cloud.test.longrun; |  | ||||||
| 
 |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.Map; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.stress.TestClientWithAPI; |  | ||||||
| 
 |  | ||||||
| public class VirtualMachine { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(VirtualMachine.class.getClass()); |  | ||||||
| 
 |  | ||||||
|     private String privateIp; |  | ||||||
|     private String userId; |  | ||||||
| 
 |  | ||||||
|     public VirtualMachine(String userId) { |  | ||||||
|         this.userId = userId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getPrivateIp() { |  | ||||||
|         return privateIp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setPrivateIp(String privateIp) { |  | ||||||
|         this.privateIp = privateIp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getUserId() { |  | ||||||
|         return userId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setUserId(String userId) { |  | ||||||
|         this.userId = userId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void deployVM(long zoneId, long serviceOfferingId, long templateId, String server, String apiKey, String secretKey) throws IOException { |  | ||||||
| 
 |  | ||||||
|         String encodedZoneId = URLEncoder.encode("" + zoneId, "UTF-8"); |  | ||||||
|         String encodedServiceOfferingId = URLEncoder.encode("" + serviceOfferingId, "UTF-8"); |  | ||||||
|         String encodedTemplateId = URLEncoder.encode("" + templateId, "UTF-8"); |  | ||||||
|         String encodedApiKey = URLEncoder.encode(apiKey, "UTF-8"); |  | ||||||
|         String requestToSign = |  | ||||||
|             "apiKey=" + encodedApiKey + "&command=deployVirtualMachine&serviceOfferingId=" + encodedServiceOfferingId + "&templateId=" + encodedTemplateId + "&zoneId=" + |  | ||||||
|                 encodedZoneId; |  | ||||||
| 
 |  | ||||||
|         requestToSign = requestToSign.toLowerCase(); |  | ||||||
|         String signature = TestClientWithAPI.signRequest(requestToSign, secretKey); |  | ||||||
|         String encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
|         String url = |  | ||||||
|             server + "?command=deployVirtualMachine" + "&zoneId=" + encodedZoneId + "&serviceOfferingId=" + encodedServiceOfferingId + "&templateId=" + |  | ||||||
|                 encodedTemplateId + "&apiKey=" + encodedApiKey + "&signature=" + encodedSignature; |  | ||||||
| 
 |  | ||||||
|         s_logger.info("Sending this request to deploy a VM: " + url); |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         HttpMethod method = new GetMethod(url); |  | ||||||
|         int responseCode = client.executeMethod(method); |  | ||||||
|         s_logger.info("deploy linux vm response code: " + responseCode); |  | ||||||
|         if (responseCode == 200) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> values = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"id", "ipaddress"}); |  | ||||||
|             long linuxVMId = Long.parseLong(values.get("id")); |  | ||||||
|             s_logger.info("got linux virtual machine id: " + linuxVMId); |  | ||||||
|             this.setPrivateIp(values.get("ipaddress")); |  | ||||||
| 
 |  | ||||||
|         } else if (responseCode == 500) { |  | ||||||
|             InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|             Map<String, String> errorInfo = TestClientWithAPI.getSingleValueFromXML(is, new String[] {"errorcode", "description"}); |  | ||||||
|             s_logger.error("deploy linux vm test failed with errorCode: " + errorInfo.get("errorCode") + " and description: " + errorInfo.get("description")); |  | ||||||
|         } else { |  | ||||||
|             s_logger.error("internal error processing request: " + method.getStatusText()); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,848 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileInputStream; |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.sql.Connection; |  | ||||||
| import java.sql.ResultSet; |  | ||||||
| import java.sql.Statement; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Enumeration; |  | ||||||
| import java.util.HashMap; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Properties; |  | ||||||
| import java.util.Random; |  | ||||||
| import java.util.Set; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| import javax.xml.parsers.DocumentBuilder; |  | ||||||
| import javax.xml.parsers.DocumentBuilderFactory; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Document; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.utils.UtilsForTest; |  | ||||||
| 
 |  | ||||||
| public class ApiCommand { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(ApiCommand.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public static enum CommandType { |  | ||||||
|         HTTP, MYSQL, SCRIPT; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static enum ResponseType { |  | ||||||
|         ERROR, EMPTY; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private Element xmlCommand; |  | ||||||
|     private String commandName; |  | ||||||
|     private String testCaseInfo; |  | ||||||
|     private boolean isUserCommand; |  | ||||||
|     private boolean isAsync = false; |  | ||||||
|     private CommandType commandType; |  | ||||||
|     private ResponseType responseType; |  | ||||||
| 
 |  | ||||||
|     private TreeMap<String, String> urlParam; |  | ||||||
|     private HashMap<String, String> verifyParam = new HashMap<String, String>();; |  | ||||||
|     private HashMap<String, String> setParam = new HashMap<String, String>();; |  | ||||||
|     private int responseCode; |  | ||||||
|     private Element responseBody; |  | ||||||
| 
 |  | ||||||
|     private String command; |  | ||||||
|     private String host; |  | ||||||
|     private boolean list; |  | ||||||
|     private Element listName; |  | ||||||
|     private Element listId; |  | ||||||
|     private boolean required = false; |  | ||||||
|     private ResultSet result; |  | ||||||
| 
 |  | ||||||
|     public ApiCommand(Element fstElmnt, HashMap<String, String> param, HashMap<String, String> commands) { |  | ||||||
|         this.setXmlCommand(fstElmnt); |  | ||||||
|         this.setCommandName(); |  | ||||||
|         this.setResponseType(); |  | ||||||
|         this.setUserCommand(); |  | ||||||
|         this.setCommandType(); |  | ||||||
|         this.setTestCaseInfo(); |  | ||||||
|         this.setUrlParam(param); |  | ||||||
|         this.setVerifyParam(param); |  | ||||||
|         this.setHost("http://" + param.get("hostip")); |  | ||||||
|         this.setCommand(param); |  | ||||||
|         String async = commands.get(this.getName()); |  | ||||||
|         if (async != null && async.equals("yes")) { |  | ||||||
|             this.isAsync = true; |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public Element getXmlCommand() { |  | ||||||
|         return xmlCommand; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setXmlCommand(Element xmlCommand) { |  | ||||||
|         this.xmlCommand = xmlCommand; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // ================FOLLOWING METHODS USE INPUT XML FILE=======================// |  | ||||||
|     public void setCommandName() { |  | ||||||
|         NodeList commandName = this.xmlCommand.getElementsByTagName("name"); |  | ||||||
|         Element commandElmnt = (Element)commandName.item(0); |  | ||||||
|         NodeList commandNm = commandElmnt.getChildNodes(); |  | ||||||
|         this.commandName = (commandNm.item(0).getNodeValue()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getName() { |  | ||||||
|         return commandName; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setTestCaseInfo() { |  | ||||||
|         this.testCaseInfo = getElementByName("testcase"); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getHost() { |  | ||||||
|         return host; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setHost(String host) { |  | ||||||
|         this.host = host; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setResponseType() { |  | ||||||
|         boolean result = verifyTagValue("error", "true"); |  | ||||||
|         if (result) { |  | ||||||
|             this.responseType = ResponseType.ERROR; |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         result = verifyTagValue("empty", "true"); |  | ||||||
|         if (result) { |  | ||||||
|             this.responseType = ResponseType.EMPTY; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setResponseType(ResponseType responseType) { |  | ||||||
|         this.responseType = responseType; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public ResponseType getResponseType() { |  | ||||||
|         return responseType; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setUserCommand() { |  | ||||||
|         boolean result = verifyTagValue("usercommand", "true"); |  | ||||||
|         this.isUserCommand = result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setCommandType() { |  | ||||||
|         boolean result = verifyTagValue("mysql", "true"); |  | ||||||
|         if (result) { |  | ||||||
|             this.commandType = CommandType.MYSQL; |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         result = verifyTagValue("script", "true"); |  | ||||||
|         if (result) { |  | ||||||
|             this.commandType = CommandType.SCRIPT; |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         this.commandType = CommandType.HTTP; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public CommandType getCommandType() { |  | ||||||
|         return commandType; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getTestCaseInfo() { |  | ||||||
|         return testCaseInfo; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public Boolean getRequired() { |  | ||||||
|         return required; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setUrlParam(HashMap<String, String> param) { |  | ||||||
|         this.urlParam = new TreeMap<String, String>(); |  | ||||||
|         NodeList parameterLst = this.xmlCommand.getElementsByTagName("parameters"); |  | ||||||
|         if (parameterLst != null) { |  | ||||||
|             for (int j = 0; j < parameterLst.getLength(); j++) { |  | ||||||
|                 Element parameterElement = (Element)parameterLst.item(j); |  | ||||||
|                 NodeList itemLst = parameterElement.getElementsByTagName("item"); |  | ||||||
|                 for (int k = 0; k < itemLst.getLength(); k++) { |  | ||||||
|                     Node item = itemLst.item(k); |  | ||||||
|                     if (item.getNodeType() == Node.ELEMENT_NODE) { |  | ||||||
|                         Element itemElement = (Element)item; |  | ||||||
|                         NodeList itemName = itemElement.getElementsByTagName("name"); |  | ||||||
|                         Element itemNameElement = (Element)itemName.item(0); |  | ||||||
| 
 |  | ||||||
|                         // get value |  | ||||||
|                         Element itemValueElement = null; |  | ||||||
|                         if ((itemElement.getElementsByTagName("value") != null) && (itemElement.getElementsByTagName("value").getLength() != 0)) { |  | ||||||
|                             NodeList itemValue = itemElement.getElementsByTagName("value"); |  | ||||||
|                             itemValueElement = (Element)itemValue.item(0); |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         Element itemParamElement = null; |  | ||||||
|                         // getparam |  | ||||||
|                         if ((itemElement.getElementsByTagName("param") != null) && (itemElement.getElementsByTagName("param").getLength() != 0)) { |  | ||||||
|                             NodeList itemParam = itemElement.getElementsByTagName("param"); |  | ||||||
|                             itemParamElement = (Element)itemParam.item(0); |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         if ((itemElement.getAttribute("getparam").equals("true")) && (itemParamElement != null)) { |  | ||||||
|                             this.urlParam.put(itemNameElement.getTextContent(), param.get(itemParamElement.getTextContent())); |  | ||||||
|                         } else if (itemValueElement != null) { |  | ||||||
|                             this.urlParam.put(itemNameElement.getTextContent(), itemValueElement.getTextContent()); |  | ||||||
|                         } else if (itemElement.getAttribute("random").equals("true")) { |  | ||||||
|                             Random ran = new Random(); |  | ||||||
|                             String randomString = Math.abs(ran.nextInt()) + "-randomName"; |  | ||||||
|                             this.urlParam.put(itemNameElement.getTextContent(), randomString); |  | ||||||
|                             if ((itemElement.getAttribute("setparam").equals("true")) && (itemParamElement != null)) { |  | ||||||
|                                 param.put(itemParamElement.getTextContent(), randomString); |  | ||||||
|                             } |  | ||||||
|                         } else if (itemElement.getAttribute("randomnumber").equals("true")) { |  | ||||||
|                             Random ran = new Random(); |  | ||||||
|                             Integer randomNumber = Math.abs(ran.nextInt(65535)); |  | ||||||
|                             this.urlParam.put(itemNameElement.getTextContent(), randomNumber.toString()); |  | ||||||
|                             if ((itemElement.getAttribute("setparam").equals("true")) && (itemParamElement != null)) { |  | ||||||
|                                 param.put(itemParamElement.getTextContent(), randomNumber.toString()); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Set command URL |  | ||||||
|     public void setCommand(HashMap<String, String> param) { |  | ||||||
| 
 |  | ||||||
|         if (this.getCommandType() == CommandType.SCRIPT) { |  | ||||||
|             String temp = "bash xen/" + this.commandName; |  | ||||||
|             Set<?> c = this.urlParam.entrySet(); |  | ||||||
|             Iterator<?> it = c.iterator(); |  | ||||||
|             while (it.hasNext()) { |  | ||||||
|                 Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                 String key = (String)me.getKey(); |  | ||||||
|                 String value = (String)me.getValue(); |  | ||||||
|                 try { |  | ||||||
|                     temp = temp + " -" + key + " " + value; |  | ||||||
|                 } catch (Exception ex) { |  | ||||||
|                     s_logger.error("Unable to set parameter " + key + " for the command " + this.getName()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             this.command = temp; |  | ||||||
|         } else if (this.getCommandType() == CommandType.MYSQL) { |  | ||||||
|             String temp = this.commandName + " where "; |  | ||||||
|             Set<?> c = this.urlParam.entrySet(); |  | ||||||
|             Iterator<?> it = c.iterator(); |  | ||||||
|             while (it.hasNext()) { |  | ||||||
|                 Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                 String key = (String)me.getKey(); |  | ||||||
|                 String value = (String)me.getValue(); |  | ||||||
|                 try { |  | ||||||
|                     temp = temp + key + "=" + value; |  | ||||||
|                 } catch (Exception ex) { |  | ||||||
|                     s_logger.error("Unable to set parameter " + key + " for the command " + this.getName()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             this.command = temp; |  | ||||||
|             s_logger.info("The command is " + this.command); |  | ||||||
| 
 |  | ||||||
|         } else { |  | ||||||
|             if ((param.get("apikey") == null) || (param.get("secretkey") == null) || (this.isUserCommand == false)) { |  | ||||||
|                 String temp = this.host + ":8096/?command=" + this.commandName; |  | ||||||
|                 Set<?> c = this.urlParam.entrySet(); |  | ||||||
|                 Iterator<?> it = c.iterator(); |  | ||||||
|                 while (it.hasNext()) { |  | ||||||
|                     Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                     String key = (String)me.getKey(); |  | ||||||
|                     String value = (String)me.getValue(); |  | ||||||
|                     try { |  | ||||||
|                         temp = temp + "&" + key + "=" + URLEncoder.encode(value, "UTF-8"); |  | ||||||
|                     } catch (Exception ex) { |  | ||||||
|                         s_logger.error("Unable to set parameter " + key + " for the command " + this.getName()); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 this.command = temp; |  | ||||||
|             } else if (isUserCommand == true) { |  | ||||||
|                 String apiKey = param.get("apikey"); |  | ||||||
|                 String secretKey = param.get("secretkey"); |  | ||||||
| 
 |  | ||||||
|                 String temp = ""; |  | ||||||
|                 this.urlParam.put("apikey", apiKey); |  | ||||||
|                 this.urlParam.put("command", this.commandName); |  | ||||||
| 
 |  | ||||||
|                 // sort url hash map by key |  | ||||||
|                 Set<?> c = this.urlParam.entrySet(); |  | ||||||
|                 Iterator<?> it = c.iterator(); |  | ||||||
|                 while (it.hasNext()) { |  | ||||||
|                     Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                     String key = (String)me.getKey(); |  | ||||||
|                     String value = (String)me.getValue(); |  | ||||||
|                     try { |  | ||||||
|                         temp = temp + key + "=" + URLEncoder.encode(value, "UTF-8") + "&"; |  | ||||||
|                     } catch (Exception ex) { |  | ||||||
|                         s_logger.error("Unable to set parameter " + value + " for the command " + this.getName()); |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                 } |  | ||||||
|                 temp = temp.substring(0, temp.length() - 1); |  | ||||||
|                 String requestToSign = temp.toLowerCase(); |  | ||||||
|                 String signature = UtilsForTest.signRequest(requestToSign, secretKey); |  | ||||||
|                 String encodedSignature = ""; |  | ||||||
|                 try { |  | ||||||
|                     encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
|                 } catch (Exception ex) { |  | ||||||
|                     s_logger.error(ex); |  | ||||||
|                 } |  | ||||||
|                 this.command = this.host + ":8080/client/api/?" + temp + "&signature=" + encodedSignature; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setVerifyParam(HashMap<String, String> param) { |  | ||||||
|         NodeList returnLst = this.xmlCommand.getElementsByTagName("returnvalue"); |  | ||||||
|         if (returnLst != null) { |  | ||||||
|             for (int m = 0; m < returnLst.getLength(); m++) { |  | ||||||
|                 Element returnElement = (Element)returnLst.item(m); |  | ||||||
|                 if (returnElement.getAttribute("list").equals("true")) { |  | ||||||
|                     this.list = true; |  | ||||||
|                     NodeList elementLst = returnElement.getElementsByTagName("element"); |  | ||||||
|                     this.listId = (Element)elementLst.item(0); |  | ||||||
|                     NodeList elementName = returnElement.getElementsByTagName("name"); |  | ||||||
|                     this.listName = (Element)elementName.item(0); |  | ||||||
|                 } else { |  | ||||||
|                     this.list = false; |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 NodeList itemLst1 = returnElement.getElementsByTagName("item"); |  | ||||||
|                 if (itemLst1 != null) { |  | ||||||
|                     for (int n = 0; n < itemLst1.getLength(); n++) { |  | ||||||
|                         Node item = itemLst1.item(n); |  | ||||||
|                         if (item.getNodeType() == Node.ELEMENT_NODE) { |  | ||||||
|                             Element itemElement = (Element)item; |  | ||||||
|                             // get parameter name |  | ||||||
|                             NodeList itemName = itemElement.getElementsByTagName("name"); |  | ||||||
|                             Element itemNameElement = (Element)itemName.item(0); |  | ||||||
| 
 |  | ||||||
|                             // Get parameters for future use |  | ||||||
|                             if (itemElement.getAttribute("setparam").equals("true")) { |  | ||||||
|                                 NodeList itemVariable = itemElement.getElementsByTagName("param"); |  | ||||||
|                                 Element itemVariableElement = (Element)itemVariable.item(0); |  | ||||||
|                                 setParam.put(itemVariableElement.getTextContent(), itemNameElement.getTextContent()); |  | ||||||
|                                 this.required = true; |  | ||||||
|                             } else if (itemElement.getAttribute("getparam").equals("true")) { |  | ||||||
|                                 NodeList itemVariable = itemElement.getElementsByTagName("param"); |  | ||||||
|                                 Element itemVariableElement = (Element)itemVariable.item(0); |  | ||||||
|                                 this.verifyParam.put(itemNameElement.getTextContent(), param.get(itemVariableElement.getTextContent())); |  | ||||||
|                             } else if ((itemElement.getElementsByTagName("value") != null) && (itemElement.getElementsByTagName("value").getLength() != 0)) { |  | ||||||
|                                 NodeList itemVariable = itemElement.getElementsByTagName("value"); |  | ||||||
|                                 Element itemVariableElement = (Element)itemVariable.item(0); |  | ||||||
|                                 this.verifyParam.put(itemNameElement.getTextContent(), itemVariableElement.getTextContent()); |  | ||||||
|                             } else { |  | ||||||
|                                 this.verifyParam.put(itemNameElement.getTextContent(), "no value"); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public int getResponseCode() { |  | ||||||
|         return responseCode; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Send api command to the server |  | ||||||
|     public void sendCommand(HttpClient client, Connection conn) { |  | ||||||
|         if (TestCaseEngine.s_printUrl == true) { |  | ||||||
|             s_logger.info("url is " + this.command); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (this.getCommandType() == CommandType.SCRIPT) { |  | ||||||
|             try { |  | ||||||
|                 s_logger.info("Executing command " + this.command); |  | ||||||
|                 Runtime rtime = Runtime.getRuntime(); |  | ||||||
|                 Process child = rtime.exec(this.command); |  | ||||||
|                 Thread.sleep(10000); |  | ||||||
|                 int retCode = child.waitFor(); |  | ||||||
|                 if (retCode != 0) { |  | ||||||
|                     this.responseCode = retCode; |  | ||||||
|                 } else { |  | ||||||
|                     this.responseCode = 200; |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error("Unable to execute a command " + this.command, ex); |  | ||||||
|             } |  | ||||||
|         } else if (this.getCommandType() == CommandType.MYSQL) { |  | ||||||
|             try { |  | ||||||
|                 Statement stmt = conn.createStatement(); |  | ||||||
|                 this.result = stmt.executeQuery(this.command); |  | ||||||
|                 this.responseCode = 200; |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 this.responseCode = 400; |  | ||||||
|                 s_logger.error("Unable to execute mysql query " + this.command, ex); |  | ||||||
|             } |  | ||||||
|         } else { |  | ||||||
|             HttpMethod method = new GetMethod(this.command); |  | ||||||
|             try { |  | ||||||
|                 this.responseCode = client.executeMethod(method); |  | ||||||
| 
 |  | ||||||
|                 if (this.responseCode == 200) { |  | ||||||
|                     InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|                     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |  | ||||||
|                     DocumentBuilder builder = factory.newDocumentBuilder(); |  | ||||||
|                     Document doc = builder.parse(is); |  | ||||||
|                     doc.getDocumentElement().normalize(); |  | ||||||
| 
 |  | ||||||
|                     if (!(this.isAsync)) { |  | ||||||
|                         this.responseBody = doc.getDocumentElement(); |  | ||||||
|                     } else { |  | ||||||
|                         // get async job result |  | ||||||
|                         Element jobTag = (Element)doc.getDocumentElement().getElementsByTagName("jobid").item(0); |  | ||||||
|                         String jobId = jobTag.getTextContent(); |  | ||||||
|                         Element responseBodyAsyncEl = queryAsyncJobResult(jobId); |  | ||||||
|                         if (responseBodyAsyncEl == null) { |  | ||||||
|                             s_logger.error("Can't get a async result"); |  | ||||||
|                         } else { |  | ||||||
|                             this.responseBody = responseBodyAsyncEl; |  | ||||||
|                             // get status of the job |  | ||||||
|                             Element jobStatusTag = (Element)responseBodyAsyncEl.getElementsByTagName("jobstatus").item(0); |  | ||||||
|                             String jobStatus = jobStatusTag.getTextContent(); |  | ||||||
|                             if (!jobStatus.equals("1")) { // Need to modify with different error codes for jobAsync |  | ||||||
| // results |  | ||||||
|                                 // set fake response code by now |  | ||||||
|                                 this.responseCode = 400; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (TestCaseEngine.s_printUrl == true) { |  | ||||||
|                     s_logger.info("Response code is " + this.responseCode); |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error("Command " + command + " failed with exception " + ex.getMessage()); |  | ||||||
|             } finally { |  | ||||||
|                 method.releaseConnection(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // verify if response is empty (contains only root element) |  | ||||||
|     public boolean isEmpty() { |  | ||||||
|         boolean result = false; |  | ||||||
|         if (!this.responseBody.hasChildNodes()) |  | ||||||
|             result = true; |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // ================FOLLOWING METHODS USE RETURN XML FILE=======================// |  | ||||||
| 
 |  | ||||||
|     public boolean setParam(HashMap<String, String> param) { |  | ||||||
|         if ((this.responseBody == null) && (this.commandType == CommandType.HTTP)) { |  | ||||||
|             s_logger.error("Response body is empty"); |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|         Boolean result = true; |  | ||||||
| 
 |  | ||||||
|         if (this.getCommandType() == CommandType.MYSQL) { |  | ||||||
|             Set<?> set = this.setParam.entrySet(); |  | ||||||
|             Iterator<?> it = set.iterator(); |  | ||||||
|             while (it.hasNext()) { |  | ||||||
|                 Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                 String key = (String)me.getKey(); |  | ||||||
|                 String value = (String)me.getValue(); |  | ||||||
|                 try { |  | ||||||
|                     String itemName = null; |  | ||||||
|                     while (this.result.next()) { |  | ||||||
|                         itemName = this.result.getString(value); |  | ||||||
|                     } |  | ||||||
|                     if (itemName != null) { |  | ||||||
|                         param.put(key, itemName); |  | ||||||
|                     } else { |  | ||||||
|                         s_logger.error("Following return parameter is missing: " + value); |  | ||||||
|                         result = false; |  | ||||||
|                     } |  | ||||||
|                 } catch (Exception ex) { |  | ||||||
|                     s_logger.error("Unable to set parameter " + value, ex); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } else if (this.getCommandType() == CommandType.HTTP) { |  | ||||||
|             if (this.list == false) { |  | ||||||
|                 Set<?> set = this.setParam.entrySet(); |  | ||||||
|                 Iterator<?> it = set.iterator(); |  | ||||||
| 
 |  | ||||||
|                 while (it.hasNext()) { |  | ||||||
|                     Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                     String key = (String)me.getKey(); |  | ||||||
|                     String value = (String)me.getValue(); |  | ||||||
|                     // set parameters needed for the future use |  | ||||||
|                     NodeList itemName = this.responseBody.getElementsByTagName(value); |  | ||||||
|                     if ((itemName != null) && (itemName.getLength() != 0)) { |  | ||||||
|                         for (int i = 0; i < itemName.getLength(); i++) { |  | ||||||
|                             Element itemNameElement = (Element)itemName.item(i); |  | ||||||
|                             if (itemNameElement.getChildNodes().getLength() <= 1) { |  | ||||||
|                                 param.put(key, itemNameElement.getTextContent()); |  | ||||||
|                                 break; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } else { |  | ||||||
|                         s_logger.error("Following return parameter is missing: " + value); |  | ||||||
|                         result = false; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } else { |  | ||||||
|                 Set<?> set = this.setParam.entrySet(); |  | ||||||
|                 Iterator<?> it = set.iterator(); |  | ||||||
|                 NodeList returnLst = this.responseBody.getElementsByTagName(this.listName.getTextContent()); |  | ||||||
|                 Node requiredNode = returnLst.item(Integer.parseInt(this.listId.getTextContent())); |  | ||||||
| 
 |  | ||||||
|                 if (requiredNode.getNodeType() == Node.ELEMENT_NODE) { |  | ||||||
|                     Element fstElmnt = (Element)requiredNode; |  | ||||||
| 
 |  | ||||||
|                     while (it.hasNext()) { |  | ||||||
|                         Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                         String key = (String)me.getKey(); |  | ||||||
|                         String value = (String)me.getValue(); |  | ||||||
|                         NodeList itemName = fstElmnt.getElementsByTagName(value); |  | ||||||
|                         if ((itemName != null) && (itemName.getLength() != 0)) { |  | ||||||
|                             Element itemNameElement = (Element)itemName.item(0); |  | ||||||
|                             if (itemNameElement.getChildNodes().getLength() <= 1) { |  | ||||||
|                                 param.put(key, itemNameElement.getTextContent()); |  | ||||||
|                             } |  | ||||||
|                         } else { |  | ||||||
|                             s_logger.error("Following return parameter is missing: " + value); |  | ||||||
|                             result = false; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getUrl() { |  | ||||||
|         return command; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public boolean verifyParam() { |  | ||||||
|         boolean result = true; |  | ||||||
|         if (this.getCommandType() == CommandType.HTTP) { |  | ||||||
|             if (this.list == false) { |  | ||||||
|                 Set<?> set = verifyParam.entrySet(); |  | ||||||
|                 Iterator<?> it = set.iterator(); |  | ||||||
| 
 |  | ||||||
|                 while (it.hasNext()) { |  | ||||||
|                     Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                     String key = (String)me.getKey(); |  | ||||||
|                     String value = (String)me.getValue(); |  | ||||||
|                     if (value == null) { |  | ||||||
|                         s_logger.error("Parameter " + key + " is missing in the list of global parameters"); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     NodeList itemName = this.responseBody.getElementsByTagName(key); |  | ||||||
|                     if ((itemName.getLength() != 0) && (itemName != null)) { |  | ||||||
|                         Element itemNameElement = (Element)itemName.item(0); |  | ||||||
|                         if (itemNameElement.hasChildNodes()) { |  | ||||||
|                             continue; |  | ||||||
|                         } |  | ||||||
|                         if (!(verifyParam.get(key).equals("no value")) && !(itemNameElement.getTextContent().equals(verifyParam.get(key)))) { |  | ||||||
|                             s_logger.error("Incorrect value for the following tag: " + key + ". Expected value is " + verifyParam.get(key) + " while actual value is " + |  | ||||||
|                                 itemNameElement.getTextContent()); |  | ||||||
|                             result = false; |  | ||||||
|                         } |  | ||||||
|                     } else { |  | ||||||
|                         s_logger.error("Following xml element is missing in the response: " + key); |  | ||||||
|                         result = false; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             // for multiple elements |  | ||||||
|             else { |  | ||||||
|                 Set<?> set = verifyParam.entrySet(); |  | ||||||
|                 Iterator<?> it = set.iterator(); |  | ||||||
|                 // get list element specified by id |  | ||||||
|                 NodeList returnLst = this.responseBody.getElementsByTagName(this.listName.getTextContent()); |  | ||||||
|                 Node requiredNode = returnLst.item(Integer.parseInt(this.listId.getTextContent())); |  | ||||||
| 
 |  | ||||||
|                 if (requiredNode.getNodeType() == Node.ELEMENT_NODE) { |  | ||||||
|                     Element fstElmnt = (Element)requiredNode; |  | ||||||
| 
 |  | ||||||
|                     while (it.hasNext()) { |  | ||||||
|                         Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                         String key = (String)me.getKey(); |  | ||||||
|                         String value = (String)me.getValue(); |  | ||||||
|                         if (value == null) { |  | ||||||
|                             s_logger.error("Parameter " + key + " is missing in the list of global parameters"); |  | ||||||
|                             return false; |  | ||||||
|                         } |  | ||||||
|                         NodeList itemName = fstElmnt.getElementsByTagName(key); |  | ||||||
|                         if ((itemName.getLength() != 0) && (itemName != null)) { |  | ||||||
|                             Element itemNameElement = (Element)itemName.item(0); |  | ||||||
|                             if (!(verifyParam.get(key).equals("no value")) && !(itemNameElement.getTextContent().equals(verifyParam.get(key)))) { |  | ||||||
|                                 s_logger.error("Incorrect value for the following tag: " + key + ". Expected value is " + verifyParam.get(key) + |  | ||||||
|                                     " while actual value is " + itemNameElement.getTextContent()); |  | ||||||
|                                 result = false; |  | ||||||
|                             } |  | ||||||
|                         } else { |  | ||||||
|                             s_logger.error("Following xml element is missing in the response: " + key); |  | ||||||
|                             result = false; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } else if (this.getCommandType() == CommandType.MYSQL) { |  | ||||||
|             Set<?> set = verifyParam.entrySet(); |  | ||||||
|             Iterator<?> it = set.iterator(); |  | ||||||
| 
 |  | ||||||
|             while (it.hasNext()) { |  | ||||||
|                 Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|                 String key = (String)me.getKey(); |  | ||||||
|                 String value = (String)me.getValue(); |  | ||||||
|                 if (value == null) { |  | ||||||
|                     s_logger.error("Parameter " + key + " is missing in the list of global parameters"); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 String itemName = null; |  | ||||||
|                 try { |  | ||||||
|                     while (this.result.next()) { |  | ||||||
|                         itemName = this.result.getString(key); |  | ||||||
|                     } |  | ||||||
|                 } catch (Exception ex) { |  | ||||||
|                     s_logger.error("Unable to get element from result set " + key); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (!(value.equals("no value")) && !(itemName.equals(verifyParam.get(key)))) { |  | ||||||
|                     s_logger.error("Incorrect value for the following tag: " + key + ". Expected value is " + verifyParam.get(key) + " while actual value is " + itemName); |  | ||||||
|                     result = false; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static boolean verifyEvents(String fileName, String level, String host, String account) { |  | ||||||
|         boolean result = false; |  | ||||||
|         HashMap<String, Integer> expectedEvents = new HashMap<String, Integer>(); |  | ||||||
|         HashMap<String, Integer> actualEvents = new HashMap<String, Integer>(); |  | ||||||
|         String key = ""; |  | ||||||
| 
 |  | ||||||
|         File file = new File(fileName); |  | ||||||
|         if (file.exists()) { |  | ||||||
|             Properties pro = new Properties(); |  | ||||||
|             try { |  | ||||||
|                 // get expected events |  | ||||||
|                 FileInputStream in = new FileInputStream(file); |  | ||||||
|                 pro.load(in); |  | ||||||
|                 Enumeration<?> en = pro.propertyNames(); |  | ||||||
|                 while (en.hasMoreElements()) { |  | ||||||
|                     key = (String)en.nextElement(); |  | ||||||
|                     expectedEvents.put(key, Integer.parseInt(pro.getProperty(key))); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 // get actual events |  | ||||||
|                 String url = host + "/?command=listEvents&account=" + account + "&level=" + level + "&domainid=1&pagesize=100"; |  | ||||||
|                 s_logger.info("Getting events with the following url " + url); |  | ||||||
|                 HttpClient client = new HttpClient(); |  | ||||||
|                 HttpMethod method = new GetMethod(url); |  | ||||||
|                 int responseCode = client.executeMethod(method); |  | ||||||
|                 if (responseCode == 200) { |  | ||||||
|                     InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|                     ArrayList<HashMap<String, String>> eventValues = UtilsForTest.parseMulXML(is, new String[] {"event"}); |  | ||||||
| 
 |  | ||||||
|                     for (int i = 0; i < eventValues.size(); i++) { |  | ||||||
|                         HashMap<String, String> element = eventValues.get(i); |  | ||||||
|                         if (element.get("level").equals(level)) { |  | ||||||
|                             if (actualEvents.containsKey(element.get("type")) == true) { |  | ||||||
|                                 actualEvents.put(element.get("type"), actualEvents.get(element.get("type")) + 1); |  | ||||||
|                             } else { |  | ||||||
|                                 actualEvents.put(element.get("type"), 1); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 method.releaseConnection(); |  | ||||||
| 
 |  | ||||||
|                 // compare actual events with expected events |  | ||||||
| 
 |  | ||||||
|                 // compare expected result and actual result |  | ||||||
|                 Iterator<?> iterator = expectedEvents.keySet().iterator(); |  | ||||||
|                 Integer expected; |  | ||||||
|                 Integer actual; |  | ||||||
|                 int fail = 0; |  | ||||||
|                 while (iterator.hasNext()) { |  | ||||||
|                     expected = null; |  | ||||||
|                     actual = null; |  | ||||||
|                     String type = iterator.next().toString(); |  | ||||||
|                     expected = expectedEvents.get(type); |  | ||||||
|                     actual = actualEvents.get(type); |  | ||||||
|                     if (actual == null) { |  | ||||||
|                         s_logger.error("Event of type " + type + " and level " + level + " is missing in the listEvents response. Expected number of these events is " + |  | ||||||
|                             expected); |  | ||||||
|                         fail++; |  | ||||||
|                     } else if (expected.compareTo(actual) != 0) { |  | ||||||
|                         fail++; |  | ||||||
|                         s_logger.info("Amount of events of  " + type + " type and level " + level + " is incorrect. Expected number of these events is " + expected + |  | ||||||
|                             ", actual number is " + actual); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 if (fail == 0) { |  | ||||||
|                     result = true; |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error(ex); |  | ||||||
|             } |  | ||||||
|         } else { |  | ||||||
|             s_logger.info("File " + fileName + " not found"); |  | ||||||
|         } |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static boolean verifyEvents(HashMap<String, Integer> expectedEvents, String level, String host, String parameters) { |  | ||||||
|         boolean result = false; |  | ||||||
|         HashMap<String, Integer> actualEvents = new HashMap<String, Integer>(); |  | ||||||
|         try { |  | ||||||
|             // get actual events |  | ||||||
|             String url = host + "/?command=listEvents&" + parameters; |  | ||||||
|             HttpClient client = new HttpClient(); |  | ||||||
|             HttpMethod method = new GetMethod(url); |  | ||||||
|             int responseCode = client.executeMethod(method); |  | ||||||
|             if (responseCode == 200) { |  | ||||||
|                 InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|                 ArrayList<HashMap<String, String>> eventValues = UtilsForTest.parseMulXML(is, new String[] {"event"}); |  | ||||||
| 
 |  | ||||||
|                 for (int i = 0; i < eventValues.size(); i++) { |  | ||||||
|                     HashMap<String, String> element = eventValues.get(i); |  | ||||||
|                     if (element.get("level").equals(level)) { |  | ||||||
|                         if (actualEvents.containsKey(element.get("type")) == true) { |  | ||||||
|                             actualEvents.put(element.get("type"), actualEvents.get(element.get("type")) + 1); |  | ||||||
|                         } else { |  | ||||||
|                             actualEvents.put(element.get("type"), 1); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             method.releaseConnection(); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             s_logger.error(ex); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // compare actual events with expected events |  | ||||||
|         Iterator<?> iterator = expectedEvents.keySet().iterator(); |  | ||||||
|         Integer expected; |  | ||||||
|         Integer actual; |  | ||||||
|         int fail = 0; |  | ||||||
|         while (iterator.hasNext()) { |  | ||||||
|             expected = null; |  | ||||||
|             actual = null; |  | ||||||
|             String type = iterator.next().toString(); |  | ||||||
|             expected = expectedEvents.get(type); |  | ||||||
|             actual = actualEvents.get(type); |  | ||||||
|             if (actual == null) { |  | ||||||
|                 s_logger.error("Event of type " + type + " and level " + level + " is missing in the listEvents response. Expected number of these events is " + expected); |  | ||||||
|                 fail++; |  | ||||||
|             } else if (expected.compareTo(actual) != 0) { |  | ||||||
|                 fail++; |  | ||||||
|                 s_logger.info("Amount of events of  " + type + " type and level " + level + " is incorrect. Expected number of these events is " + expected + |  | ||||||
|                     ", actual number is " + actual); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (fail == 0) { |  | ||||||
|             result = true; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public Element queryAsyncJobResult(String jobId) { |  | ||||||
|         Element returnBody = null; |  | ||||||
|         int code = 400; |  | ||||||
|         String resultUrl = this.host + ":8096/?command=queryAsyncJobResult&jobid=" + jobId; |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         HttpMethod method = new GetMethod(resultUrl); |  | ||||||
|         while (true) { |  | ||||||
|             try { |  | ||||||
|                 code = client.executeMethod(method); |  | ||||||
|                 if (code == 200) { |  | ||||||
|                     InputStream is = method.getResponseBodyAsStream(); |  | ||||||
|                     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |  | ||||||
|                     DocumentBuilder builder = factory.newDocumentBuilder(); |  | ||||||
|                     Document doc = builder.parse(is); |  | ||||||
|                     doc.getDocumentElement().normalize(); |  | ||||||
|                     returnBody = doc.getDocumentElement(); |  | ||||||
|                     Element jobStatusTag = (Element)returnBody.getElementsByTagName("jobstatus").item(0); |  | ||||||
|                     String jobStatus = jobStatusTag.getTextContent(); |  | ||||||
|                     if (jobStatus.equals("0")) { |  | ||||||
|                         try { |  | ||||||
|                             Thread.sleep(1000); |  | ||||||
|                         } catch (InterruptedException e) { |  | ||||||
|                             s_logger.debug("[ignored] interrupted while during async job result query."); |  | ||||||
|                         } |  | ||||||
|                     } else { |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                     method.releaseConnection(); |  | ||||||
|                 } else { |  | ||||||
|                     s_logger.error("Error during queryJobAsync. Error code is " + code); |  | ||||||
|                     this.responseCode = code; |  | ||||||
|                     return null; |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error(ex); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return returnBody; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private String getElementByName(String elementName) { |  | ||||||
|         NodeList commandName = this.xmlCommand.getElementsByTagName(elementName); |  | ||||||
|         if (commandName.getLength() != 0) { |  | ||||||
|             Element commandElmnt = (Element)commandName.item(0); |  | ||||||
|             NodeList commandNm = commandElmnt.getChildNodes(); |  | ||||||
|             return commandNm.item(0).getNodeValue(); |  | ||||||
|         } else { |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private boolean verifyTagValue(String elementName, String expectedValue) { |  | ||||||
|         NodeList tag = this.xmlCommand.getElementsByTagName(elementName); |  | ||||||
|         if (tag.getLength() != 0) { |  | ||||||
|             Element commandElmnt = (Element)tag.item(0); |  | ||||||
|             NodeList commandNm = commandElmnt.getChildNodes(); |  | ||||||
|             if (commandNm.item(0).getNodeValue().equals(expectedValue)) { |  | ||||||
|                 return true; |  | ||||||
|             } else { |  | ||||||
|                 return false; |  | ||||||
|             } |  | ||||||
|         } else { |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,125 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.trilead.ssh2.Connection; |  | ||||||
| import com.trilead.ssh2.Session; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class ConfigTest extends TestCase { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(ConfigTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public ConfigTest() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
| 
 |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             if (api.getName().equals("rebootManagementServer")) { |  | ||||||
| 
 |  | ||||||
|                 s_logger.info("Attempting to SSH into management server " + this.getParam().get("hostip")); |  | ||||||
|                 try { |  | ||||||
|                     Connection conn = new Connection(this.getParam().get("hostip")); |  | ||||||
|                     conn.connect(null, 60000, 60000); |  | ||||||
| 
 |  | ||||||
|                     s_logger.info("SSHed successfully into management server " + this.getParam().get("hostip")); |  | ||||||
| 
 |  | ||||||
|                     boolean isAuthenticated = conn.authenticateWithPassword("root", "password"); |  | ||||||
| 
 |  | ||||||
|                     if (isAuthenticated == false) { |  | ||||||
|                         s_logger.info("Authentication failed for root with password"); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     String restartCommand = "service cloud-management restart; service cloud-usage restart"; |  | ||||||
|                     Session sess = conn.openSession(); |  | ||||||
|                     s_logger.info("Executing : " + restartCommand); |  | ||||||
|                     sess.execCommand(restartCommand); |  | ||||||
|                     Thread.sleep(120000); |  | ||||||
|                     sess.close(); |  | ||||||
|                     conn.close(); |  | ||||||
| 
 |  | ||||||
|                 } catch (Exception ex) { |  | ||||||
|                     s_logger.error(ex); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|             } else { |  | ||||||
|                 //send a command |  | ||||||
|                 api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|                 //verify the response of the command |  | ||||||
|                 if ((api.getResponseType() == ResponseType.ERROR) && (api.getResponseCode() == 200) && (api.getTestCaseInfo() != null)) { |  | ||||||
|                     s_logger.error("Test case " + api.getTestCaseInfo() + |  | ||||||
|                         "failed. Command that was supposed to fail, passed. The command was sent with the following url " + api.getUrl()); |  | ||||||
|                     error++; |  | ||||||
|                 } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                     //set parameters for the future use |  | ||||||
|                     if (api.setParam(this.getParam()) == false) { |  | ||||||
|                         s_logger.error("Exiting the test...Command " + api.getName() + |  | ||||||
|                             " didn't return parameters needed for the future use. The command was sent with url " + api.getUrl()); |  | ||||||
|                         return false; |  | ||||||
|                     } else { |  | ||||||
|                         //verify parameters |  | ||||||
|                         if (api.verifyParam() == false) { |  | ||||||
|                             s_logger.error("Command " + api.getName() + " failed. Verification for returned parameters failed. Command was sent with url " + api.getUrl()); |  | ||||||
|                             error++; |  | ||||||
|                         } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                             s_logger.info("Test case " + api.getTestCaseInfo() + " passed. Command was sent with the url " + api.getUrl()); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() != 200)) { |  | ||||||
|                     s_logger.error("Command " + api.getName() + " failed with an error code " + api.getResponseCode() + " . Command was sent with url  " + api.getUrl() + |  | ||||||
|                         " Required: " + api.getRequired()); |  | ||||||
|                     if (api.getRequired() == true) { |  | ||||||
|                         s_logger.info("The command is required for the future use, so exiging"); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
|                     error++; |  | ||||||
|                 } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                     s_logger.info("Test case " + api.getTestCaseInfo() + " passed. Command that was supposed to fail, failed - test passed. Command was sent with url " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,129 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Document; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class DelegatedAdminTest extends TestCase { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(DelegatedAdminTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public DelegatedAdminTest() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
|         int error = 0; |  | ||||||
| 
 |  | ||||||
|         for (Document eachElement : this.getInputFile()) { |  | ||||||
| 
 |  | ||||||
|             Element rootElement = eachElement.getDocumentElement(); |  | ||||||
|             NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|             //Analyze each command, send request and build the array list of api commands |  | ||||||
|             for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
|                 boolean verify = false; |  | ||||||
|                 Node fstNode = commandLst.item(i); |  | ||||||
|                 Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|                 //new command |  | ||||||
|                 ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|                 if ((eachElement.getElementsByTagName("delegated_admin_verify_part2").getLength() != 0) && !(api.getName().equals("registerUserKeys"))) { |  | ||||||
|                     if (api.getName().startsWith("list")) { |  | ||||||
| 
 |  | ||||||
|                         if (this.denyToExecute()) { |  | ||||||
|                             api.setResponseType(ResponseType.EMPTY); |  | ||||||
|                         } |  | ||||||
|                         verify = true; |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     if (this.denyToExecute()) { |  | ||||||
|                         api.setResponseType(ResponseType.ERROR); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 //send a command |  | ||||||
|                 api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|                 //verify the response of the command |  | ||||||
|                 if ((verify == true) && !(api.getResponseType() == ResponseType.ERROR || api.getResponseType() == ResponseType.EMPTY)) { |  | ||||||
|                     s_logger.error("Test case " + api.getTestCaseInfo() + |  | ||||||
|                         " failed. Command that was supposed to fail, passed. The command was sent with the following url " + api.getUrl()); |  | ||||||
|                     error++; |  | ||||||
|                 } else if ((verify == true) && (api.getResponseType() == ResponseType.ERROR || api.getResponseType() == ResponseType.EMPTY)) { |  | ||||||
|                     s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                 } else if ((api.getResponseType() == ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                     s_logger.error("Test case " + api.getTestCaseInfo() + |  | ||||||
|                         " failed. Command that was supposed to fail, passed. The command was sent with the following url " + api.getUrl()); |  | ||||||
|                     error++; |  | ||||||
|                 } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                     //set parameters for the future use |  | ||||||
|                     if (api.setParam(this.getParam()) == false) { |  | ||||||
|                         s_logger.error("Exiting the test...Command " + api.getName() + |  | ||||||
|                             " didn't return parameters needed for the future use. The command was sent with url " + api.getUrl()); |  | ||||||
|                         return false; |  | ||||||
|                     } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                         s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                     } |  | ||||||
|                 } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() != 200)) { |  | ||||||
|                     s_logger.error("Test case  " + api.getTestCaseInfo() + " failed with an error code " + api.getResponseCode() + " . Command was sent with url  " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                     if (api.getRequired() == true) { |  | ||||||
|                         s_logger.info("The command is required for the future use, so exiging"); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
|                     error++; |  | ||||||
|                 } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                     s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
| 
 |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public boolean denyToExecute() { |  | ||||||
|         boolean result = true; |  | ||||||
|         Integer level1 = Integer.valueOf(this.getParam().get("domainlevel1")); |  | ||||||
|         Integer level2 = Integer.valueOf(this.getParam().get("domainlevel2")); |  | ||||||
|         String domain1 = this.getParam().get("domainname1"); |  | ||||||
|         String domain2 = this.getParam().get("domainname2"); |  | ||||||
| 
 |  | ||||||
|         if (this.getParam().get("accounttype2").equals("1")) { |  | ||||||
|             result = false; |  | ||||||
|         } else if ((level2.compareTo(level1) < 0) && (domain1.startsWith(domain2)) && (this.getParam().get("accounttype2").equals("2"))) { |  | ||||||
|             result = false; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,109 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.HashMap; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| public class Deploy extends TestCase { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(Deploy.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public Deploy() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             //send a command |  | ||||||
|             api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|             //verify the response of the command |  | ||||||
|             if (api.getResponseCode() != 200) { |  | ||||||
|                 error++; |  | ||||||
|                 s_logger.error("The command " + api.getUrl() + " failed"); |  | ||||||
|             } else { |  | ||||||
|                 s_logger.info("The command " + api.getUrl() + " passsed"); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
| 
 |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         String host = null; |  | ||||||
|         String file = null; |  | ||||||
| 
 |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             // management server host |  | ||||||
|             if (arg.equals("-h")) { |  | ||||||
|                 host = iter.next(); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-f")) { |  | ||||||
|                 file = iter.next(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         Deploy deploy = new Deploy(); |  | ||||||
| 
 |  | ||||||
|         ArrayList<String> inputFile = new ArrayList<String>(); |  | ||||||
|         inputFile.add(file); |  | ||||||
|         deploy.setInputFile(inputFile); |  | ||||||
|         deploy.setTestCaseName("Management server deployment"); |  | ||||||
|         deploy.getParam().put("hostip", host); |  | ||||||
|         deploy.getParam().put("apicommands", "../metadata/func/commands"); |  | ||||||
|         deploy.setCommands(); |  | ||||||
| 
 |  | ||||||
|         s_logger.info("Starting deployment against host " + host); |  | ||||||
| 
 |  | ||||||
|         boolean result = deploy.executeTest(); |  | ||||||
|         if (result == false) { |  | ||||||
|             s_logger.error("DEPLOYMENT FAILED"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } else { |  | ||||||
|             s_logger.info("DEPLOYMENT IS SUCCESSFUL"); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,176 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.sql.Statement; |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.trilead.ssh2.Connection; |  | ||||||
| import com.trilead.ssh2.Session; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class EventsApiTest extends TestCase { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(EventsApiTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public EventsApiTest() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //!!!check if we need to execute mySql command |  | ||||||
|             NodeList commandName = fstElmnt.getElementsByTagName("name"); |  | ||||||
|             Element commandElmnt = (Element)commandName.item(0); |  | ||||||
|             NodeList commandNm = commandElmnt.getChildNodes(); |  | ||||||
|             if (commandNm.item(0).getNodeValue().equals("mysqlupdate")) { |  | ||||||
|                 //establish connection to mysql server and execute an update command |  | ||||||
|                 NodeList mysqlList = fstElmnt.getElementsByTagName("mysqlcommand"); |  | ||||||
|                 for (int j = 0; j < mysqlList.getLength(); j++) { |  | ||||||
|                     Element itemVariableElement = (Element)mysqlList.item(j); |  | ||||||
| 
 |  | ||||||
|                     s_logger.info("Executing mysql command " + itemVariableElement.getTextContent()); |  | ||||||
|                     try { |  | ||||||
|                         Statement st = this.getConn().createStatement(); |  | ||||||
|                         st.executeUpdate(itemVariableElement.getTextContent()); |  | ||||||
|                     } catch (Exception ex) { |  | ||||||
|                         s_logger.error(ex); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             else if (commandNm.item(0).getNodeValue().equals("agentcommand")) { |  | ||||||
|                 //connect to all the agents and execute agent command |  | ||||||
|                 NodeList commandList = fstElmnt.getElementsByTagName("commandname"); |  | ||||||
|                 Element commandElement = (Element)commandList.item(0); |  | ||||||
|                 NodeList ipList = fstElmnt.getElementsByTagName("ip"); |  | ||||||
|                 for (int j = 0; j < ipList.getLength(); j++) { |  | ||||||
|                     Element itemVariableElement = (Element)ipList.item(j); |  | ||||||
| 
 |  | ||||||
|                     s_logger.info("Attempting to SSH into agent " + itemVariableElement.getTextContent()); |  | ||||||
|                     try { |  | ||||||
|                         Connection conn = new Connection(itemVariableElement.getTextContent()); |  | ||||||
|                         conn.connect(null, 60000, 60000); |  | ||||||
| 
 |  | ||||||
|                         s_logger.info("SSHed successfully into agent " + itemVariableElement.getTextContent()); |  | ||||||
| 
 |  | ||||||
|                         boolean isAuthenticated = conn.authenticateWithPassword("root", "password"); |  | ||||||
| 
 |  | ||||||
|                         if (isAuthenticated == false) { |  | ||||||
|                             s_logger.info("Authentication failed for root with password"); |  | ||||||
|                             return false; |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         Session sess = conn.openSession(); |  | ||||||
|                         s_logger.info("Executing : " + commandElement.getTextContent()); |  | ||||||
|                         sess.execCommand(commandElement.getTextContent()); |  | ||||||
|                         Thread.sleep(60000); |  | ||||||
|                         sess.close(); |  | ||||||
|                         conn.close(); |  | ||||||
| 
 |  | ||||||
|                     } catch (Exception ex) { |  | ||||||
|                         s_logger.error(ex); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             else { |  | ||||||
|                 //new command |  | ||||||
|                 ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|                 //send a command |  | ||||||
|                 api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|                 //verify the response of the command |  | ||||||
|                 if ((api.getResponseType() == ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                     s_logger.error("Test case " + api.getTestCaseInfo() + |  | ||||||
|                         " failed. Command that was supposed to fail, passed. The command was sent with the following url " + api.getUrl()); |  | ||||||
|                     error++; |  | ||||||
|                 } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                     //verify if response is suppposed to be empty |  | ||||||
|                     if (api.getResponseType() == ResponseType.EMPTY) { |  | ||||||
|                         if (api.isEmpty() == true) { |  | ||||||
|                             s_logger.info("Test case " + api.getTestCaseInfo() + " passed. Empty response was returned as expected. Command was sent with url " + |  | ||||||
|                                 api.getUrl()); |  | ||||||
|                         } else { |  | ||||||
|                             s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Empty response was expected. Command was sent with url " + api.getUrl()); |  | ||||||
|                         } |  | ||||||
|                     } else { |  | ||||||
|                         if (api.isEmpty() != false) |  | ||||||
|                             s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Non-empty response was expected. Command was sent with url " + api.getUrl()); |  | ||||||
|                         else { |  | ||||||
|                             //set parameters for the future use |  | ||||||
|                             if (api.setParam(this.getParam()) == false) { |  | ||||||
|                                 s_logger.error("Exiting the test...Command " + api.getName() + |  | ||||||
|                                     " didn't return parameters needed for the future use. The command was sent with url " + api.getUrl()); |  | ||||||
|                                 return false; |  | ||||||
|                             } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                                 s_logger.info("Test case " + api.getTestCaseInfo() + " passed. Command was sent with the url " + api.getUrl()); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() != 200)) { |  | ||||||
|                     s_logger.error("Command " + api.getName() + " failed with an error code " + api.getResponseCode() + " . Command was sent with url  " + api.getUrl()); |  | ||||||
|                     if (api.getRequired() == true) { |  | ||||||
|                         s_logger.info("The command is required for the future use, so exiging"); |  | ||||||
|                         return false; |  | ||||||
|                     } |  | ||||||
|                     error++; |  | ||||||
|                 } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                     s_logger.info("Test case " + api.getTestCaseInfo() + " passed. Command that was supposed to fail, failed. Command was sent with url " + api.getUrl()); |  | ||||||
| 
 |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //verify events with userid parameter - test case 97 |  | ||||||
|         HashMap<String, Integer> expectedEvents = new HashMap<String, Integer>(); |  | ||||||
|         expectedEvents.put("VM.START", 1); |  | ||||||
|         boolean eventResult = |  | ||||||
|             ApiCommand.verifyEvents(expectedEvents, "INFO", "http://" + this.getParam().get("hostip") + ":8096", "userid=" + this.getParam().get("userid1") + |  | ||||||
|                 "&type=VM.START"); |  | ||||||
|         s_logger.info("Test case 97 - listEvent command verification result is  " + eventResult); |  | ||||||
| 
 |  | ||||||
|         //verify error events |  | ||||||
|         eventResult = |  | ||||||
|             ApiCommand.verifyEvents("../metadata/error_events.properties", "ERROR", "http://" + this.getParam().get("hostip") + ":8096", |  | ||||||
|                 this.getParam().get("erroruseraccount")); |  | ||||||
|         s_logger.info("listEvent command verification result is  " + eventResult); |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,80 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class HA extends TestCase { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(HA.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public HA() { |  | ||||||
|         this.setClient(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
| 
 |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             //send a command |  | ||||||
|             api.sendCommand(this.getClient(), this.getConn()); |  | ||||||
| 
 |  | ||||||
|             //verify the response parameters |  | ||||||
|             if ((api.getResponseCode() != 200) && (api.getRequired() == true)) { |  | ||||||
|                 s_logger.error("Exiting the test....Command " + api.getName() + " required for the future run, failed with an error code " + api.getResponseCode() + |  | ||||||
|                     ". Command was sent with the url " + api.getUrl()); |  | ||||||
|                 return false; |  | ||||||
|             } else if ((api.getResponseCode() != 200) && (api.getResponseType() != ResponseType.ERROR)) { |  | ||||||
|                 error++; |  | ||||||
|                 s_logger.error("Command " + api.getTestCaseInfo() + " failed with an error code " + api.getResponseCode() + " . Command was sent with url  " + |  | ||||||
|                     api.getUrl()); |  | ||||||
|             } else if ((api.getResponseCode() == 200) && (api.getResponseType() == ResponseType.ERROR)) { |  | ||||||
|                 error++; |  | ||||||
|                 s_logger.error("Command " + api.getTestCaseInfo() + " which was supposed to failed, passed. The command was sent with url  " + api.getUrl()); |  | ||||||
|             } else { |  | ||||||
|                 //set parameters for the future use |  | ||||||
|                 if (api.setParam(this.getParam()) == false) { |  | ||||||
|                     s_logger.error("Exiting the test...Command " + api.getName() + " didn't return parameters needed for the future use. Command was sent with url " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|                 s_logger.info("Command " + api.getTestCaseInfo() + " passed"); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,142 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class LoadBalancingTest extends TestCase { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(LoadBalancingTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public LoadBalancingTest() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
| 
 |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
| 
 |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             //send a command |  | ||||||
|             api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|             //verify the response of the command |  | ||||||
|             if ((api.getResponseType() == ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                 s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Command that was supposed to fail, passed. The command was sent with the following url " + |  | ||||||
|                     api.getUrl()); |  | ||||||
|                 error++; |  | ||||||
|             } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                 //verify if response is suppposed to be empty |  | ||||||
|                 if (api.getResponseType() == ResponseType.EMPTY) { |  | ||||||
|                     if (api.isEmpty() == true) { |  | ||||||
|                         s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                     } else { |  | ||||||
|                         s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Empty response was expected. Command was sent with url " + api.getUrl()); |  | ||||||
|                     } |  | ||||||
|                 } else { |  | ||||||
|                     if (api.isEmpty() != false) |  | ||||||
|                         s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Non-empty response was expected. Command was sent with url " + api.getUrl()); |  | ||||||
|                     else { |  | ||||||
|                         //set parameters for the future use |  | ||||||
|                         if (api.setParam(this.getParam()) == false) { |  | ||||||
|                             s_logger.error("Exiting the test...Command " + api.getName() + |  | ||||||
|                                 " didn't return parameters needed for the future use. The command was sent with url " + api.getUrl()); |  | ||||||
|                             return false; |  | ||||||
|                         } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                             s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() != 200)) { |  | ||||||
|                 s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Command was sent with url  " + api.getUrl()); |  | ||||||
|                 if (api.getRequired() == true) { |  | ||||||
|                     s_logger.info("The command is required for the future use, so exiging"); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|                 error++; |  | ||||||
|             } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                 s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| //        //Try to create portForwarding rule for all available private/public ports |  | ||||||
| //        ArrayList<String> port = new ArrayList<String>(); |  | ||||||
| //        for (int i=1; i<65536; i++){ |  | ||||||
| //            port.add(Integer.toString(i)); |  | ||||||
| //        } |  | ||||||
| // |  | ||||||
| //        //try all public ports |  | ||||||
| //        for (String portValue : port) { |  | ||||||
| //            try { |  | ||||||
| //                String url = this.getHost() + ":8096/?command=createOrUpdateLoadBalancerRule&account=" + this.getParam().get("accountname") + "&publicip=" + this.getParam().get("boundaryip") + |  | ||||||
| //                "&privateip=" + this.getParam().get("vmipaddress") + "&privateport=22&protocol=tcp&publicport=" + portValue; |  | ||||||
| //                HttpClient client = new HttpClient(); |  | ||||||
| //                HttpMethod method = new GetMethod(url); |  | ||||||
| //                int responseCode = client.executeMethod(method); |  | ||||||
| //                if (responseCode != 200 ) { |  | ||||||
| //                    error++; |  | ||||||
| //                    s_logger.error("Can't create LB rule for the public port " + portValue + ". Request was sent with url " + url); |  | ||||||
| //                } |  | ||||||
| //            }catch (Exception ex) { |  | ||||||
| //                s_logger.error(ex); |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
| // |  | ||||||
| //        //try all private ports |  | ||||||
| //        for (String portValue : port) { |  | ||||||
| //            try { |  | ||||||
| //                String url = this.getHost() + ":8096/?command=createOrUpdateLoadBalancerRule&account=" + this.getParam().get("accountname") + "&publicip=" + this.getParam().get("boundaryip") + |  | ||||||
| //                "&privateip=" + this.getParam().get("vmipaddress") + "&publicport=22&protocol=tcp&privateport=" + portValue; |  | ||||||
| //                HttpClient client = new HttpClient(); |  | ||||||
| //                HttpMethod method = new GetMethod(url); |  | ||||||
| //                int responseCode = client.executeMethod(method); |  | ||||||
| //                if (responseCode != 200 ) { |  | ||||||
| //                    error++; |  | ||||||
| //                    s_logger.error("Can't create LB rule for the private port " + portValue + ". Request was sent with url " + url); |  | ||||||
| //                } |  | ||||||
| //            }catch (Exception ex) { |  | ||||||
| //                s_logger.error(ex); |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,143 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class PortForwardingTest extends TestCase { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(PortForwardingTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public PortForwardingTest() { |  | ||||||
|         setClient(); |  | ||||||
|         setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
| 
 |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
| 
 |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, getParam(), getCommands()); |  | ||||||
| 
 |  | ||||||
|             //send a command |  | ||||||
|             api.sendCommand(getClient(), null); |  | ||||||
| 
 |  | ||||||
|             //verify the response of the command |  | ||||||
|             if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                 s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Command that was supposed to fail, passed. The command was sent with the following url " + |  | ||||||
|                     api.getUrl()); |  | ||||||
|                 error++; |  | ||||||
|             } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                 //verify if response is suppposed to be empty |  | ||||||
|                 if (api.getResponseType() == ResponseType.EMPTY) { |  | ||||||
|                     if (api.isEmpty() == true) { |  | ||||||
|                         s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                     } else { |  | ||||||
|                         s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Empty response was expected. Command was sent with url " + api.getUrl()); |  | ||||||
|                     } |  | ||||||
|                 } else { |  | ||||||
|                     if (api.isEmpty() != false) |  | ||||||
|                         s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Non-empty response was expected. Command was sent with url " + api.getUrl()); |  | ||||||
|                     else { |  | ||||||
|                         //set parameters for the future use |  | ||||||
|                         if (api.setParam(getParam()) == false) { |  | ||||||
|                             s_logger.error("Exiting the test...Command " + api.getName() + |  | ||||||
|                                 " didn't return parameters needed for the future use. The command was sent with url " + api.getUrl()); |  | ||||||
|                             return false; |  | ||||||
|                         } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                             s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() != 200)) { |  | ||||||
|                 s_logger.error("Test case " + api.getTestCaseInfo() + " failed . Command was sent with url  " + api.getUrl()); |  | ||||||
|                 if (api.getRequired() == true) { |  | ||||||
|                     s_logger.info("The command is required for the future use, so exiging"); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|                 error++; |  | ||||||
|             } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                 s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| //        //Try to create portForwarding rule for all available private/public ports |  | ||||||
| //        ArrayList<String> port = new ArrayList<String>(); |  | ||||||
| //        for (int i=1; i<65536; i++){ |  | ||||||
| //            port.add(Integer.toString(i)); |  | ||||||
| //        } |  | ||||||
| // |  | ||||||
| //        //try all public ports |  | ||||||
| //        for (String portValue : port) { |  | ||||||
| //            try { |  | ||||||
| //                s_logger.info("public port is " + portValue); |  | ||||||
| //                String url = this.getHost() + ":8096/?command=createOrUpdateIpForwardingRule&account=" + this.getParam().get("accountname") + "&publicip=" + this.getParam().get("boundaryip") + |  | ||||||
| //                "&privateip=" + this.getParam().get("vmipaddress") + "&privateport=22&protocol=tcp&publicport=" + portValue; |  | ||||||
| //                HttpClient client = new HttpClient(); |  | ||||||
| //                HttpMethod method = new GetMethod(url); |  | ||||||
| //                int responseCode = client.executeMethod(method); |  | ||||||
| //                if (responseCode != 200 ) { |  | ||||||
| //                    error++; |  | ||||||
| //                    s_logger.error("Can't create portForwarding rule for the public port " + portValue + ". Request was sent with url " + url); |  | ||||||
| //                } |  | ||||||
| //            }catch (Exception ex) { |  | ||||||
| //                s_logger.error(ex); |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
| // |  | ||||||
| //        //try all private ports |  | ||||||
| //        for (String portValue : port) { |  | ||||||
| //            try { |  | ||||||
| //                String url = this.getHost() + ":8096/?command=createOrUpdateIpForwardingRule&account=" + |  | ||||||
| //        this.getParam().get("accountname") + "&publicip=" + this.getParam().get("boundaryip") + |  | ||||||
| //                "&privateip=" + this.getParam().get("vmipaddress") + "&publicport=22&protocol=tcp&privateport=" + portValue; |  | ||||||
| //                HttpClient client = new HttpClient(); |  | ||||||
| //                HttpMethod method = new GetMethod(url); |  | ||||||
| //                int responseCode = client.executeMethod(method); |  | ||||||
| //                if (responseCode != 200 ) { |  | ||||||
| //                    error++; |  | ||||||
| //                    s_logger.error("Can't create portForwarding rule for the private port " + portValue + ". Request was sent with url " + url); |  | ||||||
| //                } |  | ||||||
| //            }catch (Exception ex) { |  | ||||||
| //                s_logger.error(ex); |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,86 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| public class SanityTest extends TestCase { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(SanityTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public SanityTest() { |  | ||||||
|         this.setClient(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
| 
 |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|             //verify the response parameters |  | ||||||
|             if ((api.getResponseCode() != 200) && (api.getRequired() == true)) { |  | ||||||
|                 s_logger.error("Exiting the test....Command " + api.getName() + " required for the future run, failed with an error code " + api.getResponseCode() + |  | ||||||
|                     ". Command was sent with the url " + api.getUrl()); |  | ||||||
|                 return false; |  | ||||||
|             } else if (api.getResponseCode() != 200) { |  | ||||||
|                 error++; |  | ||||||
|                 s_logger.error("Test " + api.getTestCaseInfo() + " failed with an error code " + api.getResponseCode() + " . Command was sent with url  " + api.getUrl()); |  | ||||||
|             } else { |  | ||||||
|                 //set parameters for the future use |  | ||||||
|                 if (api.setParam(this.getParam()) == false) { |  | ||||||
|                     s_logger.error("Exiting the test...Command " + api.getName() + " didn't return parameters needed for the future use. Command was sent with url " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 //verify parameters |  | ||||||
|                 if (api.verifyParam() == false) { |  | ||||||
|                     s_logger.error("Test " + api.getTestCaseInfo() + " failed. Verification for returned parameters failed. The command was sent with url " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                     error++; |  | ||||||
|                 } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                     s_logger.info("Test " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //verify event |  | ||||||
|         boolean eventResult = |  | ||||||
|             ApiCommand.verifyEvents("../metadata/func/regression_events.properties", "INFO", "http://" + this.getParam().get("hostip") + ":8096", |  | ||||||
|                 this.getParam().get("accountname")); |  | ||||||
|         s_logger.info("listEvent command verification result is  " + eventResult); |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,88 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| public class Test extends TestCase { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(Test.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public Test() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
| 
 |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             //send a command |  | ||||||
|             api.sendCommand(this.getClient(), null); |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //Try to create portForwarding rule for all available private/public ports |  | ||||||
|         ArrayList<String> port = new ArrayList<String>(); |  | ||||||
|         for (int j = 1; j < 1000; j++) { |  | ||||||
|             port.add(Integer.toString(j)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //try all public ports |  | ||||||
|         for (String portValue : port) { |  | ||||||
|             try { |  | ||||||
|                 s_logger.info("public port is " + portValue); |  | ||||||
|                 String url = |  | ||||||
|                     "http://" + this.getParam().get("hostip") + ":8096/?command=createNetworkRule&publicPort=" + portValue + |  | ||||||
|                         "&privatePort=22&protocol=tcp&isForward=true&securityGroupId=1&account=admin"; |  | ||||||
|                 HttpClient client = new HttpClient(); |  | ||||||
|                 HttpMethod method = new GetMethod(url); |  | ||||||
|                 int responseCode = client.executeMethod(method); |  | ||||||
|                 if (responseCode != 200) { |  | ||||||
|                     error++; |  | ||||||
|                     s_logger.error("Can't create portForwarding network rule for the public port " + portValue + ". Request was sent with url " + url); |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error(ex); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,138 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileInputStream; |  | ||||||
| import java.sql.Connection; |  | ||||||
| import java.sql.DriverManager; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Enumeration; |  | ||||||
| import java.util.HashMap; |  | ||||||
| import java.util.Properties; |  | ||||||
| 
 |  | ||||||
| import javax.xml.parsers.DocumentBuilder; |  | ||||||
| import javax.xml.parsers.DocumentBuilderFactory; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Document; |  | ||||||
| 
 |  | ||||||
| public abstract class TestCase { |  | ||||||
| 
 |  | ||||||
|     public static Logger s_logger = Logger.getLogger(TestCase.class.getName()); |  | ||||||
|     private Connection conn; |  | ||||||
|     private ArrayList<Document> inputFile = new ArrayList<Document>(); |  | ||||||
|     private HttpClient client; |  | ||||||
|     private String testCaseName; |  | ||||||
|     private HashMap<String, String> param = new HashMap<String, String>(); |  | ||||||
|     private HashMap<String, String> commands = new HashMap<String, String>(); |  | ||||||
| 
 |  | ||||||
|     public HashMap<String, String> getParam() { |  | ||||||
|         return param; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setParam(HashMap<String, String> param) { |  | ||||||
|         this.param = param; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public HashMap<String, String> getCommands() { |  | ||||||
|         return commands; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setCommands() { |  | ||||||
|         File asyncCommands = null; |  | ||||||
|         if (param.get("apicommands") == null) { |  | ||||||
|             s_logger.info("Unable to get the list of commands, exiting"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } else { |  | ||||||
|             asyncCommands = new File(param.get("apicommands")); |  | ||||||
|         } |  | ||||||
|         try { |  | ||||||
|             Properties pro = new Properties(); |  | ||||||
|             FileInputStream in = new FileInputStream(asyncCommands); |  | ||||||
|             pro.load(in); |  | ||||||
|             Enumeration<?> en = pro.propertyNames(); |  | ||||||
|             while (en.hasMoreElements()) { |  | ||||||
|                 String key = (String)en.nextElement(); |  | ||||||
|                 commands.put(key, pro.getProperty(key)); |  | ||||||
|             } |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             s_logger.info("Unable to find the file " + param.get("apicommands") + " due to following exception " + ex); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public Connection getConn() { |  | ||||||
|         return conn; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setConn(String dbPassword) { |  | ||||||
|         this.conn = null; |  | ||||||
|         try { |  | ||||||
|             Class.forName("com.mysql.jdbc.Driver"); |  | ||||||
|             this.conn = DriverManager.getConnection("jdbc:mysql://" + param.get("db") + "/cloud", "root", dbPassword); |  | ||||||
|             if (!this.conn.isValid(0)) { |  | ||||||
|                 s_logger.error("Connection to DB failed to establish"); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             s_logger.error(ex); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setInputFile(ArrayList<String> fileNameInput) { |  | ||||||
|         for (String fileName : fileNameInput) { |  | ||||||
|             File file = new File(fileName); |  | ||||||
|             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |  | ||||||
|             Document doc = null; |  | ||||||
|             try { |  | ||||||
|                 DocumentBuilder builder = factory.newDocumentBuilder(); |  | ||||||
|                 doc = builder.parse(file); |  | ||||||
|                 doc.getDocumentElement().normalize(); |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error("Unable to load " + fileName + " due to ", ex); |  | ||||||
|             } |  | ||||||
|             this.inputFile.add(doc); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public ArrayList<Document> getInputFile() { |  | ||||||
|         return inputFile; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setTestCaseName(String testCaseName) { |  | ||||||
|         this.testCaseName = testCaseName; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getTestCaseName() { |  | ||||||
|         return this.testCaseName; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setClient() { |  | ||||||
|         HttpClient client = new HttpClient(); |  | ||||||
|         this.client = client; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public HttpClient getClient() { |  | ||||||
|         return this.client; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     //abstract methods |  | ||||||
|     public abstract boolean executeTest(); |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,275 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.HashMap; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Random; |  | ||||||
| import java.util.Set; |  | ||||||
| 
 |  | ||||||
| import javax.xml.parsers.DocumentBuilder; |  | ||||||
| import javax.xml.parsers.DocumentBuilderFactory; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Document; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| public class TestCaseEngine { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(TestCaseEngine.class.getName()); |  | ||||||
|     public static String s_fileName = "../metadata/adapter.xml"; |  | ||||||
|     public static HashMap<String, String> s_globalParameters = new HashMap<String, String>(); |  | ||||||
|     protected static HashMap<String, String> s_componentMap = new HashMap<String, String>(); |  | ||||||
|     protected static HashMap<String, ArrayList<String>> s_inputFile = new HashMap<String, ArrayList<String>>(); |  | ||||||
|     protected static String s_testCaseName = new String(); |  | ||||||
|     protected static ArrayList<String> s_keys = new ArrayList<String>(); |  | ||||||
|     private static ThreadLocal<Object> s_result = new ThreadLocal<Object>(); |  | ||||||
|     public static int s_numThreads = 1; |  | ||||||
|     public static boolean s_repeat = false; |  | ||||||
|     public static boolean s_printUrl = false; |  | ||||||
|     public static String s_type = "All"; |  | ||||||
|     public static boolean s_isSanity = false; |  | ||||||
|     public static boolean s_isRegression = false; |  | ||||||
|     private static int s_failure = 0; |  | ||||||
| 
 |  | ||||||
|     public static void main(String args[]) { |  | ||||||
| 
 |  | ||||||
|         // Parameters |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             // is stress? |  | ||||||
|             if (arg.equals("-t")) { |  | ||||||
|                 s_numThreads = Integer.parseInt(iter.next()); |  | ||||||
|             } |  | ||||||
|             // do you want to print url for all commands? |  | ||||||
|             if (arg.equals("-p")) { |  | ||||||
|                 s_printUrl = true; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             //type of the test: sanity, regression, all (default) |  | ||||||
|             if (arg.equals("-type")) { |  | ||||||
|                 s_type = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-repeat")) { |  | ||||||
|                 s_repeat = Boolean.valueOf(iter.next()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-filename")) { |  | ||||||
|                 s_fileName = iter.next(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (s_type.equalsIgnoreCase("sanity")) |  | ||||||
|             s_isSanity = true; |  | ||||||
|         else if (s_type.equalsIgnoreCase("regression")) |  | ||||||
|             s_isRegression = true; |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             // parse adapter.xml file to get list of tests to execute |  | ||||||
|             File file = new File(s_fileName); |  | ||||||
|             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |  | ||||||
|             DocumentBuilder builder = factory.newDocumentBuilder(); |  | ||||||
|             Document doc = builder.parse(file); |  | ||||||
|             doc.getDocumentElement().normalize(); |  | ||||||
|             Element root = doc.getDocumentElement(); |  | ||||||
| 
 |  | ||||||
|             // set global parameters |  | ||||||
|             setGlobalParams(root); |  | ||||||
| 
 |  | ||||||
|             // populate _componentMap |  | ||||||
|             setComponent(root); |  | ||||||
| 
 |  | ||||||
|             // set error to 0 by default |  | ||||||
| 
 |  | ||||||
|             // execute test |  | ||||||
|             for (int i = 0; i < s_numThreads; i++) { |  | ||||||
|                 if (s_numThreads > 1) { |  | ||||||
|                     s_logger.info("STARTING STRESS TEST IN " + s_numThreads + " THREADS"); |  | ||||||
|                 } else { |  | ||||||
|                     s_logger.info("STARTING FUNCTIONAL TEST"); |  | ||||||
|                 } |  | ||||||
|                 new Thread(new Runnable() { |  | ||||||
|                     @Override |  | ||||||
|                     public void run() { |  | ||||||
|                         do { |  | ||||||
|                             if (s_numThreads == 1) { |  | ||||||
|                                 try { |  | ||||||
|                                     for (String key : s_keys) { |  | ||||||
|                                         Class<?> c = Class.forName(s_componentMap.get(key)); |  | ||||||
|                                         TestCase component = (TestCase)c.newInstance(); |  | ||||||
|                                         executeTest(key, c, component); |  | ||||||
|                                     } |  | ||||||
|                                 } catch (Exception ex1) { |  | ||||||
|                                     s_logger.error(ex1); |  | ||||||
|                                 } finally { |  | ||||||
|                                     if (s_failure > 0) { |  | ||||||
|                                         System.exit(1); |  | ||||||
|                                     } |  | ||||||
|                                 } |  | ||||||
|                             } else { |  | ||||||
|                                 Random ran = new Random(); |  | ||||||
|                                 Integer randomNumber = Math.abs(ran.nextInt(s_keys.size())); |  | ||||||
|                                 try { |  | ||||||
|                                     String key = s_keys.get(randomNumber); |  | ||||||
|                                     Class<?> c = Class.forName(s_componentMap.get(key)); |  | ||||||
|                                     TestCase component = (TestCase)c.newInstance(); |  | ||||||
|                                     executeTest(key, c, component); |  | ||||||
|                                 } catch (Exception e) { |  | ||||||
|                                     s_logger.error("Error in thread ", e); |  | ||||||
|                                 } |  | ||||||
|                             } |  | ||||||
|                         } while (s_repeat); |  | ||||||
|                     } |  | ||||||
|                 }).start(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } catch (Exception exc) { |  | ||||||
|             s_logger.error(exc); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static void setGlobalParams(Element rootElement) { |  | ||||||
|         NodeList globalParam = rootElement.getElementsByTagName("globalparam"); |  | ||||||
|         Element parameter = (Element)globalParam.item(0); |  | ||||||
|         NodeList paramLst = parameter.getElementsByTagName("param"); |  | ||||||
| 
 |  | ||||||
|         for (int i = 0; i < paramLst.getLength(); i++) { |  | ||||||
|             Element paramElement = (Element)paramLst.item(i); |  | ||||||
| 
 |  | ||||||
|             if (paramElement.getNodeType() == Node.ELEMENT_NODE) { |  | ||||||
|                 Element itemElement = paramElement; |  | ||||||
|                 NodeList itemName = itemElement.getElementsByTagName("name"); |  | ||||||
|                 Element itemNameElement = (Element)itemName.item(0); |  | ||||||
|                 NodeList itemVariable = itemElement.getElementsByTagName("variable"); |  | ||||||
|                 Element itemVariableElement = (Element)itemVariable.item(0); |  | ||||||
|                 s_globalParameters.put(itemVariableElement.getTextContent(), itemNameElement.getTextContent()); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static void setComponent(Element rootElement) { |  | ||||||
|         NodeList testLst = rootElement.getElementsByTagName("test"); |  | ||||||
|         for (int j = 0; j < testLst.getLength(); j++) { |  | ||||||
|             Element testElement = (Element)testLst.item(j); |  | ||||||
| 
 |  | ||||||
|             if (testElement.getNodeType() == Node.ELEMENT_NODE) { |  | ||||||
|                 Element itemElement = testElement; |  | ||||||
| 
 |  | ||||||
|                 // get test case name |  | ||||||
|                 NodeList testCaseNameList = itemElement.getElementsByTagName("testname"); |  | ||||||
|                 if (testCaseNameList != null) { |  | ||||||
|                     s_testCaseName = ((Element)testCaseNameList.item(0)).getTextContent(); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (s_isSanity == true && !s_testCaseName.equals("SANITY TEST")) |  | ||||||
|                     continue; |  | ||||||
|                 else if (s_isRegression == true && !(s_testCaseName.equals("SANITY TEST") || s_testCaseName.equals("REGRESSION TEST"))) |  | ||||||
|                     continue; |  | ||||||
| 
 |  | ||||||
|                 // set class name |  | ||||||
|                 NodeList className = itemElement.getElementsByTagName("class"); |  | ||||||
|                 if ((className.getLength() == 0) || (className == null)) { |  | ||||||
|                     s_componentMap.put(s_testCaseName, "com.cloud.test.regression.VMApiTest"); |  | ||||||
|                 } else { |  | ||||||
|                     String name = ((Element)className.item(0)).getTextContent(); |  | ||||||
|                     s_componentMap.put(s_testCaseName, name); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 // set input file name |  | ||||||
|                 NodeList inputFileNameLst = itemElement.getElementsByTagName("filename"); |  | ||||||
|                 s_inputFile.put(s_testCaseName, new ArrayList<String>()); |  | ||||||
|                 for (int k = 0; k < inputFileNameLst.getLength(); k++) { |  | ||||||
|                     String inputFileName = ((Element)inputFileNameLst.item(k)).getTextContent(); |  | ||||||
|                     s_inputFile.get(s_testCaseName).add(inputFileName); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //If sanity test required, make sure that SANITY TEST componennt got loaded |  | ||||||
|         if (s_isSanity == true && s_componentMap.size() == 0) { |  | ||||||
|             s_logger.error("FAILURE!!! Failed to load SANITY TEST component. Verify that the test is uncommented in adapter.xml"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (s_isRegression == true && s_componentMap.size() != 2) { |  | ||||||
|             s_logger.error("FAILURE!!! Failed to load SANITY TEST or REGRESSION TEST components. Verify that these tests are uncommented in adapter.xml"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // put all keys from _componentMap to the ArrayList |  | ||||||
|         Set<?> set = s_componentMap.entrySet(); |  | ||||||
|         Iterator<?> it = set.iterator(); |  | ||||||
|         while (it.hasNext()) { |  | ||||||
|             Map.Entry<?, ?> me = (Map.Entry<?, ?>)it.next(); |  | ||||||
|             String key = (String)me.getKey(); |  | ||||||
|             s_keys.add(key); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static boolean executeTest(String key, Class<?> c, TestCase component) { |  | ||||||
|         boolean finalResult = false; |  | ||||||
|         try { |  | ||||||
|             s_logger.info("Starting \"" + key + "\" test...\n\n"); |  | ||||||
| 
 |  | ||||||
|             // set global parameters |  | ||||||
|             HashMap<String, String> updateParam = new HashMap<String, String>(); |  | ||||||
|             updateParam.putAll(s_globalParameters); |  | ||||||
|             component.setParam(updateParam); |  | ||||||
| 
 |  | ||||||
|             // set DB ip address |  | ||||||
|             component.setConn(s_globalParameters.get("dbPassword")); |  | ||||||
| 
 |  | ||||||
|             // set commands list |  | ||||||
|             component.setCommands(); |  | ||||||
| 
 |  | ||||||
|             // set input file |  | ||||||
|             if (s_inputFile.get(key) != null) { |  | ||||||
|                 component.setInputFile(s_inputFile.get(key)); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             // set test case name |  | ||||||
|             if (key != null) { |  | ||||||
|                 component.setTestCaseName(s_testCaseName); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             // execute method |  | ||||||
|             s_result.set(component.executeTest()); |  | ||||||
|             if (s_result.get().toString().equals("false")) { |  | ||||||
|                 s_logger.error("FAILURE!!! Test \"" + key + "\" failed\n\n\n"); |  | ||||||
|                 s_failure++; |  | ||||||
|             } else { |  | ||||||
|                 finalResult = true; |  | ||||||
|                 s_logger.info("SUCCESS!!! Test \"" + key + "\" passed\n\n\n"); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             s_logger.error("error during test execution ", ex); |  | ||||||
|         } |  | ||||||
|         return finalResult; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,91 +0,0 @@ | |||||||
| // 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 com.cloud.test.regression; |  | ||||||
| 
 |  | ||||||
| import java.util.HashMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.test.regression.ApiCommand.ResponseType; |  | ||||||
| 
 |  | ||||||
| public class VMApiTest extends TestCase { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(VMApiTest.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public VMApiTest() { |  | ||||||
|         this.setClient(); |  | ||||||
|         this.setParam(new HashMap<String, String>()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean executeTest() { |  | ||||||
|         int error = 0; |  | ||||||
|         Element rootElement = this.getInputFile().get(0).getDocumentElement(); |  | ||||||
|         NodeList commandLst = rootElement.getElementsByTagName("command"); |  | ||||||
| 
 |  | ||||||
|         //Analyze each command, send request and build the array list of api commands |  | ||||||
|         for (int i = 0; i < commandLst.getLength(); i++) { |  | ||||||
|             Node fstNode = commandLst.item(i); |  | ||||||
|             Element fstElmnt = (Element)fstNode; |  | ||||||
| 
 |  | ||||||
|             //new command |  | ||||||
|             ApiCommand api = new ApiCommand(fstElmnt, this.getParam(), this.getCommands()); |  | ||||||
| 
 |  | ||||||
|             //send a command |  | ||||||
|             api.sendCommand(this.getClient(), this.getConn()); |  | ||||||
| 
 |  | ||||||
|             //verify the response of the command |  | ||||||
|             if ((api.getResponseType() == ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                 s_logger.error("Test case " + api.getTestCaseInfo() + " failed. Command that was supposed to fail, passed. The command was sent with the following url " + |  | ||||||
|                     api.getUrl()); |  | ||||||
|                 error++; |  | ||||||
|             } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() == 200)) { |  | ||||||
|                 //set parameters for the future use |  | ||||||
|                 if (api.setParam(this.getParam()) == false) { |  | ||||||
|                     s_logger.error("Exiting the test...Command " + api.getName() + " didn't return parameters needed for the future use. The command was sent with url " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|                 //verify parameters |  | ||||||
|                 if (api.verifyParam() == false) { |  | ||||||
|                     s_logger.error("Test " + api.getTestCaseInfo() + " failed. Verification for returned parameters failed. The command was sent with url " + |  | ||||||
|                         api.getUrl()); |  | ||||||
|                     error++; |  | ||||||
|                 } else { |  | ||||||
|                     s_logger.info("Test " + api.getTestCaseInfo() + " passed"); |  | ||||||
|                 } |  | ||||||
|             } else if ((api.getResponseType() != ResponseType.ERROR) && (api.getResponseCode() != 200)) { |  | ||||||
|                 s_logger.error("Test case  " + api.getTestCaseInfo() + " failed with an error code " + api.getResponseCode() + " . Command was sent with url  " + |  | ||||||
|                     api.getUrl()); |  | ||||||
|                 if (api.getRequired() == true) { |  | ||||||
|                     s_logger.info("The command is required for the future use, so exiging"); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|                 error++; |  | ||||||
|             } else if (api.getTestCaseInfo() != null) { |  | ||||||
|                 s_logger.info("Test case " + api.getTestCaseInfo() + " passed"); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         if (error != 0) |  | ||||||
|             return false; |  | ||||||
|         else |  | ||||||
|             return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,90 +0,0 @@ | |||||||
| // 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 com.cloud.test.stress; |  | ||||||
| 
 |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.trilead.ssh2.Connection; |  | ||||||
| import com.trilead.ssh2.Session; |  | ||||||
| 
 |  | ||||||
| public class SshTest { |  | ||||||
| 
 |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(SshTest.class.getName()); |  | ||||||
|     public static String host = ""; |  | ||||||
|     public static String password = "password"; |  | ||||||
|     public static String url = "http://google.com"; |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
| 
 |  | ||||||
|         // Parameters |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             if (arg.equals("-h")) { |  | ||||||
|                 host = iter.next(); |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-p")) { |  | ||||||
|                 password = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-u")) { |  | ||||||
|                 url = iter.next(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (host == null || host.equals("")) { |  | ||||||
|             s_logger.info("Did not receive a host back from test, ignoring ssh test"); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (password == null) { |  | ||||||
|             s_logger.info("Did not receive a password back from test, ignoring ssh test"); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             s_logger.info("Attempting to SSH into host " + host); |  | ||||||
|             Connection conn = new Connection(host); |  | ||||||
|             conn.connect(null, 60000, 60000); |  | ||||||
| 
 |  | ||||||
|             s_logger.info("User + ssHed successfully into host " + host); |  | ||||||
| 
 |  | ||||||
|             boolean isAuthenticated = conn.authenticateWithPassword("root", password); |  | ||||||
| 
 |  | ||||||
|             if (isAuthenticated == false) { |  | ||||||
|                 s_logger.info("Authentication failed for root with password" + password); |  | ||||||
|                 System.exit(2); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             String linuxCommand = "wget " + url; |  | ||||||
|             Session sess = conn.openSession(); |  | ||||||
|             sess.execCommand(linuxCommand); |  | ||||||
|             sess.close(); |  | ||||||
|             conn.close(); |  | ||||||
| 
 |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             s_logger.error("SSH test fail with error", e); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,150 +0,0 @@ | |||||||
| // 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 com.cloud.test.stress; |  | ||||||
| 
 |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.trilead.ssh2.ChannelCondition; |  | ||||||
| import com.trilead.ssh2.Connection; |  | ||||||
| import com.trilead.ssh2.Session; |  | ||||||
| 
 |  | ||||||
| public class WgetTest { |  | ||||||
| 
 |  | ||||||
|     public static final int MAX_RETRY_LINUX = 1; |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(WgetTest.class.getName()); |  | ||||||
|     public static String host = ""; |  | ||||||
|     public static String password = "rs-ccb35ea5"; |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
| 
 |  | ||||||
|         // Parameters |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             // host |  | ||||||
|             if (arg.equals("-h")) { |  | ||||||
|                 host = iter.next(); |  | ||||||
|             } |  | ||||||
|             //password |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-p")) { |  | ||||||
|                 password = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         int i = 0; |  | ||||||
|         if (host == null || host.equals("")) { |  | ||||||
|             s_logger.info("Did not receive a host back from test, ignoring ssh test"); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (password == null) { |  | ||||||
|             s_logger.info("Did not receive a password back from test, ignoring ssh test"); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
|         int retry = 0; |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             if (retry > 0) { |  | ||||||
|                 s_logger.info("Retry attempt : " + retry + " ...sleeping 120 seconds before next attempt"); |  | ||||||
|                 Thread.sleep(120000); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             s_logger.info("Attempting to SSH into linux host " + host + " with retry attempt: " + retry); |  | ||||||
| 
 |  | ||||||
|             Connection conn = new Connection(host); |  | ||||||
|             conn.connect(null, 60000, 60000); |  | ||||||
| 
 |  | ||||||
|             s_logger.info("User + ssHed successfully into linux host " + host); |  | ||||||
| 
 |  | ||||||
|             boolean isAuthenticated = conn.authenticateWithPassword("root", password); |  | ||||||
| 
 |  | ||||||
|             if (isAuthenticated == false) { |  | ||||||
|                 s_logger.info("Authentication failed for root with password" + password); |  | ||||||
|                 System.exit(2); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             boolean success = false; |  | ||||||
|             String linuxCommand = null; |  | ||||||
| 
 |  | ||||||
|             if (i % 10 == 0) |  | ||||||
|                 linuxCommand = "rm -rf *; wget http://192.168.1.250/dump.bin && ls -al dump.bin"; |  | ||||||
|             else |  | ||||||
|                 linuxCommand = "wget http://192.168.1.250/dump.bin && ls -al dump.bin"; |  | ||||||
| 
 |  | ||||||
|             Session sess = conn.openSession(); |  | ||||||
|             sess.execCommand(linuxCommand); |  | ||||||
| 
 |  | ||||||
|             InputStream stdout = sess.getStdout(); |  | ||||||
|             InputStream stderr = sess.getStderr(); |  | ||||||
| 
 |  | ||||||
|             byte[] buffer = new byte[8192]; |  | ||||||
|             while (true) { |  | ||||||
|                 if ((stdout.available() == 0) && (stderr.available() == 0)) { |  | ||||||
|                     int conditions = sess.waitForCondition(ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA | ChannelCondition.EOF, 120000); |  | ||||||
| 
 |  | ||||||
|                     if ((conditions & ChannelCondition.TIMEOUT) != 0) { |  | ||||||
|                         s_logger.info("Timeout while waiting for data from peer."); |  | ||||||
|                         System.exit(2); |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     if ((conditions & ChannelCondition.EOF) != 0) { |  | ||||||
|                         if ((conditions & (ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA)) == 0) { |  | ||||||
|                             break; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 while (stdout.available() > 0) { |  | ||||||
|                     success = true; |  | ||||||
|                     int len = stdout.read(buffer); |  | ||||||
|                     if (len > 0) // this check is somewhat paranoid |  | ||||||
|                         s_logger.info(new String(buffer, 0, len)); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 while (stderr.available() > 0) { |  | ||||||
|                     /* int len = */stderr.read(buffer); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             sess.close(); |  | ||||||
|             conn.close(); |  | ||||||
| 
 |  | ||||||
|             if (!success) { |  | ||||||
|                 retry++; |  | ||||||
|                 if (retry == MAX_RETRY_LINUX) { |  | ||||||
|                     System.exit(2); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             retry++; |  | ||||||
|             s_logger.error("SSH Linux Network test fail with error"); |  | ||||||
|             if (retry == MAX_RETRY_LINUX) { |  | ||||||
|                 s_logger.error("Ssh test failed"); |  | ||||||
|                 System.exit(2); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,55 +0,0 @@ | |||||||
| // 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 com.cloud.test.ui; |  | ||||||
| 
 |  | ||||||
| import org.junit.AfterClass; |  | ||||||
| import org.junit.BeforeClass; |  | ||||||
| import org.junit.runner.RunWith; |  | ||||||
| import org.junit.runners.JUnit4; |  | ||||||
| import org.openqa.selenium.server.RemoteControlConfiguration; |  | ||||||
| import org.openqa.selenium.server.SeleniumServer; |  | ||||||
| 
 |  | ||||||
| import com.thoughtworks.selenium.DefaultSelenium; |  | ||||||
| 
 |  | ||||||
| @RunWith(JUnit4.class) |  | ||||||
| public abstract class AbstractSeleniumTestCase { |  | ||||||
|     protected static DefaultSelenium selenium; |  | ||||||
|     private static SeleniumServer seleniumServer; |  | ||||||
| 
 |  | ||||||
|     @BeforeClass |  | ||||||
|     public static void setUp() throws Exception { |  | ||||||
|         System.out.println("*** Starting selenium ... ***"); |  | ||||||
|         RemoteControlConfiguration seleniumConfig = new RemoteControlConfiguration(); |  | ||||||
|         seleniumConfig.setPort(4444); |  | ||||||
|         seleniumServer = new SeleniumServer(seleniumConfig); |  | ||||||
|         seleniumServer.start(); |  | ||||||
| 
 |  | ||||||
|         String host = System.getProperty("myParam", "localhost"); |  | ||||||
|         selenium = createSeleniumClient("http://" + host + ":" + "8080/client/"); |  | ||||||
|         selenium.start(); |  | ||||||
|         System.out.println("*** Started selenium ***"); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @AfterClass |  | ||||||
|     public static void tearDown() throws Exception { |  | ||||||
|         selenium.stop(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     protected static DefaultSelenium createSeleniumClient(String url) throws Exception { |  | ||||||
|         return new DefaultSelenium("localhost", 4444, "*firefox", url); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,127 +0,0 @@ | |||||||
| // 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 com.cloud.test.ui; |  | ||||||
| 
 |  | ||||||
| import static org.junit.Assert.assertTrue; |  | ||||||
| import static org.junit.Assert.fail; |  | ||||||
| 
 |  | ||||||
| import org.junit.Test; |  | ||||||
| 
 |  | ||||||
| import com.thoughtworks.selenium.SeleniumException; |  | ||||||
| 
 |  | ||||||
| public class AddAndDeleteAISO extends AbstractSeleniumTestCase { |  | ||||||
| 
 |  | ||||||
|     @Test |  | ||||||
|     public void testAddAndDeleteISO() throws Exception { |  | ||||||
|         try { |  | ||||||
|             selenium.open("/client/"); |  | ||||||
|             selenium.type("account_username", "admin"); |  | ||||||
|             selenium.type("account_password", "password"); |  | ||||||
|             selenium.click("loginbutton"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             assertTrue(selenium.isTextPresent("admin")); |  | ||||||
|             selenium.click("//div[@id='leftmenu_templates']/div"); |  | ||||||
|             selenium.click("//div[@id='leftmenu_submenu_my_iso']/div/div[2]"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             selenium.click("label"); |  | ||||||
| 
 |  | ||||||
|             selenium.type("add_iso_name", "abc"); |  | ||||||
|             selenium.type("add_iso_display_text", "abc"); |  | ||||||
|             String iso_url = System.getProperty("add_iso_url", "http://10.91.28.6/ISO/Fedora-11-i386-DVD.iso"); |  | ||||||
|             selenium.type("add_iso_url", iso_url); |  | ||||||
|             String iso_zone = System.getProperty("add_iso_zone", "All Zones"); |  | ||||||
|             selenium.select("add_iso_zone", "label=" + iso_zone); |  | ||||||
|             String iso_os_type = System.getProperty("add_iso_os_type", "Fedora 11"); |  | ||||||
|             selenium.select("add_iso_os_type", "label=" + iso_os_type); |  | ||||||
|             selenium.click("//div[28]/div[11]/button[1]"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             int i = 1; |  | ||||||
|             try { |  | ||||||
|                 for (;; i++) { |  | ||||||
|                     System.out.println("i=   " + i); |  | ||||||
|                     selenium.click("//div[" + i + "]/div/div[2]/span/span"); |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.info("[ignored]" |  | ||||||
|                         + "error during clicking test on iso: " + e.getLocalizedMessage()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             for (int second = 0;; second++) { |  | ||||||
|                 if (second >= 60) |  | ||||||
|                     fail("timeout"); |  | ||||||
|                 try { |  | ||||||
|                     if (selenium.isVisible("//div[@id='after_action_info_container_on_top']")) |  | ||||||
|                         break; |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     s_logger.info("[ignored]" |  | ||||||
|                             + "error during visibility test of iso: " + e.getLocalizedMessage()); |  | ||||||
|                 } |  | ||||||
|                 Thread.sleep(10000); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             assertTrue(selenium.isTextPresent("Adding succeeded")); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             int status = 1; |  | ||||||
|             while (!selenium.isTextPresent("Ready")) { |  | ||||||
|                 for (int j = 1; j <= i; j++) |  | ||||||
| 
 |  | ||||||
|                 { |  | ||||||
|                     if (selenium.isTextPresent("Ready")) { |  | ||||||
|                         status = 0; |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                     selenium.click("//div[" + j + "]/div/div[2]/span/span"); |  | ||||||
|                 } |  | ||||||
|                 if (status == 0) { |  | ||||||
|                     break; |  | ||||||
|                 } else { |  | ||||||
|                     selenium.click("//div[@id='leftmenu_submenu_featured_iso']/div/div[2]"); |  | ||||||
|                     Thread.sleep(3000); |  | ||||||
|                     selenium.click("//div[@id='leftmenu_submenu_my_iso']/div/div[2]"); |  | ||||||
|                     Thread.sleep(3000); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             selenium.click("link=Delete ISO"); |  | ||||||
|             selenium.click("//div[28]/div[11]/button[1]"); |  | ||||||
|             for (int second = 0;; second++) { |  | ||||||
|                 if (second >= 60) |  | ||||||
|                     fail("timeout"); |  | ||||||
|                 try { |  | ||||||
|                     if (selenium.isVisible("after_action_info_container_on_top")) |  | ||||||
|                         break; |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     s_logger.info("[ignored]" |  | ||||||
|                             + "error checking visibility after test completion for iso: " + e.getLocalizedMessage()); |  | ||||||
|                 } |  | ||||||
|                 Thread.sleep(1000); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             assertTrue(selenium.isTextPresent("Delete ISO action succeeded")); |  | ||||||
|             selenium.click("main_logout"); |  | ||||||
|             selenium.waitForPageToLoad("30000"); |  | ||||||
|             assertTrue(selenium.isTextPresent("Welcome to Management Console")); |  | ||||||
| 
 |  | ||||||
|         } catch (SeleniumException ex) { |  | ||||||
| 
 |  | ||||||
|             System.err.println(ex.getMessage()); |  | ||||||
|             fail(ex.getMessage()); |  | ||||||
| 
 |  | ||||||
|             throw ex; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,126 +0,0 @@ | |||||||
| // 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 com.cloud.test.ui; |  | ||||||
| 
 |  | ||||||
| import static org.junit.Assert.assertTrue; |  | ||||||
| import static org.junit.Assert.fail; |  | ||||||
| 
 |  | ||||||
| import org.junit.Test; |  | ||||||
| 
 |  | ||||||
| import com.thoughtworks.selenium.SeleniumException; |  | ||||||
| 
 |  | ||||||
| public class AddAndDeleteATemplate extends AbstractSeleniumTestCase { |  | ||||||
| 
 |  | ||||||
|     @Test |  | ||||||
|     public void testAddAndDeleteTemplate() throws Exception { |  | ||||||
|         try { |  | ||||||
|             selenium.open("/client/"); |  | ||||||
|             selenium.type("account_username", "admin"); |  | ||||||
|             selenium.type("account_password", "password"); |  | ||||||
|             selenium.click("loginbutton"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             assertTrue(selenium.isTextPresent("admin")); |  | ||||||
|             selenium.click("//div[@id='leftmenu_templates']/div"); |  | ||||||
|             selenium.click("//div[@id='leftmenu_submenu_my_template']/div/div[2]"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             selenium.click("label"); |  | ||||||
|             selenium.type("add_template_name", "abc"); |  | ||||||
|             selenium.type("add_template_display_text", "abc"); |  | ||||||
|             String template_url = |  | ||||||
|                 System.getProperty("add_template_url", "http://10.91.28.6/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2"); |  | ||||||
|             selenium.type("add_template_url", template_url); |  | ||||||
|             String template_zone = System.getProperty("add_template_zone", "All Zones"); |  | ||||||
|             selenium.select("add_template_zone", "label=" + template_zone); |  | ||||||
|             String template_os_type = System.getProperty("add_template_os_type", "CentOS 5.3 (32-bit)"); |  | ||||||
|             selenium.select("add_template_os_type", "label=" + template_os_type); |  | ||||||
|             selenium.click("//div[28]/div[11]/button[1]"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             int i = 1; |  | ||||||
|             try { |  | ||||||
|                 for (;; i++) { |  | ||||||
|                     System.out.println("i=   " + i); |  | ||||||
|                     selenium.click("//div[" + i + "]/div/div[2]/span/span"); |  | ||||||
|                 } |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.info("[ignored]" |  | ||||||
|                         + "error during clicking test on template: " + ex.getLocalizedMessage()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             for (int second = 0;; second++) { |  | ||||||
|                 if (second >= 60) |  | ||||||
|                     fail("timeout"); |  | ||||||
|                 try { |  | ||||||
|                     if (selenium.isVisible("//div[@id='after_action_info_container_on_top']")) |  | ||||||
|                         break; |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     s_logger.info("[ignored]" |  | ||||||
|                             + "error during visibility test of template: " + e.getLocalizedMessage()); |  | ||||||
|                 } |  | ||||||
|                 Thread.sleep(10000); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             assertTrue(selenium.isTextPresent("Adding succeeded")); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             int status = 1; |  | ||||||
|             while (!selenium.isTextPresent("Ready")) { |  | ||||||
|                 for (int j = 1; j <= i; j++) |  | ||||||
| 
 |  | ||||||
|                 { |  | ||||||
|                     if (selenium.isTextPresent("Ready")) { |  | ||||||
|                         status = 0; |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                     selenium.click("//div[" + j + "]/div/div[2]/span/span"); |  | ||||||
|                 } |  | ||||||
|                 if (status == 0) { |  | ||||||
|                     break; |  | ||||||
|                 } else { |  | ||||||
|                     selenium.click("//div[@id='leftmenu_submenu_featured_template']/div/div[2]"); |  | ||||||
|                     Thread.sleep(3000); |  | ||||||
|                     selenium.click("//div[@id='leftmenu_submenu_my_template']/div/div[2]"); |  | ||||||
|                     Thread.sleep(3000); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             selenium.click("link=Delete Template"); |  | ||||||
|             selenium.click("//div[28]/div[11]/button[1]"); |  | ||||||
|             for (int second = 0;; second++) { |  | ||||||
|                 if (second >= 60) |  | ||||||
|                     fail("timeout"); |  | ||||||
|                 try { |  | ||||||
|                     if (selenium.isVisible("after_action_info_container_on_top")) |  | ||||||
|                         break; |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     s_logger.info("[ignored]" |  | ||||||
|                             + "error checking visibility after test completion for template: " + e.getLocalizedMessage()); |  | ||||||
|                 } |  | ||||||
|                 Thread.sleep(1000); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             assertTrue(selenium.isTextPresent("Delete Template action succeeded")); |  | ||||||
|             selenium.click("main_logout"); |  | ||||||
|             selenium.waitForPageToLoad("30000"); |  | ||||||
|             assertTrue(selenium.isTextPresent("Welcome to Management Console")); |  | ||||||
|         } catch (SeleniumException ex) { |  | ||||||
| 
 |  | ||||||
|             System.err.println(ex.getMessage()); |  | ||||||
|             fail(ex.getMessage()); |  | ||||||
| 
 |  | ||||||
|             throw ex; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,86 +0,0 @@ | |||||||
| // 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 com.cloud.test.ui; |  | ||||||
| 
 |  | ||||||
| import static org.junit.Assert.assertTrue; |  | ||||||
| import static org.junit.Assert.fail; |  | ||||||
| 
 |  | ||||||
| import org.junit.Test; |  | ||||||
| 
 |  | ||||||
| import com.thoughtworks.selenium.SeleniumException; |  | ||||||
| 
 |  | ||||||
| public class UIScenarioTest extends AbstractSeleniumTestCase { |  | ||||||
| 
 |  | ||||||
|     @Test |  | ||||||
|     public void testLoginStartStopVMScenario() throws Exception { |  | ||||||
|         try { |  | ||||||
|             selenium.open("/client/"); |  | ||||||
|             selenium.type("account_username", "admin"); |  | ||||||
|             selenium.type("account_password", "password"); |  | ||||||
|             selenium.click("loginbutton"); |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             assertTrue(selenium.isTextPresent("admin")); |  | ||||||
|             selenium.click("//div[@id='leftmenu_instances']/div"); |  | ||||||
|             selenium.click("//div[@id='leftmenu_instances_stopped_instances']/div/span"); |  | ||||||
| 
 |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             selenium.click("//div[@id='midmenu_startvm_link']/div/div[2]"); |  | ||||||
|             selenium.click("//div[39]/div[11]/button[1]"); |  | ||||||
| 
 |  | ||||||
|             for (int second = 0;; second++) { |  | ||||||
|                 if (second >= 60) |  | ||||||
|                     fail("timeout"); |  | ||||||
|                 try { |  | ||||||
|                     if (selenium.isVisible("//div/p[@id='after_action_info']")) |  | ||||||
|                         break; |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     s_logger.info("[ignored]" |  | ||||||
|                             + "error during visibility test after start vm: " + e.getLocalizedMessage()); |  | ||||||
|                 } |  | ||||||
|                 Thread.sleep(10000); |  | ||||||
|             } |  | ||||||
|             assertTrue(selenium.isTextPresent("Start Instance action succeeded")); |  | ||||||
|             selenium.click("//div[@id='leftmenu_instances_running_instances']/div/span"); |  | ||||||
| 
 |  | ||||||
|             Thread.sleep(3000); |  | ||||||
|             selenium.click("//div[@id='midmenu_stopvm_link']/div/div[2]"); |  | ||||||
|             selenium.click("//div[39]/div[11]/button[1]"); |  | ||||||
|             for (int second = 0;; second++) { |  | ||||||
|                 if (second >= 60) |  | ||||||
|                     fail("timeout"); |  | ||||||
|                 try { |  | ||||||
|                     if (selenium.isVisible("//div/p[@id='after_action_info']")) |  | ||||||
|                         break; |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     s_logger.info("[ignored]" |  | ||||||
|                             + "error during visibility test after stop vm: " + e.getLocalizedMessage()); |  | ||||||
|                 } |  | ||||||
|                 Thread.sleep(10000); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             assertTrue(selenium.isTextPresent("Stop Instance action succeeded")); |  | ||||||
|             selenium.click("main_logout"); |  | ||||||
|             selenium.waitForPageToLoad("30000"); |  | ||||||
|             assertTrue(selenium.isTextPresent("Welcome to Management Console")); |  | ||||||
| 
 |  | ||||||
|         } catch (SeleniumException ex) { |  | ||||||
|             fail(ex.getMessage()); |  | ||||||
|             System.err.println(ex.getMessage()); |  | ||||||
|             throw ex; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,110 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.IOException; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.cloud.utils.script.OutputInterpreter; |  | ||||||
| import com.cloud.utils.script.Script; |  | ||||||
| 
 |  | ||||||
| public class ConsoleProxy implements Runnable { |  | ||||||
|     public static String proxyIp; |  | ||||||
|     private String command; |  | ||||||
|     private int connectionsMade; |  | ||||||
|     private long responseTime; |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(ConsoleProxy.class.getClass()); |  | ||||||
| 
 |  | ||||||
|     public ConsoleProxy(String port, String sid, String host) { |  | ||||||
|         this.command = "https://" + proxyIp + ".realhostip.com:8000/getscreen?w=100&h=75&host=" + host + "&port=" + port + "&sid=" + sid; |  | ||||||
|         s_logger.info("Command for a console proxy is " + this.command); |  | ||||||
|         this.connectionsMade = 0; |  | ||||||
|         this.responseTime = 0; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public int getConnectionsMade() { |  | ||||||
|         return this.connectionsMade; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public long getResponseTime() { |  | ||||||
|         return this.responseTime; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public void run() { |  | ||||||
|         while (true) { |  | ||||||
| 
 |  | ||||||
|             Script myScript = new Script("wget"); |  | ||||||
|             myScript.add(command); |  | ||||||
|             myScript.execute(); |  | ||||||
|             long begin = System.currentTimeMillis(); |  | ||||||
|             WgetInt process = new WgetInt(); |  | ||||||
|             String response = myScript.execute(process); |  | ||||||
|             long end = process.getEnd(); |  | ||||||
|             if (response != null) { |  | ||||||
|                 s_logger.info("Content lenght is incorrect: " + response); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             long duration = (end - begin); |  | ||||||
|             this.connectionsMade++; |  | ||||||
|             this.responseTime = this.responseTime + duration; |  | ||||||
|             try { |  | ||||||
|                 Thread.sleep(1000); |  | ||||||
|             } catch (InterruptedException e) { |  | ||||||
|                 s_logger.debug("[ignored] interrupted."); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public class WgetInt extends OutputInterpreter { |  | ||||||
|         private long end; |  | ||||||
| 
 |  | ||||||
|         public long getEnd() { |  | ||||||
|             return end; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         public void setEnd(long end) { |  | ||||||
|             this.end = end; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         @Override |  | ||||||
|         public String interpret(BufferedReader reader) throws IOException { |  | ||||||
|             // TODO Auto-generated method stub |  | ||||||
|             end = System.currentTimeMillis(); |  | ||||||
|             String status = null; |  | ||||||
|             String line = null; |  | ||||||
|             while ((line = reader.readLine()) != null) { |  | ||||||
|                 int index = line.indexOf("Length:"); |  | ||||||
|                 if (index == -1) { |  | ||||||
|                     continue; |  | ||||||
|                 } else { |  | ||||||
|                     int index1 = line.indexOf("Length: 1827"); |  | ||||||
|                     if (index1 == -1) { |  | ||||||
|                         return status; |  | ||||||
|                     } else |  | ||||||
|                         status = line; |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             return status; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,89 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.DataOutputStream; |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileOutputStream; |  | ||||||
| import java.util.StringTokenizer; |  | ||||||
| 
 |  | ||||||
| public class IpSqlGenerator { |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         try { |  | ||||||
|             if (args.length != 5) { |  | ||||||
|                 System.out.println("Usage -- generate-ip.sh <public|private> <begin ip range> <end ip range> <data center id> <pod id>"); |  | ||||||
|                 System.out.println("Example -- generate-ip.sh public 192.168.1.1 192.168.1.255 1 1"); |  | ||||||
|                 System.out.println("  will generate ips ranging from public ips 192.168.1.1 to 192.168.1.255 for dc 1 and pod 1"); |  | ||||||
|                 return; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             String type = args[0]; |  | ||||||
| 
 |  | ||||||
|             StringTokenizer st = new StringTokenizer(args[1], "."); |  | ||||||
|             int ipS1 = Integer.parseInt(st.nextToken()); |  | ||||||
|             int ipS2 = Integer.parseInt(st.nextToken()); |  | ||||||
|             int ipS3 = Integer.parseInt(st.nextToken()); |  | ||||||
|             int ipS4 = Integer.parseInt(st.nextToken()); |  | ||||||
| 
 |  | ||||||
|             st = new StringTokenizer(args[2], "."); |  | ||||||
|             int ipE1 = Integer.parseInt(st.nextToken()); |  | ||||||
|             int ipE2 = Integer.parseInt(st.nextToken()); |  | ||||||
|             int ipE3 = Integer.parseInt(st.nextToken()); |  | ||||||
|             int ipE4 = Integer.parseInt(st.nextToken()); |  | ||||||
| 
 |  | ||||||
|             String dcId = args[3]; |  | ||||||
|             String podId = args[4]; |  | ||||||
| 
 |  | ||||||
|             if (type.equals("private")) { |  | ||||||
|                 FileOutputStream fs = new FileOutputStream(new File("private-ips.sql")); |  | ||||||
|                 DataOutputStream out = new DataOutputStream(fs); |  | ||||||
|                 for (int i = ipS1; i <= ipE1; i++) { |  | ||||||
|                     for (int j = ipS2; j <= ipE2; j++) { |  | ||||||
|                         for (int k = ipS3; k <= ipE3; k++) { |  | ||||||
|                             for (int l = ipS4; l <= ipE4; l++) { |  | ||||||
|                                 out.writeBytes("INSERT INTO `vmops`.`dc_ip_address_alloc` (ip_address, data_center_id, pod_id) VALUES ('" + i + "." + j + "." + k + "." + |  | ||||||
|                                     l + "'," + dcId + "," + podId + ");\r\n"); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 out.writeBytes("\r\n"); |  | ||||||
|                 out.flush(); |  | ||||||
|                 out.close(); |  | ||||||
|             } else { |  | ||||||
|                 FileOutputStream fs = new FileOutputStream(new File("public-ips.sql")); |  | ||||||
|                 DataOutputStream out = new DataOutputStream(fs); |  | ||||||
|                 for (int i = ipS1; i <= ipE1; i++) { |  | ||||||
|                     for (int j = ipS2; j <= ipE2; j++) { |  | ||||||
|                         for (int k = ipS3; k <= ipE3; k++) { |  | ||||||
|                             for (int l = ipS4; l <= ipE4; l++) { |  | ||||||
|                                 out.writeBytes("INSERT INTO `vmops`.`user_ip_address` (ip_address, data_center_id) VALUES ('" + i + "." + j + "." + k + "." + l + "'," + |  | ||||||
|                                     dcId + ");\r\n"); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 out.writeBytes("\r\n"); |  | ||||||
|                 out.flush(); |  | ||||||
|                 out.close(); |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             s_logger.info("[ignored]" |  | ||||||
|                     + "error during ip insert generator: " + e.getLocalizedMessage()); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,112 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.FileReader; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| public class ProxyLoadTemp { |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(ProxyLoadTemp.class.getClass()); |  | ||||||
|     public static int numThreads = 0; |  | ||||||
|     public static ArrayList<ConsoleProxy> proxyList = new ArrayList<ConsoleProxy>(); |  | ||||||
|     public static long begin; |  | ||||||
|     public static long end; |  | ||||||
|     public static long sum = 0; |  | ||||||
| 
 |  | ||||||
|     public ProxyLoadTemp() { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         begin = System.currentTimeMillis(); |  | ||||||
|         Runtime.getRuntime().addShutdownHook(new ShutdownThread(new ProxyLoadTemp())); |  | ||||||
|         ConsoleProxy.proxyIp = "172-16-1-101"; |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             BufferedReader consoleInput = new BufferedReader(new FileReader("console.input")); |  | ||||||
|             boolean eof = false; |  | ||||||
|             s_logger.info("Started reading file"); |  | ||||||
|             while (!eof) { |  | ||||||
|                 String line = consoleInput.readLine(); |  | ||||||
|                 s_logger.info("Line is " + line); |  | ||||||
|                 if (line == null) { |  | ||||||
|                     s_logger.info("Line " + numThreads + " is null"); |  | ||||||
|                     eof = true; |  | ||||||
|                 } else { |  | ||||||
|                     String[] result = null; |  | ||||||
|                     try { |  | ||||||
|                         s_logger.info("Starting parsing line " + line); |  | ||||||
|                         result = parseLine(line, "[,]"); |  | ||||||
|                         s_logger.info("Line retrieved from the file is " + result[0] + " " + result[1] + " " + result[2]); |  | ||||||
|                         ConsoleProxy proxy = new ConsoleProxy(result[0], result[1], result[2]); |  | ||||||
|                         proxyList.add(proxy); |  | ||||||
|                         new Thread(proxy).start(); |  | ||||||
|                         numThreads++; |  | ||||||
| 
 |  | ||||||
|                     } catch (Exception ex) { |  | ||||||
|                         s_logger.warn(ex); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             s_logger.warn(e); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static class ShutdownThread extends Thread { |  | ||||||
|         ProxyLoadTemp temp; |  | ||||||
| 
 |  | ||||||
|         public ShutdownThread(ProxyLoadTemp temp) { |  | ||||||
|             this.temp = temp; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         @Override |  | ||||||
|         public void run() { |  | ||||||
|             s_logger.info("Program was running in " + numThreads + " threads"); |  | ||||||
| 
 |  | ||||||
|             for (int j = 0; j < proxyList.size(); j++) { |  | ||||||
|                 long av = 0; |  | ||||||
|                 if (proxyList.get(j).getConnectionsMade() != 0) { |  | ||||||
|                     av = proxyList.get(j).getResponseTime() / proxyList.get(j).getConnectionsMade(); |  | ||||||
|                 } |  | ||||||
|                 s_logger.info("Information for " + j + " thread: Number of requests sent is " + proxyList.get(j).getConnectionsMade() + ". Average response time is " + |  | ||||||
|                     av + " milliseconds"); |  | ||||||
|                 sum = sum + av; |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             ProxyLoadTemp.end = System.currentTimeMillis(); |  | ||||||
|             s_logger.info("Summary for all" + numThreads + " threads: Average response time is " + sum / numThreads + " milliseconds"); |  | ||||||
|             s_logger.info("Test was running for " + (ProxyLoadTemp.end - ProxyLoadTemp.begin) / 1000 + " seconds"); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static String[] parseLine(String line, String del) throws Exception { |  | ||||||
|         String del1 = del.substring(1, del.length() - 1); |  | ||||||
|         if (line.contains(del1) != true) { |  | ||||||
|             throw new Exception(); |  | ||||||
|         } else { |  | ||||||
|             String[] token = line.split(del); |  | ||||||
|             return token; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,143 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.FileInputStream; |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Properties; |  | ||||||
| import java.util.Set; |  | ||||||
| import java.util.StringTokenizer; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| public class SignEC2 { |  | ||||||
|     public static String url; |  | ||||||
|     public static String secretkey; |  | ||||||
|     public static String host; |  | ||||||
|     public static String port; |  | ||||||
|     public static String command; |  | ||||||
|     public static String accessPoint; |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(SignEC2.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         // Parameters |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-u")) { |  | ||||||
|                 url = iter.next(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         Properties prop = new Properties(); |  | ||||||
|         try { |  | ||||||
|             prop.load(new FileInputStream("../conf/tool.properties")); |  | ||||||
|         } catch (IOException ex) { |  | ||||||
|             s_logger.error("Error reading from ../conf/tool.properties", ex); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         host = prop.getProperty("host"); |  | ||||||
|         secretkey = prop.getProperty("secretkey"); |  | ||||||
|         port = prop.getProperty("port"); |  | ||||||
| 
 |  | ||||||
|         if (host == null) { |  | ||||||
|             s_logger.info("Please set host in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (port == null) { |  | ||||||
|             s_logger.info("Please set port in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (url == null) { |  | ||||||
|             s_logger.info("Please specify url with -u option"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (secretkey == null) { |  | ||||||
|             s_logger.info("Please set secretkey in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (prop.get("apikey") == null) { |  | ||||||
|             s_logger.info("Please set apikey in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (prop.get("accesspoint") == null) { |  | ||||||
|             s_logger.info("Please set apikey in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         TreeMap<String, String> param = new TreeMap<String, String>(); |  | ||||||
| 
 |  | ||||||
|         String req = "GET\n" + host + ":" + prop.getProperty("port") + "\n/" + prop.getProperty("accesspoint") + "\n"; |  | ||||||
|         String temp = ""; |  | ||||||
|         param.put("AWSAccessKeyId", prop.getProperty("apikey")); |  | ||||||
|         param.put("Expires", prop.getProperty("expires")); |  | ||||||
|         param.put("SignatureMethod", "HmacSHA1"); |  | ||||||
|         param.put("SignatureVersion", "2"); |  | ||||||
|         param.put("Version", prop.getProperty("version")); |  | ||||||
|         param.put("id", "1"); |  | ||||||
| 
 |  | ||||||
|         StringTokenizer str1 = new StringTokenizer(url, "&"); |  | ||||||
|         while (str1.hasMoreTokens()) { |  | ||||||
|             String newEl = str1.nextToken(); |  | ||||||
|             StringTokenizer str2 = new StringTokenizer(newEl, "="); |  | ||||||
|             String name = str2.nextToken(); |  | ||||||
|             String value = str2.nextToken(); |  | ||||||
|             param.put(name, value); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //sort url hash map by key |  | ||||||
|         Set c = param.entrySet(); |  | ||||||
|         Iterator it = c.iterator(); |  | ||||||
|         while (it.hasNext()) { |  | ||||||
|             Map.Entry me = (Map.Entry)it.next(); |  | ||||||
|             String key = (String)me.getKey(); |  | ||||||
|             String value = (String)me.getValue(); |  | ||||||
|             try { |  | ||||||
|                 temp = temp + key + "=" + URLEncoder.encode(value, "UTF-8") + "&"; |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error("Unable to set parameter " + value + " for the command " + param.get("command")); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|         temp = temp.substring(0, temp.length() - 1); |  | ||||||
|         String requestToSign = req + temp; |  | ||||||
|         String signature = UtilsForTest.signRequest(requestToSign, secretkey); |  | ||||||
|         String encodedSignature = ""; |  | ||||||
|         try { |  | ||||||
|             encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             s_logger.error(ex); |  | ||||||
|         } |  | ||||||
|         String url = "http://" + host + ":" + prop.getProperty("port") + "/" + prop.getProperty("accesspoint") + "?" + temp + "&Signature=" + encodedSignature; |  | ||||||
|         s_logger.info("Url is " + url); |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,112 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Set; |  | ||||||
| import java.util.StringTokenizer; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| public class SignRequest { |  | ||||||
|     public static String url; |  | ||||||
|     public static String apikey; |  | ||||||
|     public static String secretkey; |  | ||||||
|     public static String command; |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         // Parameters |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
|             if (arg.equals("-a")) { |  | ||||||
|                 apikey = iter.next(); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             if (arg.equals("-u")) { |  | ||||||
|                 url = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-s")) { |  | ||||||
|                 secretkey = iter.next(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (url == null) { |  | ||||||
|             System.out.println("Please specify url with -u option. Example: -u \"command=listZones&id=1\""); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (apikey == null) { |  | ||||||
|             System.out.println("Please specify apikey with -a option"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (secretkey == null) { |  | ||||||
|             System.out.println("Please specify secretkey with -s option"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         TreeMap<String, String> param = new TreeMap<String, String>(); |  | ||||||
| 
 |  | ||||||
|         String temp = ""; |  | ||||||
|         param.put("apikey", apikey); |  | ||||||
| 
 |  | ||||||
|         StringTokenizer str1 = new StringTokenizer(url, "&"); |  | ||||||
|         while (str1.hasMoreTokens()) { |  | ||||||
|             String newEl = str1.nextToken(); |  | ||||||
|             StringTokenizer str2 = new StringTokenizer(newEl, "="); |  | ||||||
|             String name = str2.nextToken(); |  | ||||||
|             String value = str2.nextToken(); |  | ||||||
|             param.put(name, value); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //sort url hash map by key |  | ||||||
|         Set c = param.entrySet(); |  | ||||||
|         Iterator it = c.iterator(); |  | ||||||
|         while (it.hasNext()) { |  | ||||||
|             Map.Entry me = (Map.Entry)it.next(); |  | ||||||
|             String key = (String)me.getKey(); |  | ||||||
|             String value = (String)me.getValue(); |  | ||||||
|             try { |  | ||||||
|                 temp = temp + key + "=" + URLEncoder.encode(value, "UTF-8") + "&"; |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 System.out.println("Unable to set parameter " + value + " for the command " + param.get("command")); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|         temp = temp.substring(0, temp.length() - 1); |  | ||||||
|         String requestToSign = temp.toLowerCase(); |  | ||||||
|         System.out.println("After sorting: " + requestToSign); |  | ||||||
|         String signature = UtilsForTest.signRequest(requestToSign, secretkey); |  | ||||||
|         System.out.println("After Base64 encoding: " + signature); |  | ||||||
|         String encodedSignature = ""; |  | ||||||
|         try { |  | ||||||
|             encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println(ex); |  | ||||||
|         } |  | ||||||
|         System.out.println("After UTF8 encoding: " + encodedSignature); |  | ||||||
|         String url = temp + "&signature=" + encodedSignature; |  | ||||||
|         System.out.println("After sort and add signature: " + url); |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,49 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.DataOutputStream; |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileOutputStream; |  | ||||||
| import java.util.Formatter; |  | ||||||
| 
 |  | ||||||
| public class SqlDataGenerator { |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         try { |  | ||||||
|             FileOutputStream fs = new FileOutputStream(new File("out.txt")); |  | ||||||
| 
 |  | ||||||
|             DataOutputStream out = new DataOutputStream(fs); |  | ||||||
| 
 |  | ||||||
|             for (int i = 20; i < 171; i++) { |  | ||||||
|                 out.writeBytes("INSERT INTO `vmops`.`dc_ip_address_alloc` (ip_address, data_center_id, pod_id) VALUES ('192.168.2." + i + "',1,1);\r\n"); |  | ||||||
|             } |  | ||||||
|             out.writeBytes("\r\n"); |  | ||||||
|             for (int i = 1; i < 10000; i++) { |  | ||||||
|                 StringBuilder imagePath = new StringBuilder(); |  | ||||||
|                 Formatter formatter = new Formatter(imagePath); |  | ||||||
|                 formatter.format("%04x", i); |  | ||||||
|                 out.writeBytes("INSERT INTO `vmops`.`dc_vnet_alloc` (vnet, data_center_id) VALUES ('" + imagePath.toString() + "',1);\r\n"); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             out.flush(); |  | ||||||
|             out.close(); |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             s_logger.info("[ignored]" |  | ||||||
|                     + "error during sql generation: " + e.getLocalizedMessage()); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,198 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.FileInputStream; |  | ||||||
| import java.io.FileReader; |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.net.URLEncoder; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import java.util.Properties; |  | ||||||
| import java.util.Set; |  | ||||||
| import java.util.StringTokenizer; |  | ||||||
| import java.util.TreeMap; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| public class SubmitCert { |  | ||||||
|     public static String url = "Action=SetCertificate"; |  | ||||||
|     public static String secretKey; |  | ||||||
|     public static String apiKey; |  | ||||||
|     public static String host; |  | ||||||
|     public static String port; |  | ||||||
|     public static String command; |  | ||||||
|     public static String accessPoint; |  | ||||||
|     public static String signatureMethod; |  | ||||||
|     public static String fileName = "tool.properties"; |  | ||||||
|     public static String certFileName; |  | ||||||
|     public static String cert; |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(SubmitCert.class.getName()); |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         // Parameters |  | ||||||
|         List<String> argsList = Arrays.asList(args); |  | ||||||
|         Iterator<String> iter = argsList.iterator(); |  | ||||||
|         while (iter.hasNext()) { |  | ||||||
|             String arg = iter.next(); |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-c")) { |  | ||||||
|                 certFileName = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-s")) { |  | ||||||
|                 secretKey = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-a")) { |  | ||||||
|                 apiKey = iter.next(); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (arg.equals("-action")) { |  | ||||||
|                 url = "Action=" + iter.next(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         Properties prop = new Properties(); |  | ||||||
|         try { |  | ||||||
|             prop.load(new FileInputStream("conf/tool.properties")); |  | ||||||
|         } catch (IOException ex) { |  | ||||||
|             s_logger.error("Error reading from conf/tool.properties", ex); |  | ||||||
|             System.exit(2); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         host = prop.getProperty("host"); |  | ||||||
|         port = prop.getProperty("port"); |  | ||||||
| 
 |  | ||||||
|         if (url.equals("Action=SetCertificate") && certFileName == null) { |  | ||||||
|             s_logger.error("Please set path to certificate (including file name) with -c option"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (secretKey == null) { |  | ||||||
|             s_logger.error("Please set secretkey  with -s option"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (apiKey == null) { |  | ||||||
|             s_logger.error("Please set apikey with -a option"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (host == null) { |  | ||||||
|             s_logger.error("Please set host in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (port == null) { |  | ||||||
|             s_logger.error("Please set port in tool.properties file"); |  | ||||||
|             System.exit(1); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         TreeMap<String, String> param = new TreeMap<String, String>(); |  | ||||||
| 
 |  | ||||||
|         String req = "GET\n" + host + ":" + prop.getProperty("port") + "\n/" + prop.getProperty("accesspoint") + "\n"; |  | ||||||
|         String temp = ""; |  | ||||||
| 
 |  | ||||||
|         if (certFileName != null) { |  | ||||||
|             cert = readCert(certFileName); |  | ||||||
|             param.put("cert", cert); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         param.put("AWSAccessKeyId", apiKey); |  | ||||||
|         param.put("Expires", prop.getProperty("expires")); |  | ||||||
|         param.put("SignatureMethod", prop.getProperty("signaturemethod")); |  | ||||||
|         param.put("SignatureVersion", "2"); |  | ||||||
|         param.put("Version", prop.getProperty("version")); |  | ||||||
| 
 |  | ||||||
|         StringTokenizer str1 = new StringTokenizer(url, "&"); |  | ||||||
|         while (str1.hasMoreTokens()) { |  | ||||||
|             String newEl = str1.nextToken(); |  | ||||||
|             StringTokenizer str2 = new StringTokenizer(newEl, "="); |  | ||||||
|             String name = str2.nextToken(); |  | ||||||
|             String value = str2.nextToken(); |  | ||||||
|             param.put(name, value); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //sort url hash map by key |  | ||||||
|         Set c = param.entrySet(); |  | ||||||
|         Iterator it = c.iterator(); |  | ||||||
|         while (it.hasNext()) { |  | ||||||
|             Map.Entry me = (Map.Entry)it.next(); |  | ||||||
|             String key = (String)me.getKey(); |  | ||||||
|             String value = (String)me.getValue(); |  | ||||||
|             try { |  | ||||||
|                 temp = temp + key + "=" + URLEncoder.encode(value, "UTF-8") + "&"; |  | ||||||
|             } catch (Exception ex) { |  | ||||||
|                 s_logger.error("Unable to set parameter " + value + " for the command " + param.get("command"), ex); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|         temp = temp.substring(0, temp.length() - 1); |  | ||||||
|         String requestToSign = req + temp; |  | ||||||
|         String signature = UtilsForTest.signRequest(requestToSign, secretKey); |  | ||||||
|         String encodedSignature = ""; |  | ||||||
|         try { |  | ||||||
|             encodedSignature = URLEncoder.encode(signature, "UTF-8"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             ex.printStackTrace(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         String url = "http://" + host + ":" + prop.getProperty("port") + "/" + prop.getProperty("accesspoint") + "?" + temp + "&Signature=" + encodedSignature; |  | ||||||
|         s_logger.info("Sending request with url:  " + url + "\n"); |  | ||||||
|         sendRequest(url); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static String readCert(String filePath) { |  | ||||||
|         try { |  | ||||||
|             StringBuffer fileData = new StringBuffer(1000); |  | ||||||
|             BufferedReader reader = new BufferedReader(new FileReader(filePath)); |  | ||||||
|             char[] buf = new char[1024]; |  | ||||||
|             int numRead = 0; |  | ||||||
|             while ((numRead = reader.read(buf)) != -1) { |  | ||||||
|                 String readData = String.valueOf(buf, 0, numRead); |  | ||||||
|                 fileData.append(readData); |  | ||||||
|                 buf = new char[1024]; |  | ||||||
|             } |  | ||||||
|             reader.close(); |  | ||||||
|             return fileData.toString(); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             s_logger.error(ex); |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static void sendRequest(String url) { |  | ||||||
|         try { |  | ||||||
|             HttpClient client = new HttpClient(); |  | ||||||
|             HttpMethod method = new GetMethod(url); |  | ||||||
|             int responseCode = client.executeMethod(method); |  | ||||||
|             String is = method.getResponseBodyAsString(); |  | ||||||
|             s_logger.info("Response code " + responseCode + ": " + is); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             ex.printStackTrace(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,385 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Random; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.httpclient.HttpClient; |  | ||||||
| import org.apache.commons.httpclient.HttpMethod; |  | ||||||
| import org.apache.commons.httpclient.methods.GetMethod; |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| import org.apache.log4j.NDC; |  | ||||||
| 
 |  | ||||||
| import com.trilead.ssh2.ChannelCondition; |  | ||||||
| import com.trilead.ssh2.Connection; |  | ||||||
| import com.trilead.ssh2.SCPClient; |  | ||||||
| import com.trilead.ssh2.Session; |  | ||||||
| 
 |  | ||||||
| public class TestClient { |  | ||||||
|     private static long sleepTime = 180000L; // default 0 |  | ||||||
|     private static boolean cleanUp = true; |  | ||||||
|     public static final Logger s_logger = Logger.getLogger(TestClient.class.getName()); |  | ||||||
|     private static boolean repeat = true; |  | ||||||
|     private static int numOfUsers = 0; |  | ||||||
|     private static String[] users = null; |  | ||||||
|     private static boolean internet = true; |  | ||||||
| 
 |  | ||||||
|     private static final int MAX_RETRY_LINUX = 5; |  | ||||||
|     private static final int MAX_RETRY_WIN = 10; |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         String host = "http://localhost"; |  | ||||||
|         String port = "8080"; |  | ||||||
|         String testUrl = "/client/test"; |  | ||||||
|         int numThreads = 1; |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             // Parameters |  | ||||||
|             List<String> argsList = Arrays.asList(args); |  | ||||||
|             Iterator<String> iter = argsList.iterator(); |  | ||||||
|             while (iter.hasNext()) { |  | ||||||
|                 String arg = iter.next(); |  | ||||||
|                 // host |  | ||||||
|                 if (arg.equals("-h")) { |  | ||||||
|                     host = "http://" + iter.next(); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-p")) { |  | ||||||
|                     port = iter.next(); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-t")) { |  | ||||||
|                     numThreads = Integer.parseInt(iter.next()); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-s")) { |  | ||||||
|                     sleepTime = Long.parseLong(iter.next()); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-c")) { |  | ||||||
|                     cleanUp = Boolean.parseBoolean(iter.next()); |  | ||||||
|                     if (!cleanUp) |  | ||||||
|                         sleepTime = 0L; // no need to wait if we don't ever cleanup |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-r")) { |  | ||||||
|                     repeat = Boolean.parseBoolean(iter.next()); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-u")) { |  | ||||||
|                     numOfUsers = Integer.parseInt(iter.next()); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (arg.equals("-i")) { |  | ||||||
|                     internet = Boolean.parseBoolean(iter.next()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             final String server = host + ":" + port + testUrl; |  | ||||||
|             s_logger.info("Starting test against server: " + server + " with " + numThreads + " thread(s)"); |  | ||||||
|             if (cleanUp) |  | ||||||
|                 s_logger.info("Clean up is enabled, each test will wait " + sleepTime + " ms before cleaning up"); |  | ||||||
| 
 |  | ||||||
|             if (numOfUsers > 0) { |  | ||||||
|                 s_logger.info("Pre-generating users for test of size : " + numOfUsers); |  | ||||||
|                 users = new String[numOfUsers]; |  | ||||||
|                 Random ran = new Random(); |  | ||||||
|                 for (int i = 0; i < numOfUsers; i++) { |  | ||||||
|                     users[i] = Math.abs(ran.nextInt()) + "-user"; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             for (int i = 0; i < numThreads; i++) { |  | ||||||
|                 new Thread(new Runnable() { |  | ||||||
|                     @Override |  | ||||||
|                     public void run() { |  | ||||||
|                         do { |  | ||||||
|                             String username = null; |  | ||||||
|                             try { |  | ||||||
|                                 long now = System.currentTimeMillis(); |  | ||||||
|                                 Random ran = new Random(); |  | ||||||
|                                 if (users != null) { |  | ||||||
|                                     username = users[Math.abs(ran.nextInt()) % numOfUsers]; |  | ||||||
|                                 } else { |  | ||||||
|                                     username = Math.abs(ran.nextInt()) + "-user"; |  | ||||||
|                                 } |  | ||||||
|                                 NDC.push(username); |  | ||||||
| 
 |  | ||||||
|                                 String url = server + "?email=" + username + "&password=" + username + "&command=deploy"; |  | ||||||
|                                 s_logger.info("Launching test for user: " + username + " with url: " + url); |  | ||||||
|                                 HttpClient client = new HttpClient(); |  | ||||||
|                                 HttpMethod method = new GetMethod(url); |  | ||||||
|                                 int responseCode = client.executeMethod(method); |  | ||||||
|                                 boolean success = false; |  | ||||||
|                                 String reason = null; |  | ||||||
|                                 if (responseCode == 200) { |  | ||||||
|                                     if (internet) { |  | ||||||
|                                         s_logger.info("Deploy successful...waiting 5 minute before SSH tests"); |  | ||||||
|                                         Thread.sleep(300000L);  // Wait 60 seconds so the linux VM can boot up. |  | ||||||
| 
 |  | ||||||
|                                         s_logger.info("Begin Linux SSH test"); |  | ||||||
|                                         reason = sshTest(method.getResponseHeader("linuxIP").getValue()); |  | ||||||
| 
 |  | ||||||
|                                         if (reason == null) { |  | ||||||
|                                             s_logger.info("Linux SSH test successful"); |  | ||||||
|                                             s_logger.info("Begin Windows SSH test"); |  | ||||||
|                                             reason = sshWinTest(method.getResponseHeader("windowsIP").getValue()); |  | ||||||
|                                         } |  | ||||||
|                                     } |  | ||||||
|                                     if (reason == null) { |  | ||||||
|                                         if (internet) { |  | ||||||
|                                             s_logger.info("Windows SSH test successful"); |  | ||||||
|                                         } else { |  | ||||||
|                                             s_logger.info("deploy test successful....now cleaning up"); |  | ||||||
|                                             if (cleanUp) { |  | ||||||
|                                                 s_logger.info("Waiting " + sleepTime + " ms before cleaning up vms"); |  | ||||||
|                                                 Thread.sleep(sleepTime); |  | ||||||
|                                             } else { |  | ||||||
|                                                 success = true; |  | ||||||
|                                             } |  | ||||||
|                                         } |  | ||||||
|                                         if (users == null) { |  | ||||||
|                                             s_logger.info("Sending cleanup command"); |  | ||||||
|                                             url = server + "?email=" + username + "&password=" + username + "&command=cleanup"; |  | ||||||
|                                         } else { |  | ||||||
|                                             s_logger.info("Sending stop DomR / destroy VM command"); |  | ||||||
|                                             url = server + "?email=" + username + "&password=" + username + "&command=stopDomR"; |  | ||||||
|                                         } |  | ||||||
|                                         method = new GetMethod(url); |  | ||||||
|                                         responseCode = client.executeMethod(method); |  | ||||||
|                                         if (responseCode == 200) { |  | ||||||
|                                             success = true; |  | ||||||
|                                         } else { |  | ||||||
|                                             reason = method.getStatusText(); |  | ||||||
|                                         } |  | ||||||
|                                     } else { |  | ||||||
|                                         // Just stop but don't destroy the VMs/Routers |  | ||||||
|                                         s_logger.info("SSH test failed with reason '" + reason + "', stopping VMs"); |  | ||||||
|                                         url = server + "?email=" + username + "&password=" + username + "&command=stop"; |  | ||||||
|                                         responseCode = client.executeMethod(new GetMethod(url)); |  | ||||||
|                                     } |  | ||||||
|                                 } else { |  | ||||||
|                                     // Just stop but don't destroy the VMs/Routers |  | ||||||
|                                     reason = method.getStatusText(); |  | ||||||
|                                     s_logger.info("Deploy test failed with reason '" + reason + "', stopping VMs"); |  | ||||||
|                                     url = server + "?email=" + username + "&password=" + username + "&command=stop"; |  | ||||||
|                                     client.executeMethod(new GetMethod(url)); |  | ||||||
|                                 } |  | ||||||
| 
 |  | ||||||
|                                 if (success) { |  | ||||||
|                                     s_logger.info("***** Completed test for user : " + username + " in " + ((System.currentTimeMillis() - now) / 1000L) + " seconds"); |  | ||||||
|                                 } else { |  | ||||||
|                                     s_logger.info("##### FAILED test for user : " + username + " in " + ((System.currentTimeMillis() - now) / 1000L) + |  | ||||||
|                                         " seconds with reason : " + reason); |  | ||||||
|                                 } |  | ||||||
|                             } catch (Exception e) { |  | ||||||
|                                 s_logger.warn("Error in thread", e); |  | ||||||
|                                 try { |  | ||||||
|                                     HttpClient client = new HttpClient(); |  | ||||||
|                                     String url = server + "?email=" + username + "&password=" + username + "&command=stop"; |  | ||||||
|                                     client.executeMethod(new GetMethod(url)); |  | ||||||
|                                 } catch (Exception e1) { |  | ||||||
|                                     s_logger.info("[ignored]" |  | ||||||
|                                             + "error while executing last resort stop attempt: " + e1.getLocalizedMessage()); |  | ||||||
|                                 } |  | ||||||
|                             } finally { |  | ||||||
|                                 NDC.clear(); |  | ||||||
|                             } |  | ||||||
|                         } while (repeat); |  | ||||||
|                     } |  | ||||||
|                 }).start(); |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             s_logger.error(e); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private static String sshWinTest(String host) { |  | ||||||
|         if (host == null) { |  | ||||||
|             s_logger.info("Did not receive a host back from test, ignoring win ssh test"); |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // We will retry 5 times before quitting |  | ||||||
|         int retry = 0; |  | ||||||
| 
 |  | ||||||
|         while (true) { |  | ||||||
|             try { |  | ||||||
|                 if (retry > 0) { |  | ||||||
|                     s_logger.info("Retry attempt : " + retry + " ...sleeping 300 seconds before next attempt"); |  | ||||||
|                     Thread.sleep(300000); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 s_logger.info("Attempting to SSH into windows host " + host + " with retry attempt: " + retry); |  | ||||||
| 
 |  | ||||||
|                 Connection conn = new Connection(host); |  | ||||||
|                 conn.connect(null, 60000, 60000); |  | ||||||
| 
 |  | ||||||
|                 s_logger.info("SSHed successfully into windows host " + host); |  | ||||||
|                 boolean success = false; |  | ||||||
|                 boolean isAuthenticated = conn.authenticateWithPassword("vmops", "vmops"); |  | ||||||
|                 if (isAuthenticated == false) { |  | ||||||
|                     return "Authentication failed"; |  | ||||||
|                 } |  | ||||||
|                 SCPClient scp = new SCPClient(conn); |  | ||||||
| 
 |  | ||||||
|                 scp.put("wget.exe", ""); |  | ||||||
| 
 |  | ||||||
|                 Session sess = conn.openSession(); |  | ||||||
|                 s_logger.info("Executing : wget http://172.16.0.220/dump.bin"); |  | ||||||
|                 sess.execCommand("wget http://172.16.0.220/dump.bin && dir dump.bin"); |  | ||||||
| 
 |  | ||||||
|                 InputStream stdout = sess.getStdout(); |  | ||||||
|                 InputStream stderr = sess.getStderr(); |  | ||||||
| 
 |  | ||||||
|                 byte[] buffer = new byte[8192]; |  | ||||||
|                 while (true) { |  | ||||||
|                     if ((stdout.available() == 0) && (stderr.available() == 0)) { |  | ||||||
|                         int conditions = sess.waitForCondition(ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA | ChannelCondition.EOF, 120000); |  | ||||||
| 
 |  | ||||||
|                         if ((conditions & ChannelCondition.TIMEOUT) != 0) { |  | ||||||
|                             s_logger.info("Timeout while waiting for data from peer."); |  | ||||||
|                             return null; |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         if ((conditions & ChannelCondition.EOF) != 0) { |  | ||||||
|                             if ((conditions & (ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA)) == 0) { |  | ||||||
|                                 break; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     while (stdout.available() > 0) { |  | ||||||
|                         success = true; |  | ||||||
|                         int len = stdout.read(buffer); |  | ||||||
|                         if (len > 0) // this check is somewhat paranoid |  | ||||||
|                             s_logger.info(new String(buffer, 0, len)); |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     while (stderr.available() > 0) { |  | ||||||
|                         int len = stderr.read(buffer); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 sess.close(); |  | ||||||
|                 conn.close(); |  | ||||||
| 
 |  | ||||||
|                 if (success) { |  | ||||||
|                     return null; |  | ||||||
|                 } else { |  | ||||||
|                     retry++; |  | ||||||
|                     if (retry == MAX_RETRY_WIN) { |  | ||||||
|                         return "SSH Windows Network test fail"; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } catch (Exception e) { |  | ||||||
|                 retry++; |  | ||||||
|                 if (retry == MAX_RETRY_WIN) { |  | ||||||
|                     return "SSH Windows Network test fail with error " + e.getMessage(); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private static String sshTest(String host) { |  | ||||||
|         if (host == null) { |  | ||||||
|             s_logger.info("Did not receive a host back from test, ignoring ssh test"); |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // We will retry 5 times before quitting |  | ||||||
|         int retry = 0; |  | ||||||
| 
 |  | ||||||
|         while (true) { |  | ||||||
|             try { |  | ||||||
|                 if (retry > 0) { |  | ||||||
|                     s_logger.info("Retry attempt : " + retry + " ...sleeping 120 seconds before next attempt"); |  | ||||||
|                     Thread.sleep(120000); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 s_logger.info("Attempting to SSH into linux host " + host + " with retry attempt: " + retry); |  | ||||||
| 
 |  | ||||||
|                 Connection conn = new Connection(host); |  | ||||||
|                 conn.connect(null, 60000, 60000); |  | ||||||
| 
 |  | ||||||
|                 s_logger.info("SSHed successfully into linux host " + host); |  | ||||||
| 
 |  | ||||||
|                 boolean isAuthenticated = conn.authenticateWithPassword("root", "password"); |  | ||||||
| 
 |  | ||||||
|                 if (isAuthenticated == false) { |  | ||||||
|                     return "Authentication failed"; |  | ||||||
|                 } |  | ||||||
|                 boolean success = false; |  | ||||||
|                 Session sess = conn.openSession(); |  | ||||||
|                 s_logger.info("Executing : wget http://172.16.0.220/dump.bin"); |  | ||||||
|                 sess.execCommand("wget http://172.16.0.220/dump.bin && ls -al dump.bin"); |  | ||||||
| 
 |  | ||||||
|                 InputStream stdout = sess.getStdout(); |  | ||||||
|                 InputStream stderr = sess.getStderr(); |  | ||||||
| 
 |  | ||||||
|                 byte[] buffer = new byte[8192]; |  | ||||||
|                 while (true) { |  | ||||||
|                     if ((stdout.available() == 0) && (stderr.available() == 0)) { |  | ||||||
|                         int conditions = sess.waitForCondition(ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA | ChannelCondition.EOF, 120000); |  | ||||||
| 
 |  | ||||||
|                         if ((conditions & ChannelCondition.TIMEOUT) != 0) { |  | ||||||
|                             s_logger.info("Timeout while waiting for data from peer."); |  | ||||||
|                             return null; |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         if ((conditions & ChannelCondition.EOF) != 0) { |  | ||||||
|                             if ((conditions & (ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA)) == 0) { |  | ||||||
|                                 break; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     while (stdout.available() > 0) { |  | ||||||
|                         success = true; |  | ||||||
|                         int len = stdout.read(buffer); |  | ||||||
|                         if (len > 0) // this check is somewhat paranoid |  | ||||||
|                             s_logger.info(new String(buffer, 0, len)); |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     while (stderr.available() > 0) { |  | ||||||
|                         int len = stderr.read(buffer); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 sess.close(); |  | ||||||
|                 conn.close(); |  | ||||||
| 
 |  | ||||||
|                 if (success) { |  | ||||||
|                     return null; |  | ||||||
|                 } else { |  | ||||||
|                     retry++; |  | ||||||
|                     if (retry == MAX_RETRY_LINUX) { |  | ||||||
|                         return "SSH Linux Network test fail"; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } catch (Exception e) { |  | ||||||
|                 retry++; |  | ||||||
|                 if (retry == MAX_RETRY_LINUX) { |  | ||||||
|                     return "SSH Linux Network test fail with error " + e.getMessage(); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,210 +0,0 @@ | |||||||
| // 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 com.cloud.test.utils; |  | ||||||
| 
 |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.math.BigInteger; |  | ||||||
| import java.security.MessageDigest; |  | ||||||
| import java.security.NoSuchAlgorithmException; |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.HashMap; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| 
 |  | ||||||
| import javax.crypto.Mac; |  | ||||||
| import javax.crypto.spec.SecretKeySpec; |  | ||||||
| import javax.xml.parsers.DocumentBuilder; |  | ||||||
| import javax.xml.parsers.DocumentBuilderFactory; |  | ||||||
| 
 |  | ||||||
| import org.apache.commons.codec.binary.Base64; |  | ||||||
| import org.w3c.dom.Document; |  | ||||||
| import org.w3c.dom.Element; |  | ||||||
| import org.w3c.dom.Node; |  | ||||||
| import org.w3c.dom.NodeList; |  | ||||||
| 
 |  | ||||||
| import com.cloud.utils.exception.CloudRuntimeException; |  | ||||||
| 
 |  | ||||||
| public class UtilsForTest { |  | ||||||
| 
 |  | ||||||
|     private static DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |  | ||||||
| 
 |  | ||||||
|     public static boolean verifyTags(Map<String, String> params) { |  | ||||||
|         boolean result = true; |  | ||||||
|         for (String value : params.keySet()) { |  | ||||||
|             if (params.get(value) == null) { |  | ||||||
|                 result = false; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static boolean verifyTagValues(Map<String, String> params, Map<String, String> pattern) { |  | ||||||
|         boolean result = true; |  | ||||||
| 
 |  | ||||||
|         if (pattern != null) { |  | ||||||
|             for (String value : pattern.keySet()) { |  | ||||||
|                 if (!pattern.get(value).equals(params.get(value))) { |  | ||||||
|                     result = false; |  | ||||||
|                     System.out.println("Tag " + value + " has " + params.get(value) + " while expected value is: " + pattern.get(value)); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static Map<String, String> parseXML(InputStream is, String[] tagNames) { |  | ||||||
|         Map<String, String> returnValues = new HashMap<String, String>(); |  | ||||||
|         try { |  | ||||||
|             DocumentBuilder docBuilder = factory.newDocumentBuilder(); |  | ||||||
|             Document doc = docBuilder.parse(is); |  | ||||||
|             Element rootElement = doc.getDocumentElement(); |  | ||||||
| 
 |  | ||||||
|             for (int i = 0; i < tagNames.length; i++) { |  | ||||||
|                 NodeList targetNodes = rootElement.getElementsByTagName(tagNames[i]); |  | ||||||
|                 if (targetNodes.getLength() <= 0) { |  | ||||||
|                     System.out.println("no " + tagNames[i] + " tag in the response"); |  | ||||||
|                     returnValues.put(tagNames[i], null); |  | ||||||
|                 } else { |  | ||||||
|                     returnValues.put(tagNames[i], targetNodes.item(0).getTextContent()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println("error processing XML"); |  | ||||||
|             ex.printStackTrace(); |  | ||||||
|         } |  | ||||||
|         return returnValues; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static ArrayList<HashMap<String, String>> parseMulXML(InputStream is, String[] tagNames) { |  | ||||||
|         ArrayList<HashMap<String, String>> returnValues = new ArrayList<HashMap<String, String>>(); |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             DocumentBuilder docBuilder = factory.newDocumentBuilder(); |  | ||||||
|             Document doc = docBuilder.parse(is); |  | ||||||
|             Element rootElement = doc.getDocumentElement(); |  | ||||||
|             for (int i = 0; i < tagNames.length; i++) { |  | ||||||
|                 NodeList targetNodes = rootElement.getElementsByTagName(tagNames[i]); |  | ||||||
|                 if (targetNodes.getLength() <= 0) { |  | ||||||
|                     System.out.println("no " + tagNames[i] + " tag in XML response...returning null"); |  | ||||||
|                 } else { |  | ||||||
|                     for (int j = 0; j < targetNodes.getLength(); j++) { |  | ||||||
|                         HashMap<String, String> valueList = new HashMap<String, String>(); |  | ||||||
|                         Node node = targetNodes.item(j); |  | ||||||
|                         //parse child nodes |  | ||||||
|                         NodeList child = node.getChildNodes(); |  | ||||||
|                         for (int c = 0; c < node.getChildNodes().getLength(); c++) { |  | ||||||
|                             child.item(c).getNodeName(); |  | ||||||
|                             valueList.put(child.item(c).getNodeName(), child.item(c).getTextContent()); |  | ||||||
|                         } |  | ||||||
|                         returnValues.add(valueList); |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println(ex); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return returnValues; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static String createMD5String(String password) { |  | ||||||
|         MessageDigest md5; |  | ||||||
|         try { |  | ||||||
|             md5 = MessageDigest.getInstance("MD5"); |  | ||||||
|         } catch (NoSuchAlgorithmException e) { |  | ||||||
|             throw new CloudRuntimeException("Error", e); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         md5.reset(); |  | ||||||
|         BigInteger pwInt = new BigInteger(1, md5.digest(password.getBytes())); |  | ||||||
| 
 |  | ||||||
|         // make sure our MD5 hash value is 32 digits long... |  | ||||||
|         StringBuffer sb = new StringBuffer(); |  | ||||||
|         String pwStr = pwInt.toString(16); |  | ||||||
|         int padding = 32 - pwStr.length(); |  | ||||||
|         for (int i = 0; i < padding; i++) { |  | ||||||
|             sb.append('0'); |  | ||||||
|         } |  | ||||||
|         sb.append(pwStr); |  | ||||||
|         return sb.toString(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static Map<String, String> getSingleValueFromXML(InputStream is, String[] tagNames) { |  | ||||||
|         Map<String, String> returnValues = new HashMap<String, String>(); |  | ||||||
|         try { |  | ||||||
|             DocumentBuilder docBuilder = factory.newDocumentBuilder(); |  | ||||||
|             Document doc = docBuilder.parse(is); |  | ||||||
|             Element rootElement = doc.getDocumentElement(); |  | ||||||
| 
 |  | ||||||
|             for (int i = 0; i < tagNames.length; i++) { |  | ||||||
|                 NodeList targetNodes = rootElement.getElementsByTagName(tagNames[i]); |  | ||||||
|                 if (targetNodes.getLength() <= 0) { |  | ||||||
|                     System.out.println("no " + tagNames[i] + " tag in XML response...returning null"); |  | ||||||
|                 } else { |  | ||||||
|                     returnValues.put(tagNames[i], targetNodes.item(0).getTextContent()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println("error processing XML"); |  | ||||||
|             ex.printStackTrace(); |  | ||||||
|         } |  | ||||||
|         return returnValues; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static Map<String, List<String>> getMultipleValuesFromXML(InputStream is, String[] tagNames) { |  | ||||||
|         Map<String, List<String>> returnValues = new HashMap<String, List<String>>(); |  | ||||||
|         try { |  | ||||||
|             DocumentBuilder docBuilder = factory.newDocumentBuilder(); |  | ||||||
|             Document doc = docBuilder.parse(is); |  | ||||||
|             Element rootElement = doc.getDocumentElement(); |  | ||||||
|             for (int i = 0; i < tagNames.length; i++) { |  | ||||||
|                 NodeList targetNodes = rootElement.getElementsByTagName(tagNames[i]); |  | ||||||
|                 if (targetNodes.getLength() <= 0) { |  | ||||||
|                     System.out.println("no " + tagNames[i] + " tag in XML response...returning null"); |  | ||||||
|                 } else { |  | ||||||
|                     List<String> valueList = new ArrayList<String>(); |  | ||||||
|                     for (int j = 0; j < targetNodes.getLength(); j++) { |  | ||||||
|                         Node node = targetNodes.item(j); |  | ||||||
|                         valueList.add(node.getTextContent()); |  | ||||||
|                     } |  | ||||||
|                     returnValues.put(tagNames[i], valueList); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println(ex); |  | ||||||
|         } |  | ||||||
|         return returnValues; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static String signRequest(String request, String key) { |  | ||||||
|         try { |  | ||||||
|             Mac mac = Mac.getInstance("HmacSHA1"); |  | ||||||
|             SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "HmacSHA1"); |  | ||||||
|             mac.init(keySpec); |  | ||||||
|             mac.update(request.getBytes()); |  | ||||||
|             byte[] encryptedBytes = mac.doFinal(); |  | ||||||
|             //System.out.println("HmacSHA1 hash: " + encryptedBytes); |  | ||||||
|             return Base64.encodeBase64String(encryptedBytes); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             System.out.println("unable to sign request"); |  | ||||||
|             ex.printStackTrace(); |  | ||||||
|         } |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user