You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ri...@apache.org on 2017/05/10 14:41:41 UTC

brooklyn-server git commit: Fix BROOKLYN-493 Rebind fails when using WinRmCommandSensor

Repository: brooklyn-server
Updated Branches:
  refs/heads/0.11.x 94eb57793 -> 8b403db7c


Fix BROOKLYN-493 Rebind fails when using WinRmCommandSensor

Add tests for CmdFeed rebind

(cherry picked from commit 9a351349933cf35abc4f3aa7764a5671646bb3a7)


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/8b403db7
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/8b403db7
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/8b403db7

Branch: refs/heads/0.11.x
Commit: 8b403db7cd3805ad9563e3fa97268f18c0e231fd
Parents: 94eb577
Author: Valentin Aitken <bo...@gmail.com>
Authored: Wed Apr 26 10:15:35 2017 +0300
Committer: Richard Downer <ri...@apache.org>
Committed: Wed May 10 15:40:48 2017 +0100

----------------------------------------------------------------------
 .../rebind/RebindAbstractCommandFeedTest.java   |  61 +++++++++
 .../mgmt/rebind/RebindHistoricSshFeedTest.java  |  46 +------
 .../apache/brooklyn/feed/windows/CmdFeed.java   |   6 +
 .../feed/windows/RebinWinrmCmdFeedTest.java     |  38 ++++++
 .../feed/windows/winrm-cmd-feed-a8pno3muco      | 123 +++++++++++++++++++
 ...winrm-cmd-feed-no-bundle-prefixes-akc24nlh2k | 121 ++++++++++++++++++
 6 files changed, 350 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b403db7/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindAbstractCommandFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindAbstractCommandFeedTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindAbstractCommandFeedTest.java
new file mode 100644
index 0000000..2c419a1
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindAbstractCommandFeedTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.core.mgmt.rebind;
+
+import com.google.common.io.Files;
+import org.apache.brooklyn.api.mgmt.rebind.RebindExceptionHandler;
+import org.apache.brooklyn.api.mgmt.rebind.RebindManager;
+import org.apache.brooklyn.api.objs.BrooklynObjectType;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.util.os.Os;
+import org.apache.brooklyn.util.stream.Streams;
+
+import java.io.File;
+
+public abstract class RebindAbstractCommandFeedTest extends RebindTestFixtureWithApp {
+
+    @Override
+    protected TestApplication rebind() throws Exception {
+        RebindExceptionHandler exceptionHandler = RebindExceptionHandlerImpl.builder()
+                .danglingRefFailureMode(RebindManager.RebindFailureMode.FAIL_AT_END)
+                .rebindFailureMode(RebindManager.RebindFailureMode.FAIL_AT_END)
+                .addConfigFailureMode(RebindManager.RebindFailureMode.FAIL_AT_END)
+                .addPolicyFailureMode(RebindManager.RebindFailureMode.FAIL_AT_END)
+                .loadPolicyFailureMode(RebindManager.RebindFailureMode.FAIL_AT_END)
+                .build();
+        return super.rebind(RebindOptions.create().exceptionHandler(exceptionHandler));
+    }
+
+    protected void addMemento(BrooklynObjectType type, String label, String id) throws Exception {
+        String mementoFilename = label+"-"+id;
+        String memento = Streams.readFullyString(getClass().getResourceAsStream(mementoFilename));
+
+        File persistedFile = getPersistanceFile(type, id);
+        Files.write(memento.getBytes(), persistedFile);
+    }
+
+    protected File getPersistanceFile(BrooklynObjectType type, String id) {
+        String dir;
+        switch (type) {
+            case FEED: dir = "feeds"; break;
+            default: throw new UnsupportedOperationException("type="+type);
+        }
+        return new File(mementoDir, Os.mergePaths(dir, id));
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b403db7/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricSshFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricSshFeedTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricSshFeedTest.java
index 548660c..a612bb0 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricSshFeedTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricSshFeedTest.java
@@ -18,26 +18,11 @@
  */
 package org.apache.brooklyn.core.mgmt.rebind;
 
-import java.io.File;
-
-import org.apache.brooklyn.api.mgmt.rebind.RebindExceptionHandler;
-import org.apache.brooklyn.api.mgmt.rebind.RebindManager.RebindFailureMode;
 import org.apache.brooklyn.api.objs.BrooklynObjectType;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.stream.Streams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.io.Files;
-
-public class RebindHistoricSshFeedTest extends RebindTestFixtureWithApp {
-
-    @SuppressWarnings("unused")
-    private static final Logger log = LoggerFactory.getLogger(RebindHistoricSshFeedTest.class);
-
+public class RebindHistoricSshFeedTest extends RebindAbstractCommandFeedTest {
     @Override
     @BeforeMethod(alwaysRun=true)
     public void setUp() throws Exception {
@@ -63,33 +48,4 @@ public class RebindHistoricSshFeedTest extends RebindTestFixtureWithApp {
         addMemento(BrooklynObjectType.FEED, "ssh-feed-no-bundle-prefixes", "zv7t8bim62");
         rebind();
     }
-    
-    @Override
-    protected TestApplication rebind() throws Exception {
-        RebindExceptionHandler exceptionHandler = RebindExceptionHandlerImpl.builder()
-                .danglingRefFailureMode(RebindFailureMode.FAIL_AT_END)
-                .rebindFailureMode(RebindFailureMode.FAIL_AT_END)
-                .addConfigFailureMode(RebindFailureMode.FAIL_AT_END)
-                .addPolicyFailureMode(RebindFailureMode.FAIL_AT_END)
-                .loadPolicyFailureMode(RebindFailureMode.FAIL_AT_END)
-                .build();
-        return super.rebind(RebindOptions.create().exceptionHandler(exceptionHandler));
-    }
-    
-    protected void addMemento(BrooklynObjectType type, String label, String id) throws Exception {
-        String mementoFilename = label+"-"+id;
-        String memento = Streams.readFullyString(getClass().getResourceAsStream(mementoFilename));
-        
-        File persistedFile = getPersistanceFile(type, id);
-        Files.write(memento.getBytes(), persistedFile);
-    }
-    
-    protected File getPersistanceFile(BrooklynObjectType type, String id) {
-        String dir;
-        switch (type) {
-            case FEED: dir = "feeds"; break;
-            default: throw new UnsupportedOperationException("type="+type);
-        }
-        return new File(mementoDir, Os.mergePaths(dir, id));
-    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b403db7/software/winrm/src/main/java/org/apache/brooklyn/feed/windows/CmdFeed.java
----------------------------------------------------------------------
diff --git a/software/winrm/src/main/java/org/apache/brooklyn/feed/windows/CmdFeed.java b/software/winrm/src/main/java/org/apache/brooklyn/feed/windows/CmdFeed.java
index 883b291..4cf3afb 100644
--- a/software/winrm/src/main/java/org/apache/brooklyn/feed/windows/CmdFeed.java
+++ b/software/winrm/src/main/java/org/apache/brooklyn/feed/windows/CmdFeed.java
@@ -62,6 +62,12 @@ public class CmdFeed extends AbstractCommandFeed {
         return new CmdFeed.Builder();
     }
 
+    /**
+     * For rebind; do not call directly; use builder
+     */
+    public CmdFeed() {
+    }
+
     protected CmdFeed(final Builder builder) {
         super(builder);
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b403db7/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/RebinWinrmCmdFeedTest.java
----------------------------------------------------------------------
diff --git a/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/RebinWinrmCmdFeedTest.java b/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/RebinWinrmCmdFeedTest.java
new file mode 100644
index 0000000..dca9c01
--- /dev/null
+++ b/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/RebinWinrmCmdFeedTest.java
@@ -0,0 +1,38 @@
+/*
+ * 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.feed.windows;
+
+import org.apache.brooklyn.api.objs.BrooklynObjectType;
+import org.apache.brooklyn.core.mgmt.rebind.RebindAbstractCommandFeedTest;
+import org.testng.annotations.Test;
+
+public class RebinWinrmCmdFeedTest extends RebindAbstractCommandFeedTest {
+
+    @Test
+    public void testSshFeed_2017_04() throws Exception {
+        addMemento(BrooklynObjectType.FEED, "winrm-cmd-feed", "a8pno3muco");
+        rebind();
+    }
+
+    @Test
+    public void testSshFeed_2017_04_withoutBundlePrefixes() throws Exception {
+        addMemento(BrooklynObjectType.FEED, "winrm-cmd-feed-no-bundle-prefixes", "akc24nlh2k");
+        rebind();
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b403db7/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-a8pno3muco
----------------------------------------------------------------------
diff --git a/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-a8pno3muco b/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-a8pno3muco
new file mode 100644
index 0000000..5b13025
--- /dev/null
+++ b/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-a8pno3muco
@@ -0,0 +1,123 @@
+<!--
+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.
+-->
+
+<feed>
+  <brooklynVersion>0.11.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.software-winrm:org.apache.brooklyn.feed.windows.CmdFeed</type>
+  <id>a8pno3muco</id>
+  <displayName>org.apache.brooklyn.feed.windows.CmdFeed</displayName>
+  <tags>
+    <string>CmdFeed[ssh[echo &quot;test&quot;-&gt;test.sensor]]</string>
+  </tags>
+  <uniqueTag>CmdFeed[ssh[echo &quot;test&quot;-&gt;test.sensor]]</uniqueTag>
+  <config>
+    <feed.onlyIfServiceUp type="boolean">true</feed.onlyIfServiceUp>
+    <machine>
+      <null/>
+    </machine>
+    <execAsCommand type="boolean">false</execAsCommand>
+    <polls>
+      <com.google.guava:com.google.common.collect.HashMultimap serialization="custom">
+        <unserializable-parents/>
+        <com.google.guava:com.google.common.collect.HashMultimap>
+          <default/>
+          <int>2</int>
+          <int>1</int>
+          <org.apache.brooklyn.core:org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier>
+            <command class="org.apache.brooklyn.software-winrm:org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor$2">
+              <outer-class>
+                <name>test.sensor</name>
+                <period>
+                  <nanos>30000000000</nanos>
+                </period>
+                <type>java.lang.String</type>
+                <sensor class="attributeSensor">
+                  <type>java.lang.String</type>
+                  <name>test.sensor</name>
+                  <description>test.sensor</description>
+                  <persistence>REQUIRED</persistence>
+                </sensor>
+                <params>
+                  <config>
+                    <name>test.sensor</name>
+                    <period>30s</period>
+                    <command>echo &quot;test&quot;</command>
+                  </config>
+                  <unusedConfig/>
+                  <live>false</live>
+                  <sealed>false</sealed>
+                </params>
+                <command>echo &quot;test&quot;</command>
+              </outer-class>
+            </command>
+            <env class="org.apache.brooklyn.core:org.apache.brooklyn.feed.CommandPollConfig$CombiningEnvSupplier">
+              <dynamicEnvironmentSupplier class="MutableList" serialization="custom">
+                <unserializable-parents/>
+                <list>
+                  <default>
+                    <size>1</size>
+                  </default>
+                  <int>1</int>
+                  <org.apache.brooklyn.software-winrm:org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor_-1>
+                    <outer-class reference="../../../../../command/outer-class"/>
+                  </org.apache.brooklyn.software-winrm:org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor_-1>
+                </list>
+              </dynamicEnvironmentSupplier>
+            </env>
+          </org.apache.brooklyn.core:org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier>
+          <int>1</int>
+          <org.apache.brooklyn.core:org.apache.brooklyn.feed.CommandPollConfig>
+            <sensor class="attributeSensor" reference="../../org.apache.brooklyn.core:org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier/command/outer-class/sensor"/>
+            <onsuccess class="com.google.guava:com.google.common.base.Functions$FunctionComposition">
+              <g class="org.apache.brooklyn.software-winrm:org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor$3">
+                <outer-class reference="../../../../org.apache.brooklyn.core:org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier/command/outer-class"/>
+              </g>
+              <f class="org.apache.brooklyn.core:org.apache.brooklyn.feed.ssh.SshValueFunctions$Stdout"/>
+            </onsuccess>
+            <onfailure class="com.google.guava:com.google.common.base.Functions$ConstantFunction"/>
+            <onexception class="com.google.guava:com.google.common.base.Functions$ConstantFunction" reference="../onfailure"/>
+            <checkSuccess class="org.apache.brooklyn.utils-common:org.apache.brooklyn.util.guava.Functionals$1FunctionAsPredicate">
+              <val_-f class="com.google.guava:com.google.common.base.Functions$FunctionComposition">
+                <g class="com.google.guava:com.google.common.base.Functions$PredicateFunction">
+                  <predicate class="com.google.guava:com.google.common.base.Predicates$IsEqualToPredicate">
+                    <target class="int">0</target>
+                  </predicate>
+                </g>
+                <f class="org.apache.brooklyn.core:org.apache.brooklyn.feed.ssh.SshValueFunctions$ExitStatus"/>
+              </val_-f>
+            </checkSuccess>
+            <suppressDuplicates>false</suppressDuplicates>
+            <enabled>true</enabled>
+            <period>30000</period>
+            <commandSupplier class="org.apache.brooklyn.software-winrm:org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor$2" reference="../../org.apache.brooklyn.core:org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier/command"/>
+            <dynamicEnvironmentSupplier class="MutableList" serialization="custom">
+              <unserializable-parents/>
+              <list>
+                <default>
+                  <size>0</size>
+                </default>
+                <int>0</int>
+              </list>
+            </dynamicEnvironmentSupplier>
+          </org.apache.brooklyn.core:org.apache.brooklyn.feed.CommandPollConfig>
+        </com.google.guava:com.google.common.collect.HashMultimap>
+      </com.google.guava:com.google.common.collect.HashMultimap>
+    </polls>
+  </config>
+</feed>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b403db7/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-no-bundle-prefixes-akc24nlh2k
----------------------------------------------------------------------
diff --git a/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-no-bundle-prefixes-akc24nlh2k b/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-no-bundle-prefixes-akc24nlh2k
new file mode 100644
index 0000000..1e01745
--- /dev/null
+++ b/software/winrm/src/test/resources/org/apache/brooklyn/feed/windows/winrm-cmd-feed-no-bundle-prefixes-akc24nlh2k
@@ -0,0 +1,121 @@
+<!--
+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.
+-->
+
+<feed>
+  <brooklynVersion>0.11.0-SNAPSHOT</brooklynVersion>
+  <type>org.apache.brooklyn.feed.windows.CmdFeed</type>
+  <id>akc24nlh2k</id>
+  <displayName>org.apache.brooklyn.feed.windows.CmdFeed</displayName>
+  <searchPath class="ImmutableList"/>
+  <tags>
+    <string>CmdFeed[ssh[echo &quot;test&quot;-&gt;test.sensor]]</string>
+  </tags>
+  <uniqueTag>CmdFeed[ssh[echo &quot;test&quot;-&gt;test.sensor]]</uniqueTag>
+  <config>
+    <machine>
+      <null/>
+    </machine>
+    <execAsCommand type="boolean">false</execAsCommand>
+    <polls>
+      <com.google.common.collect.HashMultimap serialization="custom">
+        <unserializable-parents/>
+        <com.google.common.collect.HashMultimap>
+          <default/>
+          <int>2</int>
+          <int>1</int>
+          <org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier>
+            <command class="org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor$2">
+              <outer-class>
+                <name>test.sensor</name>
+                <period>
+                  <nanos>30000000000</nanos>
+                </period>
+                <type>java.lang.String</type>
+                <sensor class="attributeSensor">
+                  <type>java.lang.String</type>
+                  <name>test.sensor</name>
+                  <description>test.sensor</description>
+                  <persistence>REQUIRED</persistence>
+                </sensor>
+                <params>
+                  <config>
+                    <name>test.sensor</name>
+                    <period>30s</period>
+                    <command>echo &quot;test&quot;</command>
+                  </config>
+                  <unusedConfig/>
+                  <live>false</live>
+                  <sealed>false</sealed>
+                </params>
+                <command>echo &quot;test&quot;</command>
+              </outer-class>
+            </command>
+            <env class="org.apache.brooklyn.feed.CommandPollConfig$CombiningEnvSupplier">
+              <dynamicEnvironmentSupplier class="MutableList" serialization="custom">
+                <unserializable-parents/>
+                <list>
+                  <default>
+                    <size>0</size>
+                  </default>
+                  <int>0</int>
+                </list>
+              </dynamicEnvironmentSupplier>
+            </env>
+          </org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier>
+          <int>1</int>
+          <org.apache.brooklyn.feed.CommandPollConfig>
+            <sensor class="attributeSensor" reference="../../org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier/command/outer-class/sensor"/>
+            <onsuccess class="com.google.common.base.Functions$FunctionComposition">
+              <g class="org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor$3">
+                <outer-class reference="../../../../org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier/command/outer-class"/>
+              </g>
+              <f class="org.apache.brooklyn.feed.ssh.SshValueFunctions$Stdout"/>
+            </onsuccess>
+            <onfailure class="com.google.common.base.Functions$ConstantFunction"/>
+            <onexception class="com.google.common.base.Functions$ConstantFunction" reference="../onfailure"/>
+            <checkSuccess class="org.apache.brooklyn.util.guava.Functionals$1FunctionAsPredicate">
+              <val_-f class="com.google.common.base.Functions$FunctionComposition">
+                <g class="com.google.common.base.Functions$PredicateFunction">
+                  <predicate class="com.google.common.base.Predicates$IsEqualToPredicate">
+                    <target class="int">0</target>
+                  </predicate>
+                </g>
+                <f class="org.apache.brooklyn.feed.ssh.SshValueFunctions$ExitStatus"/>
+              </val_-f>
+            </checkSuccess>
+            <suppressDuplicates>false</suppressDuplicates>
+            <enabled>true</enabled>
+            <period>30000</period>
+            <commandSupplier class="org.apache.brooklyn.core.sensor.windows.WinRmCommandSensor$2" reference="../../org.apache.brooklyn.feed.AbstractCommandFeed_-CommandPollIdentifier/command"/>
+            <dynamicEnvironmentSupplier class="MutableList" serialization="custom">
+              <unserializable-parents/>
+              <list>
+                <default>
+                  <size>0</size>
+                </default>
+                <int>0</int>
+              </list>
+            </dynamicEnvironmentSupplier>
+          </org.apache.brooklyn.feed.CommandPollConfig>
+        </com.google.common.collect.HashMultimap>
+      </com.google.common.collect.HashMultimap>
+    </polls>
+    <feed.onlyIfServiceUp type="boolean">true</feed.onlyIfServiceUp>
+  </config>
+</feed>