/*
* Copyright 2012 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.services.simpleworkflow.flow.examples.deployment;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import junit.framework.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import com.amazonaws.services.simpleworkflow.flow.core.TryCatchFinally;
import com.amazonaws.services.simpleworkflow.flow.junit.WorkflowTestBase;
import com.amazonaws.services.simpleworkflow.flow.junit.spring.FlowSpringJUnit4ClassRunner;
@RunWith(FlowSpringJUnit4ClassRunner.class)
@ContextConfiguration("DeploymentTest-context.xml")
public class DeploymentTest {
public static class TestDeploymentActivities implements DeploymentActivities {
private final String host;
public TestDeploymentActivities(String host) {
this.host = host;
}
@Override
public String deployDatabase() {
trace.add("Database-" + host);
return "dbUrl-" + host;
}
@Override
public String deployAppServer(List<String> dataSources) {
trace.add("appServer-" + host);
return "appServerUrl-" + host;
}
@Override
public String deployWebServer(List<String> appServerUrls, List<String> dataSources) {
trace.add("WebServer-" + host);
return "webServerUrl-" + host;
}
@Override
public String deployLoadBalancer(List<String> frontendUrls) {
trace.add("LoadBalancer-" + host);
return "loadBalancerUrl-" + host;
}
}
@Rule
@Autowired
public WorkflowTestBase workflowTest;
@Autowired
public DeploymentWorkflowClientFactory workflowClientFactory;
private static final List<String> trace = new ArrayList<String>();
@Test
public void test() throws IOException {
new TryCatchFinally() {
Throwable failure;
@Override
protected void doTry() throws Throwable {
String template = getTemplate("AppStack1.xml");
DeploymentWorkflowClient workflow = workflowClientFactory.getClient("AppStack1");
workflow.deploy(template);
}
@Override
protected void doCatch(Throwable e) throws Throwable {
failure = e;
throw e;
}
@Override
protected void doFinally() throws Throwable {
// Without this check assertEquals fails overwriting
// original exception
if (failure == null) {
List<String> expected = new ArrayList<String>();
expected.add("Database-host1");
expected.add("Database-host2");
expected.add("appServer-host3");
expected.add("appServer-host2");
expected.add("appServer-host3");
expected.add("WebServer-host2");
expected.add("WebServer-host1");
expected.add("LoadBalancer-host2");
Assert.assertEquals(expected, trace);
}
}
};
}
private String getTemplate(String resourceName) throws IOException {
URL resource = DeploymentTest.class.getResource(resourceName);
String template = new Scanner(resource.openStream()).useDelimiter("\\A").next();
return template;
}
}