/*
* Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 com.amazonaws.waiters;
import com.amazonaws.AmazonServiceException;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class CompositeAcceptorTest {
@Test(expected = IllegalArgumentException.class)
public void nullWaiterAcceptorList() {
CompositeAcceptor compositeAcceptor = new CompositeAcceptor(null);
}
@Test(expected = IllegalArgumentException.class)
public void emptyWaiterAcceptorList() {
List<WaiterAcceptor> waiterAcceptorsList = new ArrayList<WaiterAcceptor>();
CompositeAcceptor compositeAcceptor = new CompositeAcceptor(waiterAcceptorsList);
}
@Test
public void responseMatchExpected() throws Exception {
List<WaiterAcceptor> waiterAcceptorsList = new ArrayList<WaiterAcceptor>();
waiterAcceptorsList.add(new TestExceptionAcceptor());
waiterAcceptorsList.add(new TestResultAcceptor());
CompositeAcceptor compositeAcceptor = new CompositeAcceptor(waiterAcceptorsList);
Assert.assertEquals("Response output doesn't match expected output.", WaiterState.SUCCESS, compositeAcceptor.accepts(new DescribeTableResult()));
}
@Test
public void responseNotMatchExpected() throws Exception {
List<WaiterAcceptor> waiterAcceptorsList = new ArrayList<WaiterAcceptor>();
waiterAcceptorsList.add(new TestExceptionAcceptor());
CompositeAcceptor compositeAcceptor = new CompositeAcceptor(waiterAcceptorsList);
Assert.assertEquals("Response output doesn't match expected output.", WaiterState.RETRY, compositeAcceptor.accepts(new DescribeTableResult()));
}
@Test (expected = AmazonServiceException.class)
public void exceptionNotMatchExpected() throws Exception {
List<WaiterAcceptor> waiterAcceptorsList = new ArrayList<WaiterAcceptor>();
waiterAcceptorsList.add(new TestResultAcceptor());
CompositeAcceptor compositeAcceptor = new CompositeAcceptor(waiterAcceptorsList);
Assert.assertEquals("Exception thrown doesn't match expected exception.", WaiterState.RETRY, compositeAcceptor.accepts(new AmazonServiceException("")));
}
@Test
public void exceptionMatchExpected() throws Exception {
List<WaiterAcceptor> waiterAcceptorsList = new ArrayList<WaiterAcceptor>();
waiterAcceptorsList.add(new TestResultAcceptor());
waiterAcceptorsList.add(new TestExceptionAcceptor());
CompositeAcceptor compositeAcceptor = new CompositeAcceptor(waiterAcceptorsList);
Assert.assertEquals("Exception thrown doesn't match expected exception.", WaiterState.RETRY, compositeAcceptor.accepts(new ResourceNotFoundException("")));
}
class DescribeTableResult {
private String tableName;
}
class TestResultAcceptor extends WaiterAcceptor<DescribeTableResult> {
public boolean matches(DescribeTableResult result) {
return true;
}
public WaiterState getState() {
return WaiterState.SUCCESS;
}
}
class TestExceptionAcceptor extends WaiterAcceptor<DescribeTableResult> {
public boolean matches(AmazonServiceException e) {
return e instanceof ResourceNotFoundException;
}
public WaiterState getState() {
return WaiterState.RETRY;
}
}
static class ResourceNotFoundException extends AmazonServiceException {
public ResourceNotFoundException(String message) {
super(message);
}
}
}