From d781aac80f2f735e66fa6a0fed2c782cd14a5707 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Mon, 25 Apr 2016 08:34:46 +0100 Subject: [PATCH] Add new deploy sample - Fixes #209 --- build.gradle | 6 + .../asciidoc/images/model-deployer.png | Bin 0 -> 81304 bytes .../reference/asciidoc/images/sm-deploy-1.png | Bin 0 -> 49436 bytes docs/src/reference/asciidoc/sm-examples.adoc | 63 +- settings.gradle | 1 + spring-statemachine-samples/build.gradle | 8 + .../main/java/demo/deploy/Application.java | 27 + .../java/demo/deploy/StateMachineConfig.java | 152 ++++ .../demo/deploy/StateMachineController.java | 68 ++ .../demo/deploy/StateMachineLogListener.java | 60 ++ .../deploy/src/main/resources/application.yml | 3 + .../deploy/src/main/resources/logback.xml | 9 + .../deploy/src/main/resources/model.di | 2 + .../deploy/src/main/resources/model.notation | 662 ++++++++++++++++++ .../deploy/src/main/resources/model.uml | 122 ++++ .../src/main/resources/templates/states.html | 39 ++ .../test/java/demo/deploy/DeployTests.java | 74 ++ .../java/demo/deploy/StateMachineTests.java | 137 ++++ 18 files changed, 1429 insertions(+), 4 deletions(-) create mode 100644 docs/src/reference/asciidoc/images/model-deployer.png create mode 100644 docs/src/reference/asciidoc/images/sm-deploy-1.png create mode 100644 spring-statemachine-samples/deploy/src/main/java/demo/deploy/Application.java create mode 100644 spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineConfig.java create mode 100644 spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineController.java create mode 100644 spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineLogListener.java create mode 100644 spring-statemachine-samples/deploy/src/main/resources/application.yml create mode 100644 spring-statemachine-samples/deploy/src/main/resources/logback.xml create mode 100644 spring-statemachine-samples/deploy/src/main/resources/model.di create mode 100644 spring-statemachine-samples/deploy/src/main/resources/model.notation create mode 100644 spring-statemachine-samples/deploy/src/main/resources/model.uml create mode 100644 spring-statemachine-samples/deploy/src/main/resources/templates/states.html create mode 100644 spring-statemachine-samples/deploy/src/test/java/demo/deploy/DeployTests.java create mode 100644 spring-statemachine-samples/deploy/src/test/java/demo/deploy/StateMachineTests.java diff --git a/build.gradle b/build.gradle index 6bc43211..f6083558 100644 --- a/build.gradle +++ b/build.gradle @@ -286,9 +286,15 @@ configure(sampleProjects()) { apply plugin: 'spring-boot' configurations.archives.artifacts.removeAll { it.archiveTask.is jar } tasks.findByPath("artifactoryPublish")?.enabled = false + // as samples are not published, we can use jdk8 + compileJava { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + } dependencies { compile project(":spring-statemachine-core") compile "org.springframework:spring-context-support:$springVersion" + testCompile project(":spring-statemachine-test") testCompile "org.springframework:spring-test:$springVersion" testCompile "org.hamcrest:hamcrest-core:$hamcrestVersion" testCompile "org.hamcrest:hamcrest-library:$hamcrestVersion" diff --git a/docs/src/reference/asciidoc/images/model-deployer.png b/docs/src/reference/asciidoc/images/model-deployer.png new file mode 100644 index 0000000000000000000000000000000000000000..73969e8ae3db6644c5c897275c7676822093f5d8 GIT binary patch literal 81304 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

ciw%>vl(3es7r40$@@mMXkBVdpPYc+ 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 XU`ZyW3LYDQ9wR5EELkM}%J07b8n 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 Event Service. +<> Deploy. + [source,text] ---- @@ -1315,7 +1317,60 @@ should see `COUNT` variable to increase with every call. image::images/sm-eventservice-4.png[width=500] -Order to implement actual logic to track user behaviour, you'd then -define these in a various `Actions` in a state machine. You can -associate different `Actions` with transitions, state entry's or state -exits' and with various listener methods. +[[statemachine-examples-deploy]] +== Deploy +Deploy is an example how state machine concepts can be used with an +uml modeling to provide a generic error handling state. This state +machine is a relatively complex example of how various features can be +used to provide a centralized error handling concept. + +image::images/model-deployer.png[width=500] + +[NOTE] +==== +Above statechart is designed using _Eclipse Papyrus Plugin_ +<> and imported into _Spring StateMachine_ via its uml +model file. _Actions_ and _Guards_ defined in a model are resolved +from a _Spring Application Context_. +==== + +In this state machice scenario we have two different behaviors, +`DEPLOY` and `UNDEPLOY` what user tries to execute. + +What is happening a above statechart: + +* In `DEPLOY` state `INSTALL` and `START` states are entered + conditionally. We enter `START` directly if product is already + installed and no need to try to `START` if install fails. +* In `UNDEPLOY` state we enter `STOP` conditionally if application is + already running. +* Conditional choices for `DEPLOY` and `UNDEPLOY` are done via + _Choice_ pseudostate within those states and choices are selected + by _Guards_. +* We used _Exit Point_ pseudostates to have more controlled exit from + `DEPLOY` and `UNDEPLOY` states. +* After exit from `DEPLOY` and `UNDEPLOY` we go through a _Junction_ + pseudostate to make a choice if we want to go though `ERROR` state + in case error was added into an _Extended State_. +* Finally we go back to `READY` state to process new requests. + +Lets get into actual demo. Run the boot based sample application: + +[source,text,subs="attributes"] +---- +# java -jar spring-statemachine-samples-deploy-{revnumber}.jar +---- + +In a browser you see something like: + +image::images/sm-deploy-1.png[width=500] + +[IMPORTANT] +==== +As we don't have a real _install_, _start_ or _stop_ functionality we +simulate failures by checking existence of particular message headers. +==== + +Now you can start to send event to a machine and choose various +message headers which will drive a different functionality. + diff --git a/settings.gradle b/settings.gradle index 295c042f..e2b594a6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -22,6 +22,7 @@ include 'spring-statemachine-samples:web' include 'spring-statemachine-samples:scope' include 'spring-statemachine-samples:security' include 'spring-statemachine-samples:eventservice' +include 'spring-statemachine-samples:deploy' rootProject.children.find { if (it.name == 'spring-statemachine-recipes') { diff --git a/spring-statemachine-samples/build.gradle b/spring-statemachine-samples/build.gradle index 5cbbfdfa..55402f76 100644 --- a/spring-statemachine-samples/build.gradle +++ b/spring-statemachine-samples/build.gradle @@ -92,3 +92,11 @@ project('spring-statemachine-samples-eventservice') { compile("org.apache.commons:commons-pool2:$commonsPool2Version") } } + +project('spring-statemachine-samples-deploy') { + description = 'Spring State Machine Deploy Sample' + dependencies { + compile project(":spring-statemachine-uml") + compile("org.springframework.boot:spring-boot-starter-thymeleaf:$springBootVersion") + } +} diff --git a/spring-statemachine-samples/deploy/src/main/java/demo/deploy/Application.java b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/Application.java new file mode 100644 index 00000000..b286a723 --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/Application.java @@ -0,0 +1,27 @@ +/* + * Copyright 2016 the original author or authors. + * + * 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 demo.deploy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineConfig.java b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineConfig.java new file mode 100644 index 00000000..272cc58a --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineConfig.java @@ -0,0 +1,152 @@ +/* + * Copyright 2016 the original author or authors. + * + * 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 demo.deploy; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.statemachine.action.Action; +import org.springframework.statemachine.config.EnableStateMachine; +import org.springframework.statemachine.config.StateMachineConfigurerAdapter; +import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer; +import org.springframework.statemachine.config.builders.StateMachineModelConfigurer; +import org.springframework.statemachine.config.model.StateMachineModelFactory; +import org.springframework.statemachine.guard.Guard; +import org.springframework.statemachine.uml.UmlStateMachineModelFactory; + +@Configuration +public class StateMachineConfig { + + @Configuration + @EnableStateMachine + public static class Config extends StateMachineConfigurerAdapter { + + @Override + public void configure(StateMachineConfigurationConfigurer config) + throws Exception { + config + .withConfiguration() + .autoStartup(true) + .listener(stateMachineLogListener()); + } + + @Override + public void configure(StateMachineModelConfigurer model) + throws Exception { + model + .withModel() + .factory(modelFactory()); + } + + @Bean + public StateMachineModelFactory modelFactory() { + return new UmlStateMachineModelFactory("classpath:model.uml"); + } + + @Bean + public StateMachineLogListener stateMachineLogListener() { + return new StateMachineLogListener(); + } + + @Bean + public Action errorEntryAction() { + return (context) -> { + System.out.println("Should handle error " + context.getMessageHeader("error")); + }; + } + + @Bean + public Action readyEntryction() { + return (context) -> { + context.getExtendedState().getVariables().clear(); + }; + } + + @Bean + public Action preparedeployEntryAction() { + return (context) -> { + System.out.println("Handle deploy prepare here"); + }; + } + + @Bean + public Action installEntryAction() { + return (context) -> { + System.out.println("Handle install here"); + }; + } + + @Bean + public Action startEntryAction() { + return (context) -> { + System.out.println("Handle start here"); + }; + } + + @Bean + public Action stopEntryAction() { + return (context) -> { + System.out.println("Handle stop here"); + }; + } + + @Bean + public Action exitErrorAction() { + return (context) -> { + if (context.getMessageHeaders().containsKey("hasError")) { + context.getExtendedState().getVariables().put("hasError", true); + context.getExtendedState().getVariables().put("error", new RuntimeException("Exception set in machine")); + } + if (context.getMessageHeaders().containsKey("isInstalled")) { + context.getExtendedState().getVariables().put("isInstalled", true); + } + if (context.getMessageHeaders().containsKey("installedOk")) { + context.getExtendedState().getVariables().put("installedOk", true); + } + if (context.getMessageHeaders().containsKey("isRunning")) { + context.getExtendedState().getVariables().put("isRunning", true); + } + }; + } + + @Bean + public Guard isInstalledGuard() { + return (context) -> { + return context.getExtendedState().getVariables().containsKey("isInstalled"); + }; + } + + @Bean + public Guard installedOkGuard() { + return (context) -> { + return context.getExtendedState().getVariables().containsKey("installedOk"); + }; + } + + @Bean + public Guard isRunningGuard() { + return (context) -> { + return context.getExtendedState().getVariables().containsKey("isRunning"); + }; + } + + @Bean + public Guard hasErrorGuard() { + return (context) -> { + return context.getExtendedState().getVariables().containsKey("hasError"); + }; + } + } +} diff --git a/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineController.java b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineController.java new file mode 100644 index 00000000..c090824e --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineController.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 the original author or authors. + * + * 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 demo.deploy; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.statemachine.StateMachine; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +public class StateMachineController { + + private final static String[] EVENTS = new String[] { "DEPLOY", "UNDEPLOY" }; + private final static String[] FAILS = new String[] { "isInstalled", "installedOk", "isRunning", "hasError" }; + + @Autowired + private StateMachine stateMachine; + + @Autowired + private StateMachineLogListener listener; + + @RequestMapping("/") + public String home() { + return "redirect:/state"; + } + + @RequestMapping("/state") + public String feedAndGetState(@RequestParam(value = "event", required = false) String event, + @RequestParam(value = "fail", required = false) Collection fails, Model model) throws Exception { + model.addAttribute("allTypes", EVENTS); + model.addAttribute("failTypes", FAILS); + if (StringUtils.hasText(event)) { + Map headers = new HashMap<>(); + if (fails != null) { + for (String fail : fails) { + headers.put(fail, true); + } + } + listener.resetMessages(); + stateMachine.sendEvent(MessageBuilder.createMessage(event, new MessageHeaders(headers))); + } + model.addAttribute("states", stateMachine.getState().getIds()); + model.addAttribute("messages", listener.getMessages()); + return "states"; + } +} diff --git a/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineLogListener.java b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineLogListener.java new file mode 100644 index 00000000..4b48bcdc --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/java/demo/deploy/StateMachineLogListener.java @@ -0,0 +1,60 @@ +/* + * Copyright 2016 the original author or authors. + * + * 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 demo.deploy; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.statemachine.StateContext; +import org.springframework.statemachine.StateContext.Stage; +import org.springframework.statemachine.listener.StateMachineListenerAdapter; +import org.springframework.statemachine.state.State; + +public class StateMachineLogListener extends StateMachineListenerAdapter { + + private final List messages = new ArrayList(); + + public List getMessages() { + return messages; + } + + public void resetMessages() { + messages.clear(); + } + + @Override + public void stateEntered(State state) { +// messages.add("Enter " + state.getId()); + } + + @Override + public void stateExited(State state) { +// messages.add("Exit " + state.getId()); + } + + @Override + public void stateContext(StateContext stateContext) { + if (stateContext.getStage() == Stage.STATE_ENTRY) { + messages.add("Enter " + stateContext.getTarget().getId()); + if (stateContext.getTarget().getId().equals("ERROR")) { + messages.add("ERROR got exception " + stateContext.getExtendedState().getVariables().get("error")); + } + } else if (stateContext.getStage() == Stage.STATE_EXIT) { + messages.add("Exit " + stateContext.getSource().getId()); + } + } + +} diff --git a/spring-statemachine-samples/deploy/src/main/resources/application.yml b/spring-statemachine-samples/deploy/src/main/resources/application.yml new file mode 100644 index 00000000..5aa882d0 --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/resources/application.yml @@ -0,0 +1,3 @@ +security: + basic: + enabled: false diff --git a/spring-statemachine-samples/deploy/src/main/resources/logback.xml b/spring-statemachine-samples/deploy/src/main/resources/logback.xml new file mode 100644 index 00000000..39d50aa5 --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/resources/logback.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/spring-statemachine-samples/deploy/src/main/resources/model.di b/spring-statemachine-samples/deploy/src/main/resources/model.di new file mode 100644 index 00000000..bf9abab3 --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/resources/model.di @@ -0,0 +1,2 @@ + + diff --git a/spring-statemachine-samples/deploy/src/main/resources/model.notation b/spring-statemachine-samples/deploy/src/main/resources/model.notation new file mode 100644 index 00000000..7655c663 --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/resources/model.notation @@ -0,0 +1,662 @@ + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-statemachine-samples/deploy/src/main/resources/model.uml b/spring-statemachine-samples/deploy/src/main/resources/model.uml new file mode 100644 index 00000000..b036c036 --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/resources/model.uml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + bean + hasErrorGuard + + + + + + + + + bean + readyEntryction + + + bean + exitErrorAction + + + + + + + + + + bean + isInstalledGuard + + + + + + + + + + + bean + installedOkGuard + + + + + + + bean + preparedeployEntryAction + + + + + bean + installEntryAction + + + + + bean + startEntryAction + + + + + + + + + + + + + + + + bean + isRunningGuard + + + + + + + + + bean + stopEntryAction + + + + + + + + + bean + errorEntryAction + + + + + + + + + + + diff --git a/spring-statemachine-samples/deploy/src/main/resources/templates/states.html b/spring-statemachine-samples/deploy/src/main/resources/templates/states.html new file mode 100644 index 00000000..2d10e5af --- /dev/null +++ b/spring-statemachine-samples/deploy/src/main/resources/templates/states.html @@ -0,0 +1,39 @@ + + + + Spring Statemachine Deploy Demo + + + +
+

+

+ +
+
+

+

+
    +
  • + + +
  • +
+
+

+

+
    +
  • + + +
  • +
+ +
+ +
+

+

+

+ + diff --git a/spring-statemachine-samples/deploy/src/test/java/demo/deploy/DeployTests.java b/spring-statemachine-samples/deploy/src/test/java/demo/deploy/DeployTests.java new file mode 100644 index 00000000..79f03d4d --- /dev/null +++ b/spring-statemachine-samples/deploy/src/test/java/demo/deploy/DeployTests.java @@ -0,0 +1,74 @@ +/* + * Copyright 2016 the original author or authors. + * + * 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 demo.deploy; + +import static org.hamcrest.Matchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = { Application.class}) +@WebAppConfiguration +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +public class DeployTests { + + private MockMvc mvc; + + @Autowired + private WebApplicationContext context; + + @Test + public void testHome() throws Exception { + mvc. + perform(get("/state")). + andExpect(status().isOk()); + } + + @Test + public void testDeploy() throws Exception { + mvc. + perform(get("/state").param("event", "DEPLOY")). + andExpect(status().isOk()). + andExpect(content().string(containsString("States: [READY]"))); + } + + @Test + public void testUndeploy() throws Exception { + mvc. + perform(get("/state").param("event", "UNDEPLOY")). + andExpect(status().isOk()). + andExpect(content().string(containsString("States: [READY]"))); + } + + @Before + public void setup() throws Exception { + mvc = MockMvcBuilders.webAppContextSetup(context).build(); + } +} diff --git a/spring-statemachine-samples/deploy/src/test/java/demo/deploy/StateMachineTests.java b/spring-statemachine-samples/deploy/src/test/java/demo/deploy/StateMachineTests.java new file mode 100644 index 00000000..dbe5619f --- /dev/null +++ b/spring-statemachine-samples/deploy/src/test/java/demo/deploy/StateMachineTests.java @@ -0,0 +1,137 @@ +/* + * Copyright 2016 the original author or authors. + * + * 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 demo.deploy; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.statemachine.StateMachine; +import org.springframework.statemachine.test.StateMachineTestPlan; +import org.springframework.statemachine.test.StateMachineTestPlanBuilder; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = { StateMachineConfig.class}) +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +public class StateMachineTests { + + @Autowired + private StateMachine stateMachine; + + @Test + public void testDeployInstalledInstallOkInstallOk() throws Exception { + Message deploy = MessageBuilder.withPayload("DEPLOY") + .setHeader("isInstalled", true) + .setHeader("installedOk", true) + .setHeader("hasError", true).build(); + StateMachineTestPlan plan = + StateMachineTestPlanBuilder.builder() + .stateMachine(stateMachine) + .step().expectState("READY").and() + .step().sendEvent(deploy) + .expectStateChanged(6) + .expectStateEntered("DEPLOY", "PREPAREDEPLOY", "INSTALL", "START", "ERROR", "READY") + .expectStates("READY").and() + .build(); + plan.test(); + } + + @Test + public void testDeployInstalledInstallOkInstallError() throws Exception { + Message deploy = MessageBuilder.withPayload("DEPLOY") + .setHeader("isInstalled", true) + .setHeader("hasError", true).build(); + StateMachineTestPlan plan = + StateMachineTestPlanBuilder.builder() + .stateMachine(stateMachine) + .step().expectState("READY").and() + .step().sendEvent(deploy) + .expectStateChanged(5) + .expectStateEntered("DEPLOY", "PREPAREDEPLOY", "INSTALL", "ERROR", "READY") + .expectStates("READY").and() + .build(); + plan.test(); + } + + @Test + public void testDeployInstalledInstallFail() throws Exception { + Message deploy = MessageBuilder.withPayload("DEPLOY") + .setHeader("isInstalled", true).build(); + StateMachineTestPlan plan = + StateMachineTestPlanBuilder.builder() + .stateMachine(stateMachine) + .step().expectState("READY").and() + .step().sendEvent(deploy) + .expectStateChanged(4) + .expectStateEntered("DEPLOY", "PREPAREDEPLOY", "INSTALL", "READY") + .expectStates("READY").and() + .build(); + plan.test(); + } + + @Test + public void testUndeploy() throws Exception { + Message deploy = MessageBuilder.withPayload("UNDEPLOY").build(); + StateMachineTestPlan plan = + StateMachineTestPlanBuilder.builder() + .stateMachine(stateMachine) + .step().expectState("READY").and() + .step().sendEvent(deploy) + .expectStateChanged(3) + .expectStateEntered("UNDEPLOY", "PREPAREUNDEPLOY", "READY") + .expectStateExited("READY", "PREPAREUNDEPLOY", "UNDEPLOY") + .expectStates("READY").and() + .build(); + plan.test(); + } + + @Test + public void testUndeployRunningOk() throws Exception { + Message deploy = MessageBuilder.withPayload("UNDEPLOY") + .setHeader("isRunning", true) + .setHeader("hasError", true).build(); + StateMachineTestPlan plan = + StateMachineTestPlanBuilder.builder() + .stateMachine(stateMachine) + .step().expectState("READY").and() + .step().sendEvent(deploy) + .expectStateChanged(5) + .expectStateEntered("UNDEPLOY", "PREPAREUNDEPLOY", "STOP", "ERROR", "READY") + .expectStates("READY").and() + .build(); + plan.test(); + } + + @Test + public void testUndeployNotRunningOk() throws Exception { + Message undeploy = MessageBuilder.withPayload("UNDEPLOY").build(); + StateMachineTestPlan plan = + StateMachineTestPlanBuilder.builder() + .stateMachine(stateMachine) + .step().expectState("READY").and() + .step().sendEvent(undeploy) + .expectStateChanged(3) + .expectStateEntered("UNDEPLOY", "PREPAREUNDEPLOY", "READY") + .expectStates("READY").and() + .build(); + plan.test(); + } +}