/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package org.glassfish.tests.paas.basicdbinitsql; import junit.framework.Assert; import org.glassfish.api.ActionReport; import org.glassfish.api.admin.ParameterMap; import org.glassfish.embeddable.*; import org.glassfish.internal.api.Globals; import org.junit.Test; import org.glassfish.hk2.api.ServiceLocator; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.URL; import java.net.URLConnection; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Shalini M */ public class BasicDBInitSqlTest { @Test public void test() throws Exception { // 1. Bootstrap GlassFish DAS in embedded mode. GlassFishProperties glassFishProperties = new GlassFishProperties(); glassFishProperties.setInstanceRoot(System.getenv("S1AS_HOME") + "/domains/domain1"); glassFishProperties.setConfigFileReadOnly(false); GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish( glassFishProperties); PrintStream sysout = System.out; glassfish.start(); System.setOut(sysout); // 2. Deploy the PaaS application. File archive = new File(System.getProperty("basedir") + "/target/basic_db_initsql_paas_sample.war"); // TODO :: use // mvn apis to // get the // archive // location. Assert.assertTrue(archive.exists()); Deployer deployer = null; String appName = null; try { deployer = glassfish.getDeployer(); appName = deployer.deploy(archive); System.err.println("Deployed [" + appName + "]"); Assert.assertNotNull(appName); CommandRunner commandRunner = glassfish.getCommandRunner(); CommandResult result = commandRunner.run("list-services"); System.out.println("\nlist-services command output [ " + result.getOutput() + "]"); // 3. Access the app to make sure PaaS app is correctly provisioned. String HTTP_PORT = (System.getProperty("http.port") != null) ? System .getProperty("http.port") : "28080"; String instanceIP = getLBIPAddress(glassfish); get("http://" + instanceIP + ":" + HTTP_PORT + "/basic_db_initsql_paas_sample/BasicDBInitSqlServlet", "Customer ID"); testListServices(); // 4. Undeploy the PaaS application . } finally { if (appName != null) { deployer.undeploy(appName); System.out.println("Destroying the resources created"); System.err.println("Undeployed [" + appName + "]"); try { boolean undeployClean = false; CommandResult commandResult = glassfish.getCommandRunner() .run("list-services"); if (commandResult.getOutput().contains("Nothing to list.")) { undeployClean = true; } Assert.assertTrue(undeployClean); } catch (Exception e) { System.err .println("Couldn't varify whether undeploy succeeded"); } } } } private void get(String urlStr, String result) throws Exception { URL url = new URL(urlStr); URLConnection yc = url.openConnection(); System.out.println("\nURLConnection [" + yc + "] : "); BufferedReader in = new BufferedReader(new InputStreamReader( yc.getInputStream())); String line = null; boolean found = false; while ((line = in.readLine()) != null) { System.out.println(line); if (line.indexOf(result) != -1) { found = true; } } Assert.assertTrue(found); System.out.println("\n***** SUCCESS **** Found [" + result + "] in the response.*****\n"); } private String getLBIPAddress(GlassFish glassfish) { String lbIP = null; String IPAddressPattern = "IP-ADDRESS\\s*\n*(.*)\\s*\n(([01]?\\d*|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([0-9]?\\d\\d?|2[0-4]\\d|25[0-5]))"; try { CommandRunner commandRunner = glassfish.getCommandRunner(); String result = commandRunner .run("list-services", "--type", "LB", "--output", "IP-ADDRESS").getOutput().toString(); if (result.contains("Nothing to list.")) { result = commandRunner .run("list-services", "--type", "JavaEE", "--output", "IP-ADDRESS").getOutput().toString(); Pattern p = Pattern.compile(IPAddressPattern); Matcher m = p.matcher(result); if (m.find()) { lbIP = m.group(2); } else { lbIP = "localhost"; } } else { Pattern p = Pattern.compile(IPAddressPattern); Matcher m = p.matcher(result); if (m.find()) { lbIP = m.group(2); } else { lbIP = "localhost"; } } } catch (Exception e) { System.out.println("Regex has thrown an exception " + e.getMessage()); return "localhost"; } return lbIP; } private void testListServices() { ServiceLocator habitat = Globals.getDefaultHabitat(); org.glassfish.api.admin.CommandRunner commandRunner = habitat.getService(org.glassfish.api.admin.CommandRunner.class); //Testing for the '--output' option of lst-services sub-commands { List<String> outputOptions = new ArrayList<String>(); outputOptions.add("SERVICE-NAME"); outputOptions.add("VM-ID"); outputOptions.add("SERVER-TYPE"); ActionReport report = habitat.getService(ActionReport.class); org.glassfish.api.admin.CommandRunner.CommandInvocation invocation = commandRunner.getCommandInvocation("list-services", report); ParameterMap parameterMap = new ParameterMap(); parameterMap.add("output", "service-name,vm-id,server-type"); invocation.parameters(parameterMap).execute(); List<Map<String, String>> list = (List<Map<String, String>>) report.getExtraProperties().get("list"); Map<String, String> map = list.get(0); Set set = map.keySet(); outputOptions.removeAll(set); boolean isEmpty = outputOptions.isEmpty(); System.out.println("list-services --output option test passed:: " + isEmpty); Assert.assertTrue(isEmpty); } //Testing for the '--key' option of lst-services sub-commands { String key = "VM-ID"; ActionReport report = habitat.getService(ActionReport.class); org.glassfish.api.admin.CommandRunner.CommandInvocation invocation = commandRunner.getCommandInvocation("list-services", report); ParameterMap parameterMap = new ParameterMap(); parameterMap.add("key", key); parameterMap.add("output", key); invocation.parameters(parameterMap).execute(); List<Map<String, String>> list = (List<Map<String, String>>) report.getExtraProperties().get("list"); ListIterator listIterator = list.listIterator(); List<String> valueList = new ArrayList<String>(); Map<String, String> map; while (listIterator.hasNext()) { map = (Map<String, String>) listIterator.next(); valueList.add(map.get(key)); } boolean isSorted = isSortedList(valueList); System.out.println("list-services --key option test passed:: " + isSorted); Assert.assertTrue(isSorted); } //Testing for the '--type' option of lst-services sub-commands { String type = "DATABASE"; ActionReport report = habitat.getService(ActionReport.class); org.glassfish.api.admin.CommandRunner.CommandInvocation invocation = commandRunner.getCommandInvocation("list-services", report); ParameterMap parameterMap = new ParameterMap(); parameterMap.add("type", type); parameterMap.add("output", "SERVER-TYPE"); invocation.parameters(parameterMap).execute(); List<Map<String, String>> list = (List<Map<String, String>>) report.getExtraProperties().get("list"); ListIterator listIterator = list.listIterator(); List<String> valueList = new ArrayList<String>(); Map<String, String> map; String typeFound = null; boolean onlyTypeFound = false; while (listIterator.hasNext()) { map = (Map<String, String>) listIterator.next(); typeFound = (String) map.get("SERVER-TYPE"); if (type.equals(typeFound)) { onlyTypeFound = true; } else { onlyTypeFound = false; break; } } if (valueList.isEmpty()) { onlyTypeFound = true; } System.out.println("list-services --type option test passed:: " + onlyTypeFound); Assert.assertTrue(onlyTypeFound); } //Testing for the '--scope' option of lst-services sub-commands //Here, the war deployed is 'basic_db_initsql_paas_sample.war', hence using it as the appname. { String scope = "application"; ActionReport report = habitat.getService(ActionReport.class); org.glassfish.api.admin.CommandRunner.CommandInvocation invocation = commandRunner.getCommandInvocation("list-services", report); ParameterMap parameterMap = new ParameterMap(); parameterMap.add("scope", scope); parameterMap.add("output", "SCOPE"); parameterMap.add("appname", "basic_db_initsql_paas_sample"); invocation.parameters(parameterMap).execute(); List<Map<String, String>> list = (List<Map<String, String>>) report.getExtraProperties().get("list"); ListIterator listIterator = list.listIterator(); List<String> valueList = new ArrayList<String>(); Map<String, String> map; String scopeFound = null; boolean onlyScopeFound = false; while (listIterator.hasNext()) { map = (Map<String, String>) listIterator.next(); scopeFound = (String) map.get("SCOPE"); if (scope.equals(scopeFound)) { onlyScopeFound = true; } else { onlyScopeFound = false; break; } } if (valueList.isEmpty()) { onlyScopeFound = true; } System.out.println("list-services --scope option test passed:: " + onlyScopeFound); Assert.assertTrue(onlyScopeFound); } // test the option --terse=false. { ActionReport report = habitat.getService(ActionReport.class); org.glassfish.api.admin.CommandRunner.CommandInvocation invocation = commandRunner.getCommandInvocation("list-services", report); ParameterMap parameterMap = new ParameterMap(); parameterMap.add("output", "service-name,vm-id,server-type"); parameterMap.add("terse", "true"); invocation.parameters(parameterMap).execute(); List<Map<String, String>> list = (List<Map<String, String>>) report.getExtraProperties().get("list"); boolean headersNotFound = false; for (Map<String, String> map : list) { headersNotFound = false; Set<String> headers = map.keySet(); for (String header : headers) { if ("".equals(header)) { headersNotFound = true; } else { headersNotFound = false; break; } } if (!headersNotFound) { break; } } System.out.println("list-services --terse=true option test passed:: " + headersNotFound); Assert.assertTrue(headersNotFound); } // test --type option { String typeValue="Javaee"; ActionReport report = habitat.getService(ActionReport.class); org.glassfish.api.admin.CommandRunner.CommandInvocation invocation = commandRunner.getCommandInvocation("list-services", report); ParameterMap parameterMap = new ParameterMap(); parameterMap.add("output", "server-type"); parameterMap.add("type",typeValue); invocation.parameters(parameterMap).execute(); List<Map<String, String>> list = (List<Map<String, String>>) report.getExtraProperties().get("list"); boolean otherTypeFound = false; for (Map<String, String> map : list) { String value= map.get("SERVER-TYPE"); if(!value.equalsIgnoreCase(typeValue)){ otherTypeFound=true; break; } } System.out.println("list-services --type option test passed:: " + !otherTypeFound); Assert.assertFalse(otherTypeFound); } } private boolean isSortedList(List list) { ListIterator list_iter = list.listIterator(); if (!list_iter.hasNext()) { return true; } String t = (String) list_iter.next(); while (list_iter.hasNext()) { String t2 = (String) list_iter.next(); if (t.compareTo(t2) > 0) { return false; } t = t2; } return true; } }