blob: 1508778d6f91ef0c8fe500879870041b74898be3 [file] [log] [blame]
/*
* 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.test.framework;
import com.google.common.collect.Lists;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.core.entity.AbstractEntity;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
/**
* {@inheritDoc}
*/
public class TestCaseImpl extends AbstractEntity implements TestCase {
private static final Logger LOG = LoggerFactory.getLogger(TestCaseImpl.class);
/**
* {@inheritDoc}
*/
public void start(Collection<? extends Location> locations) {
ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
try {
for (final Entity childEntity : getChildren()) {
Boolean serviceUp = childEntity.sensors().get(SERVICE_UP);
if (childEntity instanceof Startable && !Boolean.TRUE.equals(serviceUp)){
((Startable) childEntity).start(locations);
}
}
sensors().set(Attributes.SERVICE_UP, true);
ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
} catch (Throwable t) {
sensors().set(Attributes.SERVICE_UP, false);
ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
throw Exceptions.propagate(t);
}
}
/**
* {@inheritDoc}
*/
public void stop() {
ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
sensors().set(Attributes.SERVICE_UP, false);
try {
for (Entity child : getChildren()) {
if (child instanceof Startable) ((Startable) child).stop();
}
ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
} catch (Exception e) {
ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
throw Exceptions.propagate(e);
}
}
/**
* {@inheritDoc}
*/
public void restart() {
final Collection<Location> locations = Lists.newArrayList(getLocations());
stop();
start(locations);
}
}