You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/09/29 13:51:46 UTC
[1/3] brooklyn-server git commit: Tidy generics in HttpFeed
Repository: brooklyn-server
Updated Branches:
refs/heads/master 15429e209 -> aca3a4997
Tidy generics in HttpFeed
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6fe6bb7d
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6fe6bb7d
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6fe6bb7d
Branch: refs/heads/master
Commit: 6fe6bb7df70f986f40f88bcc2f9b040466d6da76
Parents: 15429e2
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 29 12:29:06 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 29 12:29:06 2016 +0100
----------------------------------------------------------------------
core/src/main/java/org/apache/brooklyn/feed/http/HttpFeed.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6fe6bb7d/core/src/main/java/org/apache/brooklyn/feed/http/HttpFeed.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/feed/http/HttpFeed.java b/core/src/main/java/org/apache/brooklyn/feed/http/HttpFeed.java
index a0566ad..b8cc8e7 100644
--- a/core/src/main/java/org/apache/brooklyn/feed/http/HttpFeed.java
+++ b/core/src/main/java/org/apache/brooklyn/feed/http/HttpFeed.java
@@ -394,7 +394,7 @@ public class HttpFeed extends AbstractFeed {
.build());
return createHttpToolRespose(response);
}};
- getPoller().scheduleAtFixedRate(pollJob, new DelegatingPollHandler(handlers), minPeriod);
+ getPoller().scheduleAtFixedRate(pollJob, new DelegatingPollHandler<HttpToolResponse>(handlers), minPeriod);
}
}
[2/3] brooklyn-server git commit: BROOKLYN-354: Add
SoftwareProcessHttpFeedRebindTest
Posted by al...@apache.org.
BROOKLYN-354: Add SoftwareProcessHttpFeedRebindTest
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/598059c2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/598059c2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/598059c2
Branch: refs/heads/master
Commit: 598059c2ffd40fdf30932fc05bd9bb4a893c96f6
Parents: 6fe6bb7
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 29 12:29:42 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 29 14:49:07 2016 +0100
----------------------------------------------------------------------
software/base/pom.xml | 5 +
...SoftwareProcessEntityHttpFeedRebindTest.java | 196 +++++++++++++++++++
2 files changed, 201 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/598059c2/software/base/pom.xml
----------------------------------------------------------------------
diff --git a/software/base/pom.xml b/software/base/pom.xml
index daec1dc..28f97d9 100644
--- a/software/base/pom.xml
+++ b/software/base/pom.xml
@@ -128,6 +128,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>com.google.mockwebserver</groupId>
+ <artifactId>mockwebserver</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.brooklyn</groupId>
<artifactId>brooklyn-core</artifactId>
<version>${project.version}</version>
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/598059c2/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityHttpFeedRebindTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityHttpFeedRebindTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityHttpFeedRebindTest.java
new file mode 100644
index 0000000..6272707
--- /dev/null
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityHttpFeedRebindTest.java
@@ -0,0 +1,196 @@
+/*
+ * 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.entity.software.base;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.Attributes;
+import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
+import org.apache.brooklyn.core.entity.EntityAsserts;
+import org.apache.brooklyn.core.feed.ConfigToAttributes;
+import org.apache.brooklyn.core.location.access.BrooklynAccessUtils;
+import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp;
+import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.feed.http.HttpFeed;
+import org.apache.brooklyn.feed.http.HttpPollConfig;
+import org.apache.brooklyn.feed.http.HttpValueFunctions;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.util.core.http.BetterMockWebServer;
+import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+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.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.net.HostAndPort;
+import com.google.mockwebserver.MockResponse;
+
+/**
+ * Test for https://issues.apache.org/jira/browse/BROOKLYN-354.
+ *
+ * This recreates the pattern used in NginxController's HttpFeed.
+ */
+public class SoftwareProcessEntityHttpFeedRebindTest extends RebindTestFixtureWithApp {
+
+ @SuppressWarnings("unused")
+ private static final Logger LOG = LoggerFactory.getLogger(SoftwareProcessEntityHttpFeedRebindTest.class);
+
+ final static AttributeSensor<String> SENSOR_STRING = Sensors.newStringSensor("aString", "");
+ final static ConfigKey<String> MOCK_URL = ConfigKeys.newStringConfigKey("mock.url", "");
+ final static ConfigKey<Long> HTTP_POLL_PERIOD = ConfigKeys.newLongConfigKey("httpPollPeriod", "Poll period (in milliseconds)", 50L);
+
+ protected BetterMockWebServer server;
+ protected URL baseUrl;
+
+ @BeforeMethod(alwaysRun=true)
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ server = BetterMockWebServer.newInstanceLocalhost();
+ for (int i = 0; i < 1000; i++) {
+ server.enqueue(new MockResponse().setResponseCode(200).addHeader("content-type: application/json").setBody("\""+i+"\""));
+ }
+ server.play();
+ baseUrl = server.getUrl("/");
+ }
+
+ @AfterMethod(alwaysRun=true)
+ @Override
+ public void tearDown() throws Exception {
+ try {
+ super.tearDown();
+ } finally {
+ if (server != null) server.shutdown();
+ }
+ }
+
+ @Override
+ protected boolean enablePersistenceBackups() {
+ return false;
+ }
+
+ @Test
+ public void testRebind() throws Exception {
+ runRebindWithHttpFeed(false);
+ }
+
+ /**
+ * Test for https://issues.apache.org/jira/browse/BROOKLYN-354.
+ *
+ * The entity's {@link HttpFeed} will call {@link BrooklynAccessUtils#getBrooklynAccessibleAddress(org.apache.brooklyn.api.entity.Entity, int)}.
+ * In BROOKLYN-354, we saw that this threw an exception if {@link Attributes#HOSTNAME} was null, which caused rebind to fail.
+ *
+ * If hostname is null, then we subsequent expect polling to fail because it will not know
+ * what URL to use (in {@link BrooklynAccessUtils#getBrooklynAccessibleAddress(org.apache.brooklyn.api.entity.Entity, int)}).
+ * That is something we could look at changing in the future, perhaps.
+ */
+ @Test
+ public void testRebindWithHostnameNull() throws Exception {
+ runRebindWithHttpFeed(true);
+ }
+
+ protected void runRebindWithHttpFeed(boolean setHostnameToNull) throws Exception {
+ EmptySoftwareProcess origEntity = origApp.createAndManageChild(EntitySpec.create(EmptySoftwareProcess.class)
+ .impl(SoftwareProcessWithHttpFeedImpl.class)
+ .configure(BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION, true)
+ .configure(EmptySoftwareProcess.USE_SSH_MONITORING, false)
+ .configure(MOCK_URL, baseUrl.toString())
+ .location(LocationSpec.create(SshMachineLocation.class)
+ .configure("address", baseUrl.getHost())
+ .configure(SshMachineLocation.SSH_TOOL_CLASS, RecordingSshTool.class.getName())));
+ origApp.start(ImmutableList.<Location>of());
+ if (setHostnameToNull) {
+ origEntity.sensors().set(EmptySoftwareProcess.HOSTNAME, null);
+ }
+
+ newApp = rebind();
+ EmptySoftwareProcess newEntity = (EmptySoftwareProcess) Iterables.find(newApp.getChildren(), Predicates.instanceOf(EmptySoftwareProcess.class));
+
+ if (setHostnameToNull) {
+ EntityAsserts.assertAttributeEqualsEventually(newEntity, SENSOR_STRING, "Failed");
+ } else {
+ EntityAsserts.assertAttributeChangesEventually(newEntity, SENSOR_STRING);
+ }
+ }
+
+ public static class SoftwareProcessWithHttpFeedImpl extends EmptySoftwareProcessImpl {
+ private HttpFeed httpFeed;
+
+ @Override
+ public void connectSensors() {
+ super.connectSensors();
+
+ ConfigToAttributes.apply(this);
+
+ // "up" is defined as returning a valid HTTP response from nginx (including a 404 etc)
+ httpFeed = addFeed(HttpFeed.builder()
+ .uniqueTag("nginx-poll")
+ .entity(this)
+ .period(getConfig(HTTP_POLL_PERIOD))
+ .baseUri(new UrlInferencer())
+ .poll(new HttpPollConfig<String>(SENSOR_STRING)
+ .onResult(HttpValueFunctions.stringContentsFunction())
+ .setOnException("Failed")
+ .suppressDuplicates(true))
+ .build());
+ }
+
+ @Override
+ protected void disconnectSensors() {
+ super.disconnectSensors();
+ if (httpFeed != null) httpFeed.stop();
+ }
+
+ private class UrlInferencer implements Supplier<URI> {
+ @Override public URI get() {
+ return URI.create(inferUrl());
+ }
+ }
+
+ /** returns URL, if it can be inferred; null otherwise */
+ protected String inferUrl() {
+ URI mockUrl = URI.create(config().get(MOCK_URL));
+ Integer port = mockUrl.getPort();
+ HostAndPort accessible = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, port);
+ if (accessible!=null) {
+ try {
+ URI result = new URI(mockUrl.getScheme(), mockUrl.getUserInfo(), accessible.getHostText(), accessible.getPort(), mockUrl.getPath(), mockUrl.getQuery(), mockUrl.getFragment());
+ return result.toString();
+ } catch (URISyntaxException e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+ return mockUrl.toString();
+ }
+ }
+}
[3/3] brooklyn-server git commit: This closes #360
Posted by al...@apache.org.
This closes #360
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/aca3a499
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/aca3a499
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/aca3a499
Branch: refs/heads/master
Commit: aca3a4997fda5025bfda80014e11a44aaad08dc8
Parents: 15429e2 598059c
Author: Aled Sage <al...@gmail.com>
Authored: Thu Sep 29 14:51:22 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Sep 29 14:51:22 2016 +0100
----------------------------------------------------------------------
.../org/apache/brooklyn/feed/http/HttpFeed.java | 2 +-
software/base/pom.xml | 5 +
...SoftwareProcessEntityHttpFeedRebindTest.java | 196 +++++++++++++++++++
3 files changed, 202 insertions(+), 1 deletion(-)
----------------------------------------------------------------------