You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/01 18:48:22 UTC
[46/51] [abbrv] [partial] brooklyn-library git commit: move subdir
from incubator up a level as it is promoted to its own repo (first
non-incubator commit!)
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/Monitor.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/Monitor.java b/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/Monitor.java
deleted file mode 100644
index b5ae0e4..0000000
--- a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/Monitor.java
+++ /dev/null
@@ -1,260 +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 org.apache.brooklyn.qa.longevity;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.brooklyn.qa.longevity.StatusRecorder.Factory.chain;
-import static org.apache.brooklyn.qa.longevity.StatusRecorder.Factory.noop;
-import static org.apache.brooklyn.qa.longevity.StatusRecorder.Factory.toFile;
-import static org.apache.brooklyn.qa.longevity.StatusRecorder.Factory.toLog;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-
-import joptsimple.OptionParser;
-import joptsimple.OptionSet;
-
-import org.apache.brooklyn.util.collections.TimeWindowedList;
-import org.apache.brooklyn.util.collections.TimestampedValue;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Range;
-import com.google.common.io.Files;
-
-public class Monitor {
-
- private static final Logger LOG = LoggerFactory.getLogger(Monitor.class);
-
- private static final int checkPeriodMs = 1000;
-
- private static final OptionParser parser = new OptionParser() {
- {
- acceptsAll(ImmutableList.of("help", "?", "h"), "show help");
- accepts("webUrl", "Web-app url")
- .withRequiredArg().ofType(URL.class);
- accepts("brooklynPid", "Brooklyn pid")
- .withRequiredArg().ofType(Integer.class);
- accepts("logFile", "Brooklyn log file")
- .withRequiredArg().ofType(File.class);
- accepts("logGrep", "Grep in log file (defaults to 'SEVERE|ERROR|WARN|Exception|Error'")
- .withRequiredArg().ofType(String.class);
- accepts("logGrepExclusionsFile", "File of expressions to be ignored in log file")
- .withRequiredArg().ofType(File.class);
- accepts("webProcesses", "Name (for `ps ax | grep` of web-processes")
- .withRequiredArg().ofType(String.class);
- accepts("numWebProcesses", "Number of web-processes expected (e.g. 1 or 1-3)")
- .withRequiredArg().ofType(String.class);
- accepts("webProcessesCyclingPeriod", "The period (in seconds) for cycling through the range of numWebProcesses")
- .withRequiredArg().ofType(Integer.class);
- accepts("outFile", "File to write monitor status info")
- .withRequiredArg().ofType(File.class);
- accepts("abortOnError", "Exit the JVM on error, with exit code 1")
- .withRequiredArg().ofType(Boolean.class);
- }
- };
-
- public static void main(String[] argv) throws InterruptedException, IOException {
- OptionSet options = parse(argv);
-
- if (options == null || options.has("help")) {
- parser.printHelpOn(System.out);
- System.exit(0);
- }
-
- MonitorPrefs prefs = new MonitorPrefs();
- prefs.webUrl = options.hasArgument("webUrl") ? (URL) options.valueOf("webUrl") : null;
- prefs.brooklynPid = options.hasArgument("brooklynPid") ? (Integer) options.valueOf("brooklynPid") : -1;
- prefs.logFile = options.hasArgument("logFile") ? (File) options.valueOf("logFile") : null;
- prefs.logGrep = options.hasArgument("logGrep") ? (String) options.valueOf("logGrep") : "SEVERE|ERROR|WARN|Exception|Error";
- prefs.logGrepExclusionsFile = options.hasArgument("logGrepExclusionsFile") ? (File) options.valueOf("logGrepExclusionsFile") : null;
- prefs.webProcessesRegex = options.hasArgument("webProcesses") ? (String) options.valueOf("webProcesses") : null;
- prefs.numWebProcesses = options.hasArgument("numWebProcesses") ? parseRange((String) options.valueOf("numWebProcesses")) : null;
- prefs.webProcessesCyclingPeriod = options.hasArgument("webProcessesCyclingPeriod") ? (Integer) options.valueOf("webProcessesCyclingPeriod") : -1;
- prefs.outFile = options.hasArgument("outFile") ? (File) options.valueOf("outFile") : null;
- prefs.abortOnError = options.hasArgument("abortOnError") ? (Boolean) options.valueOf("abortOnError") : false;
- Monitor main = new Monitor(prefs, MonitorListener.NOOP);
- main.start();
- }
-
- private static Range<Integer> parseRange(String range) {
- if (range.contains("-")) {
- String[] parts = range.split("-");
- return Range.closed(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
- } else {
- return Range.singleton(Integer.parseInt(range));
- }
- }
-
- private static OptionSet parse(String...argv) {
- try {
- return parser.parse(argv);
- } catch (Exception e) {
- System.out.println("Error in parsing options: " + e.getMessage());
- return null;
- }
- }
-
- private final MonitorPrefs prefs;
- private final StatusRecorder recorder;
- private final MonitorListener listener;
-
- public Monitor(MonitorPrefs prefs, MonitorListener listener) {
- this.prefs = prefs;
- this.listener = listener;
- this.recorder = chain(toLog(LOG), (prefs.outFile != null ? toFile(prefs.outFile) : noop()));
- }
-
- private void start() throws IOException {
- LOG.info("Monitoring: "+prefs);
- ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
-
- final AtomicReference<List<String>> previousLogLines = new AtomicReference<List<String>>(Collections.<String>emptyList());
- final TimeWindowedList<Integer> numWebProcessesHistory = new TimeWindowedList<Integer>(
- ImmutableMap.of("timePeriod", Duration.seconds(prefs.webProcessesCyclingPeriod), "minExpiredVals", 1));
- final Set<String> logGrepExclusions = ImmutableSet.copyOf(Files.readLines(prefs.logGrepExclusionsFile, Charsets.UTF_8));
-
- executor.scheduleAtFixedRate(new Runnable() {
- @Override public void run() {
- StatusRecorder.Record record = new StatusRecorder.Record();
- StringBuilder failureMsg = new StringBuilder();
- try {
- if (prefs.brooklynPid > 0) {
- boolean pidRunning = MonitorUtils.isPidRunning(prefs.brooklynPid, "java");
- MonitorUtils.MemoryUsage memoryUsage = MonitorUtils.getMemoryUsage(prefs.brooklynPid, ".*brooklyn.*", 1000);
- record.put("pidRunning", pidRunning);
- record.put("totalMemoryBytes", memoryUsage.getTotalMemoryBytes());
- record.put("totalMemoryInstances", memoryUsage.getTotalInstances());
- record.put("instanceCounts", memoryUsage.getInstanceCounts());
-
- if (!pidRunning) {
- failureMsg.append("pid "+prefs.brooklynPid+" is not running"+"\n");
- }
- }
- if (prefs.webUrl != null) {
- boolean webUrlUp = MonitorUtils.isUrlUp(prefs.webUrl);
- record.put("webUrlUp", webUrlUp);
-
- if (!webUrlUp) {
- failureMsg.append("web URL "+prefs.webUrl+" is not available"+"\n");
- }
- }
- if (prefs.logFile != null) {
- List<String> logLines = MonitorUtils.searchLog(prefs.logFile, prefs.logGrep, logGrepExclusions);
- List<String> newLogLines = getAdditions(previousLogLines.get(), logLines);
- previousLogLines.set(logLines);
- record.put("logLines", newLogLines);
-
- if (newLogLines.size() > 0) {
- failureMsg.append("Log contains warnings/errors: "+newLogLines+"\n");
- }
- }
- if (prefs.webProcessesRegex != null) {
- List<Integer> pids = MonitorUtils.getRunningPids(prefs.webProcessesRegex, "--webProcesses");
- pids.remove((Object)MonitorUtils.findOwnPid());
-
- record.put("webPids", pids);
- record.put("numWebPids", pids.size());
- numWebProcessesHistory.add(pids.size());
-
- if (prefs.numWebProcesses != null) {
- boolean numWebPidsInRange = prefs.numWebProcesses.apply(pids.size());
- record.put("numWebPidsInRange", numWebPidsInRange);
-
- if (!numWebPidsInRange) {
- failureMsg.append("num web processes out-of-range: pids="+pids+"; size="+pids.size()+"; expected="+prefs.numWebProcesses);
- }
-
- if (prefs.webProcessesCyclingPeriod > 0) {
- List<TimestampedValue<Integer>> values = numWebProcessesHistory.getValues();
- long valuesTimeRange = (values.get(values.size()-1).getTimestamp() - values.get(0).getTimestamp());
- if (values.size() > 0 && valuesTimeRange > SECONDS.toMillis(prefs.webProcessesCyclingPeriod)) {
- int min = -1;
- int max = -1;
- for (TimestampedValue<Integer> val : values) {
- min = (min < 0) ? val.getValue() : Math.min(val.getValue(), min);
- max = Math.max(val.getValue(), max);
- }
- record.put("minWebSizeInPeriod", min);
- record.put("maxWebSizeInPeriod", max);
-
- if (min > prefs.numWebProcesses.lowerEndpoint() || max < prefs.numWebProcesses.upperEndpoint()) {
- failureMsg.append("num web processes not increasing/decreasing correctly: " +
- "pids="+pids+"; size="+pids.size()+"; cyclePeriod="+prefs.webProcessesCyclingPeriod+
- "; expectedRange="+prefs.numWebProcesses+"; min="+min+"; max="+max+"; history="+values);
- }
- } else {
- int numVals = values.size();
- long startTime = (numVals > 0) ? values.get(0).getTimestamp() : 0;
- long endTime = (numVals > 0) ? values.get(values.size()-1).getTimestamp() : 0;
- LOG.info("Insufficient vals in time-window to determine cycling behaviour over period ("+prefs.webProcessesCyclingPeriod+"secs): "+
- "numVals="+numVals+"; startTime="+startTime+"; endTime="+endTime+"; periodCovered="+(endTime-startTime)/1000);
- }
- }
- }
- }
-
- } catch (Throwable t) {
- LOG.error("Error during periodic checks", t);
- throw Throwables.propagate(t);
- }
-
- try {
- recorder.record(record);
- listener.onRecord(record);
-
- if (failureMsg.length() > 0) {
- listener.onFailure(record, failureMsg.toString());
-
- if (prefs.abortOnError) {
- LOG.error("Aborting on error: "+failureMsg);
- System.exit(1);
- }
- }
-
- } catch (Throwable t) {
- LOG.warn("Error recording monitor info ("+record+")", t);
- throw Throwables.propagate(t);
- }
- }
- }, 0, checkPeriodMs, TimeUnit.MILLISECONDS);
- }
-
- // TODO What is the guava equivalent? Don't want Set.difference, because duplicates/ordered.
- private static List<String> getAdditions(List<String> prev, List<String> next) {
- List<String> result = Lists.newArrayList(next);
- result.removeAll(prev);
- return result;
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorListener.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorListener.java b/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorListener.java
deleted file mode 100644
index 11fdd3f..0000000
--- a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorListener.java
+++ /dev/null
@@ -1,35 +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 org.apache.brooklyn.qa.longevity;
-
-import org.apache.brooklyn.qa.longevity.StatusRecorder.Record;
-
-public interface MonitorListener {
-
- public static final MonitorListener NOOP = new MonitorListener() {
- @Override public void onRecord(Record record) {
- }
- @Override public void onFailure(Record record, String msg) {
- }
- };
-
- public void onRecord(Record record);
-
- public void onFailure(Record record, String msg);
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorPrefs.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorPrefs.java b/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorPrefs.java
deleted file mode 100644
index 4d74045..0000000
--- a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorPrefs.java
+++ /dev/null
@@ -1,54 +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 org.apache.brooklyn.qa.longevity;
-
-import java.io.File;
-import java.net.URL;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.Range;
-
-public class MonitorPrefs {
-
- public URL webUrl;
- public int brooklynPid;
- public File logFile;
- public String logGrep;
- public File logGrepExclusionsFile;
- public String webProcessesRegex;
- public Range<Integer> numWebProcesses;
- public int webProcessesCyclingPeriod;
- public File outFile;
- public boolean abortOnError;
-
- @Override
- public String toString() {
- return Objects.toStringHelper(this)
- .add("webUrl", webUrl)
- .add("brooklynPid", brooklynPid)
- .add("logFile", logFile)
- .add("logGrep", logGrep)
- .add("logGrepExclusionsFile", logGrepExclusionsFile)
- .add("outFile", outFile)
- .add("webProcessesRegex", webProcessesRegex)
- .add("numWebProcesses", numWebProcesses)
- .add("webProcessesCyclingPeriod", webProcessesCyclingPeriod)
- .toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorUtils.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorUtils.java b/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorUtils.java
deleted file mode 100644
index c9ce875..0000000
--- a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/MonitorUtils.java
+++ /dev/null
@@ -1,328 +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 org.apache.brooklyn.qa.longevity;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import org.apache.brooklyn.util.http.HttpTool;
-import org.apache.brooklyn.util.http.HttpToolResponse;
-import org.apache.brooklyn.util.stream.StreamGobbler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import com.google.common.io.ByteStreams;
-
-public class MonitorUtils {
-
- private static final Logger LOG = LoggerFactory.getLogger(MonitorUtils.class);
-
- private static volatile int ownPid = -1;
-
- /**
- * Confirm can read from URL.
- *
- * @param url
- */
- public static boolean isUrlUp(URL url) {
- try {
- HttpToolResponse result = HttpTool.httpGet(
- HttpTool.httpClientBuilder().trustAll().build(),
- URI.create(url.toString()),
- ImmutableMap.<String,String>of());
- int statuscode = result.getResponseCode();
-
- if (statuscode != 200) {
- LOG.info("Error reading URL {}: {}, {}", new Object[]{url, statuscode, result.getReasonPhrase()});
- return false;
- } else {
- return true;
- }
- } catch (Exception e) {
- LOG.info("Error reading URL {}: {}", url, e);
- return false;
- }
- }
-
- public static boolean isPidRunning(int pid) {
- return isPidRunning(pid, null);
- }
-
- /**
- * Confirm the given pid is running, and that the the process matches the given regex.
- *
- * @param pid
- * @param regex
- */
- public static boolean isPidRunning(int pid, String regex) {
- Process process = exec("ps -p " + pid);
- String out = waitFor(process);
- if (process.exitValue() > 0) {
- String err = toString(process.getErrorStream());
- LOG.info(String.format("pid %s not running: %s", pid, err));
- return false;
- }
-
- if (regex != null) {
- String regex2 = "^\\s*" + pid + ".*" + regex;
- boolean found = false;
- for (String line : out.split("\n")) {
- if (hasAtLeastOneMatch(line, regex2)) {
- found = true;
- break;
- }
- }
-
- if (!found) {
- String txt = toString(process.getInputStream());
- LOG.info("process did not match regular expression: "+txt);
- return false;
- }
- }
-
- return true;
- }
-
- private static boolean hasAtLeastOneMatch(String line, String regex) {
- return Pattern.matches(".*"+regex+".*", line);
- }
-
- private static String toString(InputStream in){
- try {
- byte[] bytes = ByteStreams.toByteArray(in);
- return new String(bytes);
- } catch (IOException e) {
- throw Throwables.propagate(e);
- }
-
- }
-
- public static List<Integer> getRunningPids(String regex) {
- return getRunningPids(regex, null);
- }
-
- /**
- * Confirm the given pid is running, and that the the process matches the given regex.
- *
- * @param regex
- * @param excludingRegex
- */
- public static List<Integer> getRunningPids(String regex, String excludingRegex) {
- Process process = exec("ps ax");
- String out = waitFor(process);
-
- List<Integer> result = new LinkedList<Integer>();
- for (String line : out.split("\n")) {
- if (excludingRegex != null && hasAtLeastOneMatch(line, excludingRegex)) {
- continue;
- }
- if (hasAtLeastOneMatch(line, regex)) {
- String[] linesplit = line.trim().split("\\s+");
- result.add(Integer.parseInt(linesplit[0]));
- }
- }
- return result;
- }
-
- public static MemoryUsage getMemoryUsage(int pid){
- return getMemoryUsage(pid, null,0);
- }
-
- /**
- * @param pid
- */
- public static MemoryUsage getMemoryUsage(int pid, String clazzRegexOfInterest, int minInstancesOfInterest) {
- Process process = exec(String.format("jmap -histo %s", pid));
- String out = waitFor(process);
-
- Map<String, Integer> instanceCounts = Maps.newLinkedHashMap();
- long totalInstances=0;
- long totalMemoryBytes=0;
-
- for (String line : out.split("\n")) {
- if (clazzRegexOfInterest!=null && hasAtLeastOneMatch(line, clazzRegexOfInterest)) {
- // Format is:
- // num #instances #bytes class name
- // 1: 43506 8047096 example.MyClazz
-
- String[] parts = line.trim().split("\\s+");
- String clazz = parts[3];
- int instanceCount = Integer.parseInt(parts[1]);
- if (instanceCount >= minInstancesOfInterest) {
- instanceCounts.put(clazz, instanceCount);
- }
- }
- if (hasAtLeastOneMatch(line, "^Total.*")) {
- String[] parts = line.split("\\s+");
- totalInstances = Long.parseLong(parts[1]);
- totalMemoryBytes = Long.parseLong(parts[2]);
- }
- }
-
- return new MemoryUsage(totalInstances, totalMemoryBytes, instanceCounts);
- }
-
- public static class MemoryUsage {
- final long totalInstances;
- final long totalMemoryBytes;
- final Map<String, Integer> instanceCounts;
-
- MemoryUsage(long totalInstances, long totalMemoryBytes, Map<String, Integer> instanceCounts) {
- this.totalInstances = totalInstances;
- this.totalMemoryBytes = totalMemoryBytes;
- this.instanceCounts = instanceCounts;
- }
-
- public String toString() {
- return Objects.toStringHelper(this)
- .add("totalInstances", totalInstances)
- .add("totalMemoryBytes", totalMemoryBytes)
- .add("instanceCounts", instanceCounts)
- .toString();
- }
-
- public long getTotalInstances() {
- return totalInstances;
- }
-
- public long getTotalMemoryBytes() {
- return totalMemoryBytes;
- }
-
- public Map<String, Integer> getInstanceCounts() {
- return instanceCounts;
- }
- }
-
- public static List<String> searchLog(File file, String grepOfInterest) {
- return searchLog(file, grepOfInterest, new LinkedHashSet<String>());
- }
-
- /**
- * Find lines in the given file that match given given regex.
- *
- * @param file
- * @param grepOfInterest
- */
- public static List<String> searchLog(File file, String grepOfInterest, Set<String> grepExclusions) {
- Process process = exec(String.format("grep -E %s %s", grepOfInterest, file.getAbsoluteFile()));
- String out = waitFor(process);
-
- // TODO Annoying that String.split() returns size 1 when empty string; lookup javadoc when back online...
- if (out.length() == 0) return Collections.<String>emptyList();
-
- List<String> result = new ArrayList<String>();
- for (String line : out.trim().split("\n")) {
- boolean excluded = false;
- for (String exclusion : grepExclusions) {
- if (!isNullOrEmpty(exclusion) && hasAtLeastOneMatch(line, exclusion)) {
- excluded = true;
- }
- }
- if (!excluded) {
- result.add(line);
- }
- }
- return result;
- }
-
- public static Process exec(String cmd) {
- LOG.info("executing cmd: " + cmd);
-
- try {
- return Runtime.getRuntime().exec(cmd);
- } catch (IOException e) {
- throw Throwables.propagate(e);
- }
- }
-
- public static class ProcessHasStderr extends IllegalStateException {
- private static final long serialVersionUID = -937871002993888405L;
-
- byte[] stderrBytes;
- public ProcessHasStderr(byte[] stderrBytes) {
- this("Process printed to stderr: " + new String(stderrBytes), stderrBytes);
- }
- public ProcessHasStderr(String message, byte[] stderrBytes) {
- super(message);
- this.stderrBytes = stderrBytes;
- }
- }
-
- /**
- * Waits for the given process to complete, consuming its stdout and returning it as a string.
- * If there is any output on stderr an exception will be thrown.
- */
- public static String waitFor(Process process) {
- ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
- @SuppressWarnings("resource") //Closeable doesn't seem appropriate for StreamGobbler since it isn't expected to be called every time
- StreamGobbler gobblerOut = new StreamGobbler(process.getInputStream(), bytesOut, null);
- gobblerOut.start();
-
- ByteArrayOutputStream bytesErr = new ByteArrayOutputStream();
- @SuppressWarnings("resource")
- StreamGobbler gobblerErr = new StreamGobbler(process.getErrorStream(), bytesErr, null);
- gobblerErr.start();
-
- try {
- process.waitFor();
- gobblerOut.blockUntilFinished();
- gobblerErr.blockUntilFinished();
-
- if (bytesErr.size() > 0) {
- throw new ProcessHasStderr(bytesErr.toByteArray());
- }
-
- return new String(bytesOut.toByteArray());
- } catch (Exception e) {
- throw Throwables.propagate(e);
- } finally {
- if (gobblerOut.isAlive()) gobblerOut.interrupt();
- if (gobblerErr.isAlive()) gobblerErr.interrupt();
- }
- }
-
- public static int findOwnPid() throws IOException {
- if (ownPid >= 0) return ownPid;
-
- String[] cmd = new String[]{"bash", "-c", "echo $PPID"};
- Process process = Runtime.getRuntime().exec(cmd);
- String out = MonitorUtils.waitFor(process);
- ownPid = Integer.parseInt(out.trim());
- return ownPid;
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/StatusRecorder.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/StatusRecorder.java b/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/StatusRecorder.java
deleted file mode 100644
index 210e0a2..0000000
--- a/brooklyn-library/qa/src/main/java/org/apache/brooklyn/qa/longevity/StatusRecorder.java
+++ /dev/null
@@ -1,130 +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 org.apache.brooklyn.qa.longevity;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-
-import org.slf4j.Logger;
-
-import com.google.common.base.Charsets;
-import com.google.common.collect.Maps;
-import com.google.common.io.Files;
-
-public interface StatusRecorder {
-
- public void record(Record record) throws IOException;
-
- public static class Factory {
- public static final StatusRecorder NOOP = new StatusRecorder() {
- @Override public void record(Record record) {}
- };
-
- public static StatusRecorder noop() {
- return NOOP;
- }
- public static StatusRecorder toFile(File outFile) {
- return new FileBasedStatusRecorder(outFile);
- }
- public static StatusRecorder toSysout() {
- return new SysoutBasedStatusRecorder();
- }
- public static StatusRecorder toLog(Logger log) {
- return new LogBasedStatusRecorder(log);
- }
- public static StatusRecorder chain(StatusRecorder...recorders) {
- return new ChainingStatusRecorder(recorders);
- }
- }
-
- public static class Record {
- private final Map<String,Object> fields = Maps.newLinkedHashMap();
-
- public void putAll(Map<String,?> entries) {
- fields.putAll(entries);
- }
-
- public void putAll(String keyPrefix, Map<String,?> entries) {
- for (Map.Entry<String,?> entry : entries.entrySet()) {
- fields.put(keyPrefix+entry.getKey(), entry.getValue());
- }
- }
-
- public void put(String key, Object val) {
- fields.put(key, val);
- }
-
- @Override
- public String toString() {
- return fields.toString();
- }
- }
-
- public static class FileBasedStatusRecorder implements StatusRecorder {
- private final File outFile;
-
- public FileBasedStatusRecorder(File outFile) {
- this.outFile = outFile;
- }
-
- @Override
- public void record(Record record) throws IOException {
- Files.append(record.fields.toString()+"\n", outFile, Charsets.UTF_8);
- }
- }
-
- public static class SysoutBasedStatusRecorder implements StatusRecorder {
- public SysoutBasedStatusRecorder() {
- }
-
- @Override
- public void record(Record record) {
- System.out.println(record.fields);
- }
- }
-
- public static class LogBasedStatusRecorder implements StatusRecorder {
- private final Logger log;
-
- public LogBasedStatusRecorder(Logger log) {
- this.log = log;
- }
-
- @Override
- public void record(Record record) {
- log.info("{}", record.fields);
- }
- }
-
- public static class ChainingStatusRecorder implements StatusRecorder {
- private final StatusRecorder[] recorders;
-
- public ChainingStatusRecorder(StatusRecorder... recorders) {
- this.recorders = recorders;
- }
-
- @Override
- public void record(Record record) throws IOException {
- for (StatusRecorder recorder : recorders) {
- recorder.record(record);
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/resources/hello-world.txt
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/resources/hello-world.txt b/brooklyn-library/qa/src/main/resources/hello-world.txt
deleted file mode 100644
index ac2e350..0000000
--- a/brooklyn-library/qa/src/main/resources/hello-world.txt
+++ /dev/null
@@ -1,24 +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.
-
-The file hello-world.war contains its source code.
-
-It is the same as core/src/test/resources/hello-world-no-mapping.war, but is included here
-as a (small) binary to prevent build complication and leakage of test dependencies. This
-QA module contains useful building blocks for downstream projects/customers doing
-performance and longevity testing, rather than it just being for the Brooklyn automated build.
-
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/main/resources/hello-world.war
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/main/resources/hello-world.war b/brooklyn-library/qa/src/main/resources/hello-world.war
deleted file mode 100644
index 0e17460..0000000
Binary files a/brooklyn-library/qa/src/main/resources/hello-world.war and /dev/null differ
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java b/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
deleted file mode 100644
index 9f351ce..0000000
--- a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
+++ /dev/null
@@ -1,225 +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 org.apache.brooklyn.qa.brooklynnode;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
-import org.apache.brooklyn.core.objs.BrooklynObjectInternal.ConfigurationSupportInternal;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-import org.apache.brooklyn.entity.brooklynnode.BrooklynEntityMirror;
-import org.apache.brooklyn.entity.brooklynnode.BrooklynNode;
-import org.apache.brooklyn.entity.brooklynnode.BrooklynNode.DeployBlueprintEffector;
-import org.apache.brooklyn.entity.machine.MachineEntity;
-import org.apache.brooklyn.launcher.BrooklynLauncher;
-import org.apache.brooklyn.location.jclouds.JcloudsLocationConfig;
-import org.apache.brooklyn.test.EntityTestUtils;
-import org.apache.brooklyn.util.collections.MutableList;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.BrooklynMavenArtifacts;
-import org.apache.brooklyn.util.maven.MavenRetriever;
-import org.apache.brooklyn.util.text.Strings;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Tests obtaining a machine with a private IP only. For the machine to be
- * accessible we should have a gateway machine already running in the same
- * network.
- *
- * Starts a BrooklynNode with a public IP and on it starts two machines -
- * one with public and one with private only IP.
- *
- * The test lives here so it has access to the dist archive.
- */
-public class SoftlayerObtainPrivateLiveTest {
-
- // Expects that the location is already configured in brooklyn.properties
- private static final String LOCATION_SPEC = "jclouds:aws-ec2";
-
-
- private static final Logger log = LoggerFactory.getLogger(SoftlayerObtainPrivateLiveTest.class);
-
- private static final ImmutableMap<String, Duration> TIMEOUT = ImmutableMap.of("timeout", Duration.ONE_HOUR);
- // Should this be a black list instead?
- private Set<String> LOCATION_CONFIG_WHITE_LIST = ImmutableSet.of(
- JcloudsLocationConfig.CLOUD_REGION_ID.getName(),
- JcloudsLocationConfig.ACCESS_IDENTITY.getName(),
- JcloudsLocationConfig.ACCESS_CREDENTIAL.getName(),
- JcloudsLocationConfig.IMAGE_ID.getName(),
- JcloudsLocationConfig.HARDWARE_ID.getName(),
- JcloudsLocationConfig.TEMPLATE_OPTIONS.getName());
-
- private static final String NAMED_LOCATION_PREFIX = "brooklyn.location.named.";
- private static final String TEST_LOCATION = "test-location";
- private static final String TEST_LOCATION_PRIVATE = TEST_LOCATION + "-private";
- private static final String TEST_LOCATION_PUBLIC = TEST_LOCATION + "-public";
-
- private BrooklynLauncher launcher;
- private ManagementContext mgmt;
- private TestApplication app;
- private Location loc;
-
- @BeforeMethod(alwaysRun=true)
- public void setUp() {
- mgmt = LocalManagementContextForTests.builder(true)
- .useDefaultProperties()
- .build();
- launcher = BrooklynLauncher
- .newInstance()
- .managementContext(mgmt)
- .start();
- app = mgmt.getEntityManager().createEntity(EntitySpec.create(TestApplication.class));
- mgmt.getEntityManager().manage(app);
- loc = createLocation();
- }
-
- @AfterMethod(alwaysRun=true)
- public void tearDown() {
- Entities.destroyAll(mgmt);
- launcher.terminate();
- }
-
- private Location createLocation() {
- return mgmt.getLocationRegistry().resolve(LOCATION_SPEC);
- }
-
- @Test(groups="Live")
- public void testObtain() {
- String localUrl = MavenRetriever.localUrl(BrooklynMavenArtifacts.artifact("", "brooklyn-dist", "tar.gz", "dist"));
- String userName = "admin";
- String userPassword = Strings.makeRandomId(6);
- String remoteConfig = Joiner.on('\n').join(MutableList.of(
- "brooklyn.webconsole.security.users=" + userName,
- "brooklyn.webconsole.security.user.admin.password=" + userPassword)
- .appendAll(getLocationConfig())
- .append("\n"));
-
- log.info("Using distribution {}", localUrl);
- log.info("Remote credentials are {}:{}", userName, userPassword);
- log.info("Remote config \n{}", remoteConfig);
-
- EntitySpec<BrooklynNode> nodeSpec = EntitySpec.create(BrooklynNode.class)
- .configure(BrooklynNode.DISTRO_UPLOAD_URL, localUrl)
- .configure(BrooklynNode.MANAGEMENT_USER, userName)
- .configure(BrooklynNode.MANAGEMENT_PASSWORD, userPassword)
- .configure(BrooklynNode.BROOKLYN_LOCAL_PROPERTIES_CONTENTS, remoteConfig);
-
- BrooklynNode node = app.createAndManageChild(nodeSpec);
- app.start(ImmutableList.of(loc));
- try {
- // TODO Assumes that the second-level machines will be in the same private network as the BrooklynNode machine.
- // The private network id can be set explicitly in templateOptions.primaryBackendNetworkComponentNetworkVlanId.
- BrooklynEntityMirror publicApp = deployTestApp(node, true);
- BrooklynEntityMirror privateApp = deployTestApp(node, false);
-
- EntityTestUtils.assertAttributeEventually(TIMEOUT, publicApp, ServiceStateLogic.SERVICE_STATE_ACTUAL,
- Predicates.in(ImmutableList.of(Lifecycle.RUNNING, Lifecycle.ON_FIRE)));
- EntityTestUtils.assertAttributeEventually(TIMEOUT, privateApp, ServiceStateLogic.SERVICE_STATE_ACTUAL,
- Predicates.in(ImmutableList.of(Lifecycle.RUNNING, Lifecycle.ON_FIRE)));
-
- EntityTestUtils.assertAttributeEquals(publicApp, ServiceStateLogic.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
- EntityTestUtils.assertAttributeEquals(privateApp, ServiceStateLogic.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
-
- EntityTestUtils.assertAttributeEqualsEventually(publicApp, Attributes.SERVICE_UP, Boolean.TRUE);
- EntityTestUtils.assertAttributeEqualsEventually(privateApp, Attributes.SERVICE_UP, Boolean.TRUE);
- } finally {
- node.invoke(BrooklynNode.STOP_NODE_AND_KILL_APPS, ImmutableMap.<String, String>of()).getUnchecked();
- }
- }
-
- private BrooklynEntityMirror deployTestApp(BrooklynNode node, boolean hasPublicNetwork) {
- String entityId = node.invoke(BrooklynNode.DEPLOY_BLUEPRINT, ImmutableMap.of(DeployBlueprintEffector.BLUEPRINT_CAMP_PLAN.getName(), getBlueprintPlan(hasPublicNetwork))).getUnchecked();
- return node.addChild(EntitySpec.create(BrooklynEntityMirror.class)
- .configure(BrooklynEntityMirror.MIRRORED_ENTITY_ID, entityId)
- .configure(BrooklynEntityMirror.MIRRORED_ENTITY_URL, node.getAttribute(BrooklynNode.WEB_CONSOLE_URI).toString() + "/v1/applications/"+entityId+"/entities/"+entityId));
- }
-
- private Collection<String> getLocationConfig() {
- Map<String, Object> config = MutableMap.copyOf(((ConfigurationSupportInternal)loc.config()).getBag().getAllConfig());
- config.putAll(customizeSharedLocation());
- return MutableList.<String>of()
- .appendAll(createLocationConfig(NAMED_LOCATION_PREFIX + TEST_LOCATION, (String)config.get("spec.original"), config))
- .appendAll(createLocationConfig(NAMED_LOCATION_PREFIX + TEST_LOCATION_PUBLIC, "named:" + TEST_LOCATION, customizePublicLocation()))
- .appendAll(createLocationConfig(NAMED_LOCATION_PREFIX + TEST_LOCATION_PRIVATE, "named:" + TEST_LOCATION, customizePrivateLocation()));
- }
-
- private Collection<String> createLocationConfig(String prefix, String parent, Map<String, ?> config) {
- return MutableList.<String>of()
- .append(prefix + "=" + parent)
- .appendAll(locationConfigToProperties(prefix, config));
- }
-
- protected Collection<String> locationConfigToProperties(String prefix, Map<String, ?> config) {
- Collection<String> loc = new ArrayList<String>();
- for (String key : config.keySet()) {
- if (LOCATION_CONFIG_WHITE_LIST.contains(key)) {
- loc.add(prefix + "." + key + "=" + config.get(key));
- }
- }
- return loc;
- }
-
- protected Map<String, String> customizeSharedLocation() {
- return ImmutableMap.of();
- }
-
- protected Map<String, String> customizePublicLocation() {
- return ImmutableMap.of();
- }
-
- protected Map<String, String> customizePrivateLocation() {
- return ImmutableMap.<String, String>of(
- "templateOptions", "{privateNetworkOnlyFlag: true}");
- }
-
- protected String getBlueprintPlan(boolean hasPublicNetwork) {
- return Joiner.on('\n').join(ImmutableList.of(
- "location: " + getTestLocation(hasPublicNetwork),
- "services:",
- "- type: "+MachineEntity.class.getName(),
- " name: " + (hasPublicNetwork ? "Public" : "Private")
- ));
- }
-
- private static String getTestLocation(boolean hasPublicNetwork) {
- return hasPublicNetwork ? TEST_LOCATION_PUBLIC : TEST_LOCATION_PRIVATE;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EnrichersSlightlySimplerYamlTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EnrichersSlightlySimplerYamlTest.java b/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EnrichersSlightlySimplerYamlTest.java
deleted file mode 100644
index c24ead1..0000000
--- a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EnrichersSlightlySimplerYamlTest.java
+++ /dev/null
@@ -1,134 +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 org.apache.brooklyn.qa.camp;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.EntityInternal;
-import org.apache.brooklyn.core.sensor.Sensors;
-import org.apache.brooklyn.entity.group.DynamicCluster;
-import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcess;
-import org.apache.brooklyn.test.EntityTestUtils;
-import org.apache.brooklyn.util.collections.CollectionFunctionals;
-import org.apache.brooklyn.util.collections.MutableList;
-import org.apache.brooklyn.util.math.MathPredicates;
-import org.apache.brooklyn.util.text.StringPredicates;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Iterables;
-
-/** Tests some improvements to enricher classes to make them a bit more yaml friendly.
- * Called "SlightlySimpler" as it would be nice to make enrichers a lot more yaml friendly! */
-@Test
-public class EnrichersSlightlySimplerYamlTest extends AbstractYamlTest {
- private static final Logger log = LoggerFactory.getLogger(EnrichersSlightlySimplerYamlTest.class);
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Test
- public void testWithAppEnricher() throws Exception {
- Entity app = createAndStartApplication(loadYaml("test-app-with-enrichers-slightly-simpler.yaml"));
- waitForApplicationTasks(app);
- log.info("Started "+app+":");
- Entities.dumpInfo(app);
-
- Entity cluster = Iterables.getOnlyElement( app.getChildren() );
- Collection<Entity> leafs = ((DynamicCluster)cluster).getMembers();
- Iterator<Entity> li = leafs.iterator();
-
- Entity e1 = li.next();
- ((EntityInternal)e1).sensors().set(Sensors.newStringSensor("ip"), "127.0.0.1");
- EntityTestUtils.assertAttributeEqualsEventually(e1, Sensors.newStringSensor("url"), "http://127.0.0.1/");
- EntityTestUtils.assertAttributeEqualsEventually(e1, Attributes.MAIN_URI, URI.create("http://127.0.0.1/"));
-
- int i=2;
- while (li.hasNext()) {
- Entity ei = li.next();
- ((EntityInternal)ei).sensors().set(Sensors.newStringSensor("ip"), "127.0.0."+i);
- i++;
- }
-
- EntityTestUtils.assertAttributeEventually(cluster, Sensors.newSensor(Iterable.class, "urls.list"),
- (Predicate)CollectionFunctionals.sizeEquals(3));
-
- EntityTestUtils.assertAttributeEventually(cluster, Sensors.newSensor(String.class, "urls.list.comma_separated.max_2"),
- StringPredicates.matchesRegex("\"http:\\/\\/127[^\"]*\\/\",\"http:\\/\\/127[^\"]*\\/\""));
-
- EntityTestUtils.assertAttributeEventually(cluster, Attributes.MAIN_URI, Predicates.notNull());
- URI main = cluster.getAttribute(Attributes.MAIN_URI);
- Assert.assertTrue(main.toString().matches("http:\\/\\/127.0.0..\\/"), "Wrong URI: "+main);
-
- EntityTestUtils.assertAttributeEventually(app, Attributes.MAIN_URI, Predicates.notNull());
- main = app.getAttribute(Attributes.MAIN_URI);
- Assert.assertTrue(main.toString().matches("http:\\/\\/127.0.0..\\/"), "Wrong URI: "+main);
-
- // TODO would we want to allow "all-but-usual" as the default if nothing specified
- }
-
- @Test(groups="Integration")
- public void testWebappWithAveragingEnricher() throws Exception {
- Entity app = createAndStartApplication(loadYaml("test-webapp-with-averaging-enricher.yaml"));
- waitForApplicationTasks(app);
- log.info("Started "+app+":");
- Entities.dumpInfo(app);
-
- List<JavaWebAppSoftwareProcess> appservers = MutableList.copyOf(Entities.descendants(app, JavaWebAppSoftwareProcess.class));
- Assert.assertEquals(appservers.size(), 3);
-
- EntityInternal srv0 = (EntityInternal) appservers.get(0);
- EntityInternal dwac = (EntityInternal) srv0.getParent();
- EntityInternal cdwac = (EntityInternal) dwac.getParent();
-
- srv0.sensors().set(Sensors.newDoubleSensor("my.load"), 20.0);
-
- EntityTestUtils.assertAttributeEventually(dwac, Sensors.newSensor(Double.class, "my.load.averaged"),
- MathPredicates.equalsApproximately(20));
- EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
- MathPredicates.equalsApproximately(20));
-
- srv0.sensors().set(Sensors.newDoubleSensor("my.load"), null);
- EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
- Predicates.isNull());
-
- ((EntityInternal) appservers.get(1)).sensors().set(Sensors.newDoubleSensor("my.load"), 10.0);
- ((EntityInternal) appservers.get(2)).sensors().set(Sensors.newDoubleSensor("my.load"), 20.0);
- EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
- MathPredicates.equalsApproximately(15));
- srv0.sensors().set(Sensors.newDoubleSensor("my.load"), 0.0);
- EntityTestUtils.assertAttributeEventually(cdwac, Sensors.newSensor(Double.class, "my.load.averaged"),
- MathPredicates.equalsApproximately(10));
- }
-
- @Override
- protected Logger getLogger() {
- return log;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EntitiesYamlIntegrationTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EntitiesYamlIntegrationTest.java b/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EntitiesYamlIntegrationTest.java
deleted file mode 100644
index f92af6c..0000000
--- a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/EntitiesYamlIntegrationTest.java
+++ /dev/null
@@ -1,71 +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 org.apache.brooklyn.qa.camp;
-
-import static org.testng.Assert.*;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
-import org.apache.brooklyn.entity.group.DynamicCluster;
-import org.apache.brooklyn.entity.proxy.nginx.NginxController;
-import org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster;
-import org.apache.brooklyn.entity.webapp.tomcat.TomcatServer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Iterables;
-
-public class EntitiesYamlIntegrationTest extends AbstractYamlTest {
-
- private static final Logger LOG = LoggerFactory.getLogger(EntitiesYamlIntegrationTest.class);
-
- @Test(groups = "Integration")
- public void testStartTomcatCluster() throws Exception {
- Entity app = createAndStartApplication(loadYaml("test-tomcat-cluster.yaml"));
- waitForApplicationTasks(app);
-
- assertNotNull(app);
- assertEquals(app.getChildren().size(), 1);
- final Entity entity = Iterables.getOnlyElement(app.getChildren());
- assertTrue(entity instanceof ControlledDynamicWebAppCluster, "entity="+entity);
- ControlledDynamicWebAppCluster cluster = (ControlledDynamicWebAppCluster) entity;
-
- assertTrue(cluster.getController() instanceof NginxController, "controller="+cluster.getController());
- Iterable<TomcatServer> tomcats = FluentIterable.from(cluster.getCluster().getMembers()).filter(TomcatServer.class);
- assertEquals(Iterables.size(tomcats), 2);
- for (TomcatServer tomcat : tomcats) {
- assertTrue(tomcat.getAttribute(TomcatServer.SERVICE_UP), "serviceup");
- }
-
- EntitySpec<?> spec = entity.getConfig(DynamicCluster.MEMBER_SPEC);
- assertNotNull(spec);
- assertEquals(spec.getType(), TomcatServer.class);
- assertEquals(spec.getConfig().get(DynamicCluster.QUARANTINE_FAILED_ENTITIES), Boolean.FALSE);
- assertEquals(spec.getConfig().get(DynamicCluster.INITIAL_QUORUM_SIZE), 2);
- }
-
-
- @Override
- protected Logger getLogger() {
- return LOG;
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsIntegrationTest.java b/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsIntegrationTest.java
deleted file mode 100644
index 1367ddd..0000000
--- a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsIntegrationTest.java
+++ /dev/null
@@ -1,273 +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 org.apache.brooklyn.qa.camp;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatform;
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
-import org.apache.brooklyn.camp.spi.Assembly;
-import org.apache.brooklyn.camp.spi.AssemblyTemplate;
-import org.apache.brooklyn.camp.spi.PlatformComponent;
-import org.apache.brooklyn.camp.spi.PlatformRootSummary;
-import org.apache.brooklyn.camp.spi.collection.ResolvableLink;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
-import org.apache.brooklyn.entity.webapp.DynamicWebAppCluster;
-import org.apache.brooklyn.entity.webapp.JavaWebAppService;
-import org.apache.brooklyn.entity.webapp.WebAppService;
-import org.apache.brooklyn.test.Asserts;
-import org.apache.brooklyn.test.EntityTestUtils;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.ResourceUtils;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.net.Urls;
-import org.apache.brooklyn.util.stream.Streams;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.policy.autoscaling.AutoScalerPolicy;
-
-import com.google.common.collect.Iterables;
-
-@Test(groups="Integration")
-public class JavaWebAppsIntegrationTest {
-
- private static final Logger log = LoggerFactory.getLogger(JavaWebAppsIntegrationTest.class);
-
- private ManagementContext brooklynMgmt;
- private BrooklynCampPlatform platform;
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- BrooklynCampPlatformLauncherNoServer launcher = new BrooklynCampPlatformLauncherNoServer();
- launcher.launch();
- brooklynMgmt = launcher.getBrooklynMgmt();
-
- platform = new BrooklynCampPlatform(
- PlatformRootSummary.builder().name("Brooklyn CAMP Platform").build(),
- brooklynMgmt);
- }
-
- @AfterMethod
- public void teardown() {
- if (brooklynMgmt!=null) Entities.destroyAll(brooklynMgmt);
- }
-
- public void testSimpleYamlDeploy() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-simple.yaml"));
- AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
-
- try {
- Assembly assembly = at.getInstantiator().newInstance().instantiate(at, platform);
- log.info("Test - created "+assembly);
-
- final Entity app = brooklynMgmt.getEntityManager().getEntity(assembly.getId());
- log.info("App - "+app);
- Assert.assertEquals(app.getDisplayName(), "sample-single-jboss");
-
- // locations set on AT in this yaml
- Assert.assertEquals(app.getLocations().size(), 1);
-
- Set<Task<?>> tasks = BrooklynTaskTags.getTasksInEntityContext(brooklynMgmt.getExecutionManager(), app);
- log.info("Waiting on "+tasks.size()+" task(s)");
- for (Task<?> t: tasks) {
- t.blockUntilEnded();
- }
-
- log.info("App started:");
- Entities.dumpInfo(app);
-
- Assert.assertEquals(app.getChildren().size(), 1);
- Assert.assertEquals(app.getChildren().iterator().next().getDisplayName(), "tomcat1");
- Assert.assertEquals(app.getChildren().iterator().next().getLocations().size(), 1);
-
- final String url = Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Callable<String>() {
- @Override public String call() throws Exception {
- String url = app.getChildren().iterator().next().getAttribute(JavaWebAppService.ROOT_URL);
- return checkNotNull(url, "url of %s", app);
- }});
-
- String site = Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Callable<String>() {
- @Override public String call() throws Exception {
- return new ResourceUtils(this).getResourceAsString(url);
- }});
-
- log.info("App URL for "+app+": "+url);
- Assert.assertTrue(url.contains("928"), "URL should be on port 9280+ based on config set in yaml, url "+url+", app "+app);
- Assert.assertTrue(site.toLowerCase().contains("hello"), site);
- Assert.assertTrue(!platform.assemblies().isEmpty());
- } catch (Exception e) {
- log.warn("Unable to instantiate "+at+" (rethrowing): "+e);
- throw Exceptions.propagate(e);
- }
- }
-
- public void testWithDbDeploy() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-and-db-with-function.yaml"));
- AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
-
- try {
- Assembly assembly = at.getInstantiator().newInstance().instantiate(at, platform);
- log.info("Test - created "+assembly);
-
- final Entity app = brooklynMgmt.getEntityManager().getEntity(assembly.getId());
- log.info("App - "+app);
-
- // locations set on individual services here
- Assert.assertEquals(app.getLocations().size(), 0);
-
- Iterator<ResolvableLink<PlatformComponent>> pcs = assembly.getPlatformComponents().links().iterator();
- PlatformComponent pc1 = pcs.next().resolve();
- Entity cluster = brooklynMgmt.getEntityManager().getEntity(pc1.getId());
- log.info("pc1 - "+pc1+" - "+cluster);
-
- PlatformComponent pc2 = pcs.next().resolve();
- log.info("pc2 - "+pc2);
-
- Set<Task<?>> tasks = BrooklynTaskTags.getTasksInEntityContext(brooklynMgmt.getExecutionManager(), app);
- log.info("Waiting on "+tasks.size()+" task(s)");
- AtomicInteger i = new AtomicInteger(0);
- for (Task<?> t: tasks) {
- t.blockUntilEnded();
- log.info("Completed task #" + i.incrementAndGet());
- }
-
- log.info("App started:");
- Entities.dumpInfo(app);
-
- EntityTestUtils.assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
- Assert.assertEquals(app.getAttribute(Attributes.SERVICE_UP), Boolean.TRUE);
-
- final String url = Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Callable<String>() {
- @Override public String call() throws Exception {
- Entity cluster = Iterables.getOnlyElement( Iterables.filter(app.getChildren(), WebAppService.class) );
- String url = cluster.getAttribute(JavaWebAppService.ROOT_URL);
- return checkNotNull(url, "url of %s", cluster);
- }});
-
- String site = Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Callable<String>() {
- @Override public String call() throws Exception {
- return new ResourceUtils(this).getResourceAsString(url);
- }});
-
- log.info("App URL for "+app+": "+url);
- Assert.assertTrue(url.contains("921"), "URL should be on port 9280+ based on config set in yaml, url "+url+", app "+app);
- Assert.assertTrue(site.toLowerCase().contains("hello"), site);
- Assert.assertTrue(!platform.assemblies().isEmpty());
-
- String dbPage = new ResourceUtils(this).getResourceAsString(Urls.mergePaths(url, "db.jsp"));
- Assert.assertTrue(dbPage.contains("Isaac Asimov"), "db.jsp does not mention Isaac Asimov, probably the DB did not get initialised:\n"+dbPage);
- } catch (Exception e) {
- log.warn("Unable to instantiate "+at+" (rethrowing): "+e);
- throw Exceptions.propagate(e);
- }
- }
-
- public void testWithPolicyDeploy() {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-and-db-with-policy.yaml"));
- AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
-
- try {
- Assembly assembly = at.getInstantiator().newInstance().instantiate(at, platform);
- log.info("Test - created "+assembly);
-
- final Entity app = brooklynMgmt.getEntityManager().getEntity(assembly.getId());
- log.info("App - "+app);
-
- // locations set on individual services here
- Assert.assertEquals(app.getLocations().size(), 0);
-
- Set<Task<?>> tasks = BrooklynTaskTags.getTasksInEntityContext(brooklynMgmt.getExecutionManager(), app);
- log.info("Waiting on "+tasks.size()+" task(s)");
- for (Task<?> t: tasks) {
- t.blockUntilEnded();
- }
-
- log.info("App started:");
- Entities.dumpInfo(app);
-
- Iterator<ResolvableLink<PlatformComponent>> pcs = assembly.getPlatformComponents().links().iterator();
- PlatformComponent clusterComponent = null;
- while (pcs.hasNext() && clusterComponent == null) {
- PlatformComponent component = pcs.next().resolve();
- if (component.getName().equals("My Web with Policy"))
- clusterComponent = component;
- }
- Assert.assertNotNull(clusterComponent, "Database PlatformComponent not found");
- Entity cluster = brooklynMgmt.getEntityManager().getEntity(clusterComponent.getId());
- log.info("pc1 - "+clusterComponent+" - "+cluster);
-
- Assert.assertEquals(cluster.policies().size(), 1);
- Policy policy = cluster.policies().iterator().next();
- Assert.assertNotNull(policy);
- Assert.assertTrue(policy instanceof AutoScalerPolicy, "policy="+policy);
- Assert.assertEquals(policy.getConfig(AutoScalerPolicy.MAX_POOL_SIZE), (Integer)5);
- Assert.assertEquals(policy.getConfig(AutoScalerPolicy.MIN_POOL_SIZE), (Integer)1);
- Assert.assertEquals(policy.getConfig(AutoScalerPolicy.METRIC), DynamicWebAppCluster.REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE);
- Assert.assertEquals(policy.getConfig(AutoScalerPolicy.METRIC_LOWER_BOUND), (Integer)10);
- Assert.assertEquals(policy.getConfig(AutoScalerPolicy.METRIC_UPPER_BOUND), (Integer)100);
- Assert.assertTrue(policy.isRunning());
-
- EntityTestUtils.assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
- Assert.assertEquals(app.getAttribute(Attributes.SERVICE_UP), Boolean.TRUE);
-
- final String url = Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Callable<String>() {
- @Override public String call() throws Exception {
- Entity cluster = Iterables.getOnlyElement( Iterables.filter(app.getChildren(), WebAppService.class) );
- String url = cluster.getAttribute(JavaWebAppService.ROOT_URL);
- return checkNotNull(url, "url of %s", cluster);
- }});
-
- String site = Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Callable<String>() {
- @Override public String call() throws Exception {
- return new ResourceUtils(this).getResourceAsString(url);
- }});
-
- log.info("App URL for "+app+": "+url);
- Assert.assertTrue(url.contains("921"), "URL should be on port 9280+ based on config set in yaml, url "+url+", app "+app);
- Assert.assertTrue(site.toLowerCase().contains("hello"), site);
- Assert.assertTrue(!platform.assemblies().isEmpty());
-
- String dbPage = new ResourceUtils(this).getResourceAsString(Urls.mergePaths(url, "db.jsp"));
- Assert.assertTrue(dbPage.contains("Isaac Asimov"), "db.jsp does not mention Isaac Asimov, probably the DB did not get initialised:\n"+dbPage);
- } catch (Exception e) {
- log.warn("Unable to instantiate "+at+" (rethrowing): "+e);
- throw Exceptions.propagate(e);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsMatchingTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsMatchingTest.java b/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsMatchingTest.java
deleted file mode 100644
index 92e29b9..0000000
--- a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/camp/JavaWebAppsMatchingTest.java
+++ /dev/null
@@ -1,144 +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 org.apache.brooklyn.qa.camp;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatform;
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys;
-import org.apache.brooklyn.camp.spi.AssemblyTemplate;
-import org.apache.brooklyn.camp.spi.PlatformComponentTemplate;
-import org.apache.brooklyn.camp.spi.PlatformRootSummary;
-import org.apache.brooklyn.camp.spi.collection.ResolvableLink;
-import org.apache.brooklyn.camp.spi.pdp.DeploymentPlan;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.ResourceUtils;
-import org.apache.brooklyn.util.core.task.DeferredSupplier;
-import org.apache.brooklyn.util.stream.Streams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-@Test
-public class JavaWebAppsMatchingTest {
-
- private static final Logger log = LoggerFactory.getLogger(JavaWebAppsMatchingTest.class);
-
- private ManagementContext brooklynMgmt;
- private BrooklynCampPlatform platform;
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- brooklynMgmt = new LocalManagementContextForTests();
- platform = new BrooklynCampPlatform(
- PlatformRootSummary.builder().name("Brooklyn CAMP Platform").build(),
- brooklynMgmt);
- }
-
- // FIXME all commented-out lines require camp server
-
- @AfterMethod(alwaysRun=true)
- public void teardown() {
- if (brooklynMgmt!=null) Entities.destroyAll(brooklynMgmt);
- }
-
- public void testSimpleYamlParse() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-simple.yaml"));
- DeploymentPlan plan = platform.pdp().parseDeploymentPlan(input);
- log.info("DP is:\n"+plan.toString());
- Assert.assertEquals(plan.getServices().size(), 1);
- Assert.assertEquals(plan.getName(), "sample-single-jboss");
- }
-
- public void testSimpleYamlMatch() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-simple.yaml"));
- AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
-
- Assert.assertEquals(at.getName(), "sample-single-jboss");
- }
-
- public void testExampleFunctionsYamlMatch() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("example-with-function.yaml"));
-
- DeploymentPlan plan = platform.pdp().parseDeploymentPlan(input);
- log.info("DP is:\n"+plan.toString());
- Map<?,?> cfg1 = (Map<?, ?>) plan.getServices().get(0).getCustomAttributes().get(BrooklynCampReservedKeys.BROOKLYN_CONFIG);
- Map<?,?> cfg = MutableMap.copyOf(cfg1);
-
- Assert.assertEquals(cfg.remove("literalValue1"), "$brooklyn: is a fun place");
- Assert.assertEquals(cfg.remove("literalValue2"), "$brooklyn: is a fun place");
- Assert.assertEquals(cfg.remove("literalValue3"), "$brooklyn: is a fun place");
- Assert.assertEquals(cfg.remove("literalValue4"), "$brooklyn: is a fun place");
- Assert.assertEquals(cfg.remove("$brooklyn:1"), "key to the city");
- Assert.assertTrue(cfg.isEmpty(), ""+cfg);
-
- Assert.assertEquals(plan.getName(), "example-with-function");
- Assert.assertEquals(plan.getCustomAttributes().get("location"), "localhost");
-
- AssemblyTemplate at = platform.pdp().registerDeploymentPlan(plan);
-
- Assert.assertEquals(at.getName(), "example-with-function");
- Assert.assertEquals(at.getCustomAttributes().get("location"), "localhost");
-
- PlatformComponentTemplate pct = at.getPlatformComponentTemplates().links().iterator().next().resolve();
- Object cfg2 = pct.getCustomAttributes().get(BrooklynCampReservedKeys.BROOKLYN_CONFIG);
- Assert.assertEquals(cfg2, cfg1);
- }
-
- public void testJavaAndDbWithFunctionYamlMatch() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-and-db-with-function.yaml"));
- assertWebDbWithFunctionValid(input);
- }
-
- public void testJavaAndDbWithFunctionYamlMatch2() throws IOException {
- Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-and-db-with-function-2.yaml"));
- assertWebDbWithFunctionValid(input);
- }
-
- protected void assertWebDbWithFunctionValid(Reader input) {
- DeploymentPlan plan = platform.pdp().parseDeploymentPlan(input);
- log.info("DP is:\n"+plan.toString());
-
- AssemblyTemplate at = platform.pdp().registerDeploymentPlan(plan);
-
- Assert.assertEquals(at.getName(), "java-cluster-db-example");
-
- Iterator<ResolvableLink<PlatformComponentTemplate>> pcti = at.getPlatformComponentTemplates().links().iterator();
- PlatformComponentTemplate pct1 = pcti.next().resolve();
-
- PlatformComponentTemplate pct2 = pcti.next().resolve();
-
- Map<?,?> config = (Map<?, ?>) pct1.getCustomAttributes().get(BrooklynCampReservedKeys.BROOKLYN_CONFIG);
- Map<?,?> javaSysProps = (Map<?, ?>) config.get("java.sysprops");
- Object dbUrl = javaSysProps.get("brooklyn.example.db.url");
- Assert.assertTrue(dbUrl instanceof DeferredSupplier<?>, "url is: "+dbUrl);
-
- Assert.assertEquals(pct2.getCustomAttributes().get("planId"), "db");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/02abbab0/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java
----------------------------------------------------------------------
diff --git a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java b/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java
deleted file mode 100644
index 33c4c42..0000000
--- a/brooklyn-library/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java
+++ /dev/null
@@ -1,64 +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 org.apache.brooklyn.qa.downstreamparent;
-
-import static org.testng.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.brooklyn.util.net.Networking;
-import org.apache.maven.it.Verifier;
-import org.apache.maven.shared.utils.io.FileUtils;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-public class DownstreamParentTest {
-
- private static final String PROJECTS_DIR = "src/test/projects";
- private static final String WORK_DIR = "target/ut/";
-
- /**
- * Asserts that a trivial project using brooklyn-downstream-parent can be
- * loaded into Brooklyn's catalogue and its entities deployed.
- */
- @Test(groups = "Integration")
- public void testDownstreamProjectsCanBeLoadedIntoBrooklynCatalogByDefault() throws Exception {
- int port = Networking.nextAvailablePort(57000);
- File dir = getBasedir("downstream-parent-test");
- Verifier verifier = new Verifier(dir.getAbsolutePath());
- verifier.setMavenDebug(true);
- verifier.executeGoal("post-integration-test", ImmutableMap.of(
- "bindPort", String.valueOf(port)));
- verifier.verifyErrorFreeLog();
- verifier.verifyTextInLog("Hello from the init method of the HelloEntity");
- }
-
- /** Replicates the behaviour of getBasedir in JUnit's TestResources class */
- public File getBasedir(String project) throws IOException {
- File src = (new File(PROJECTS_DIR, project)).getCanonicalFile();
- assertTrue(src.isDirectory(), "Test project directory does not exist: " + src.getPath());
- File basedir = (new File(WORK_DIR, getClass().getSimpleName() + "_" + project)).getCanonicalFile();
- FileUtils.deleteDirectory(basedir);
- assertTrue(basedir.mkdirs(), "Test project working directory created");
- FileUtils.copyDirectoryStructure(src, basedir);
- return basedir;
- }
-}