/**
* 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.events;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
import org.apache.aurora.common.testing.easymock.EasyMockTest;
import org.apache.aurora.gen.HostAttributes;
import org.apache.aurora.gen.MaintenanceMode;
import org.apache.aurora.gen.TaskConfig;
import org.apache.aurora.scheduler.base.TaskGroupKey;
import org.apache.aurora.scheduler.events.PubsubEvent.Vetoed;
import org.apache.aurora.scheduler.filter.AttributeAggregate;
import org.apache.aurora.scheduler.filter.SchedulingFilter;
import org.apache.aurora.scheduler.filter.SchedulingFilter.ResourceRequest;
import org.apache.aurora.scheduler.filter.SchedulingFilter.UnusedResource;
import org.apache.aurora.scheduler.filter.SchedulingFilter.Veto;
import org.apache.aurora.scheduler.resources.ResourceBag;
import org.apache.aurora.scheduler.resources.ResourceManager;
import org.apache.aurora.scheduler.storage.entities.IHostAttributes;
import org.apache.aurora.scheduler.storage.entities.ITaskConfig;
import org.junit.Before;
import org.junit.Test;
import static org.apache.aurora.gen.Resource.diskMb;
import static org.apache.aurora.gen.Resource.numCpus;
import static org.apache.aurora.gen.Resource.ramMb;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
public class NotifyingSchedulingFilterTest extends EasyMockTest {
private static final ITaskConfig TASK = ITaskConfig.build(new TaskConfig()
.setResources(ImmutableSet.of(
numCpus(1),
ramMb(1024),
diskMb(1024))));
private static final TaskGroupKey GROUP_KEY = TaskGroupKey.from(TASK);
private static final UnusedResource RESOURCE = new UnusedResource(
ResourceManager.bagFromResources(TASK.getResources()),
IHostAttributes.build(new HostAttributes().setHost("host").setMode(MaintenanceMode.NONE)));
private static final ResourceRequest REQUEST =
new ResourceRequest(TASK, ResourceBag.EMPTY, AttributeAggregate.empty());
private static final Veto VETO_1 = Veto.insufficientResources("ram", 1);
private static final Veto VETO_2 = Veto.insufficientResources("ram", 2);
private SchedulingFilter filter;
private EventSink eventSink;
private SchedulingFilter delegate;
@Before
public void setUp() {
delegate = createMock(SchedulingFilter.class);
eventSink = createMock(EventSink.class);
filter = new NotifyingSchedulingFilter(delegate, eventSink);
}
@Test
public void testEvents() {
Set<Veto> vetoes = ImmutableSet.of(VETO_1, VETO_2);
expect(delegate.filter(RESOURCE, REQUEST)).andReturn(vetoes);
eventSink.post(new Vetoed(GROUP_KEY, vetoes));
control.replay();
assertEquals(vetoes, filter.filter(RESOURCE, REQUEST));
}
@Test
public void testNoVetoes() {
Set<Veto> vetoes = ImmutableSet.of();
expect(delegate.filter(RESOURCE, REQUEST)).andReturn(vetoes);
control.replay();
assertEquals(vetoes, filter.filter(RESOURCE, REQUEST));
}
}