blob: 36f2c657c05a87e78a11a1b0be5779dfd6511ee5 [file] [log] [blame]
/**
* Licensed 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.aurora.scheduler.updater;
import com.google.common.collect.ImmutableSet;
import com.google.common.eventbus.EventBus;
import com.google.common.util.concurrent.Service;
import org.apache.aurora.common.testing.easymock.EasyMockTest;
import org.apache.aurora.gen.InstanceKey;
import org.apache.aurora.gen.ScheduleStatus;
import org.apache.aurora.scheduler.base.TaskTestUtil;
import org.apache.aurora.scheduler.storage.entities.IInstanceKey;
import org.apache.aurora.scheduler.storage.entities.IScheduledTask;
import org.junit.Before;
import org.junit.Test;
import static org.apache.aurora.scheduler.events.PubsubEvent.TaskStateChange;
import static org.apache.aurora.scheduler.events.PubsubEvent.TasksDeleted;
import static org.easymock.EasyMock.expectLastCall;
public class JobUpdateEventSubscriberTest extends EasyMockTest {
private static final IScheduledTask TASK = TaskTestUtil.makeTask("id", TaskTestUtil.JOB);
private static final IInstanceKey INSTANCE_A = IInstanceKey.build(
new InstanceKey()
.setJobKey(TaskTestUtil.JOB.newBuilder())
.setInstanceId(TASK.getAssignedTask().getInstanceId()));
private JobUpdateController updater;
private Service service;
private EventBus eventBus;
@Before
public void setUp() {
updater = createMock(JobUpdateController.class);
service = new JobUpdateEventSubscriber(updater);
eventBus = new EventBus();
eventBus.register(service);
}
@Test
public void testStateChange() throws Exception {
updater.instanceChangedState(TASK);
control.replay();
eventBus.post(TaskStateChange.initialized(TASK));
}
@Test
public void testDeleted() throws Exception {
updater.instanceDeleted(INSTANCE_A);
control.replay();
eventBus.post(new TasksDeleted(ImmutableSet.of(TASK)));
}
@Test
public void testSchedulerStartup() throws Exception {
updater.systemResume();
control.replay();
service.startAsync().awaitRunning();
}
@Test
public void testHandlesExceptions() throws Exception {
updater.systemResume();
expectLastCall().andThrow(new RuntimeException());
updater.instanceChangedState(TASK);
expectLastCall().andThrow(new RuntimeException());
updater.instanceDeleted(INSTANCE_A);
expectLastCall().andThrow(new RuntimeException());
control.replay();
service.startAsync().awaitRunning();
eventBus.post(TaskStateChange.initialized(TASK));
eventBus.post(new TasksDeleted(ImmutableSet.of(TASK)));
}
@Test
public void testIgnoresPrunedTasks() throws Exception {
control.replay();
IScheduledTask task =
IScheduledTask.build(TASK.newBuilder().setStatus(ScheduleStatus.FAILED));
eventBus.post(new TasksDeleted(ImmutableSet.of(task)));
}
}