/*
* 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.camp.brooklyn;
import java.util.Iterator;
import java.util.Map;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.EntityAsserts;
import org.apache.brooklyn.entity.software.base.EmptySoftwareProcess;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.test.EntityTestUtils;
import org.apache.brooklyn.util.collections.Jsonya;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
@Test
public class EmptySoftwareProcessYamlTest extends AbstractYamlTest {
private static final Logger log = LoggerFactory.getLogger(EnrichersYamlTest.class);
@Test(groups="Integration")
public void testProvisioningProperties() throws Exception {
Entity app = createAndStartApplication(
"location: localhost",
"services:",
"- type: "+EmptySoftwareProcess.class.getName(),
" provisioning.properties:",
" minRam: 16384");
waitForApplicationTasks(app);
log.info("App started:");
Entities.dumpInfo(app);
EmptySoftwareProcess entity = (EmptySoftwareProcess) app.getChildren().iterator().next();
Map<String, Object> pp = entity.getConfig(EmptySoftwareProcess.PROVISIONING_PROPERTIES);
Assert.assertEquals(pp.get("minRam"), 16384);
}
@Test(groups="Integration")
public void testProvisioningPropertiesViaJsonya() throws Exception {
Entity app = createAndStartApplication(
Jsonya.newInstance()
.put("location", "localhost")
.at("services").list()
.put("type", EmptySoftwareProcess.class.getName())
.at("provisioning.properties").put("minRam", 16384)
.root().toString());
waitForApplicationTasks(app);
log.info("App started:");
Entities.dumpInfo(app);
EmptySoftwareProcess entity = (EmptySoftwareProcess) app.getChildren().iterator().next();
Map<String, Object> pp = entity.getConfig(EmptySoftwareProcess.PROVISIONING_PROPERTIES);
Assert.assertEquals(pp.get("minRam"), 16384);
}
// for https://github.com/brooklyncentral/brooklyn/issues/1377
@Test(groups="Integration")
public void testWithAppAndEntityLocations() throws Exception {
Entity app = createAndStartApplication(
"services:",
"- type: "+EmptySoftwareProcess.class.getName(),
" location: localhost:(name=localhost on entity)",
"location: byon:(hosts=\"127.0.0.1\", name=loopback on app)");
waitForApplicationTasks(app);
Entities.dumpInfo(app);
Assert.assertEquals(app.getLocations().size(), 1);
Assert.assertEquals(app.getChildren().size(), 1);
Entity entity = app.getChildren().iterator().next();
Location appLocation = app.getLocations().iterator().next();
Assert.assertEquals(appLocation.getDisplayName(), "loopback on app");
Assert.assertEquals(entity.getLocations().size(), 2);
Iterator<Location> entityLocationIterator = entity.getLocations().iterator();
Assert.assertEquals(entityLocationIterator.next().getDisplayName(), "localhost on entity");
Location actualMachine = entityLocationIterator.next();
Assert.assertTrue(actualMachine instanceof SshMachineLocation, "wrong location: "+actualMachine);
// TODO this, below, probably should be 'localhost on entity', see #1377
Assert.assertEquals(actualMachine.getParent().getDisplayName(), "localhost on entity");
}
@Test(groups="Integration")
public void testNoSshing() throws Exception {
Entity app = createAndStartApplication(
"location: byon:(hosts=\"1.2.3.4\")",
"services:",
"- type: "+EmptySoftwareProcess.class.getName(),
" brooklyn.config:",
" sshMonitoring.enabled: false",
" "+BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION.getName()+": true");
waitForApplicationTasks(app);
EmptySoftwareProcess entity = Iterables.getOnlyElement(Entities.descendants(app, EmptySoftwareProcess.class));
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, true);
EntityAsserts.assertAttributeEqualsContinually(entity, Attributes.SERVICE_UP, true);
}
}