You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/01/24 15:12:48 UTC

[incubator-servicecomb-saga] 02/07: SCB-237 added rudimentary steps definitions and test data

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 3cc6b80b16efd85499503b91e1d933b115701ce5
Author: seanyinx <se...@huawei.com>
AuthorDate: Tue Jan 23 16:15:48 2018 +0800

    SCB-237 added rudimentary steps definitions and test data
    
    Signed-off-by: seanyinx <se...@huawei.com>
---
 acceptance-tests/acceptance-pack/pom.xml           | 162 +++++++++++++++++++++
 .../org/apache/servicecomb/saga/PackStepdefs.java  |  35 +++--
 .../{RunCucumberTest.java => RunCucumberIT.java}   |   2 +-
 .../test/resources/log4j2-test.xml}                |  25 ++--
 .../test/resources/pack_success_scenario.feature   |  24 ++-
 acceptance-tests/pom.xml                           |  20 +++
 6 files changed, 235 insertions(+), 33 deletions(-)

diff --git a/acceptance-tests/acceptance-pack/pom.xml b/acceptance-tests/acceptance-pack/pom.xml
index 5401ab5..67938f6 100644
--- a/acceptance-tests/acceptance-pack/pom.xml
+++ b/acceptance-tests/acceptance-pack/pom.xml
@@ -28,4 +28,166 @@
 
   <artifactId>acceptance-pack</artifactId>
 
+  <profiles>
+    <profile>
+      <id>docker</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>io.fabric8</groupId>
+            <artifactId>docker-maven-plugin</artifactId>
+            <configuration>
+              <images>
+                <image>
+                  <name>postgres</name>
+                  <alias>postgres</alias>
+                  <run>
+                    <env>
+                      <POSTGRES_DB>saga</POSTGRES_DB>
+                      <POSTGRES_USER>saga</POSTGRES_USER>
+                      <POSTGRES_PASSWORD>password</POSTGRES_PASSWORD>
+                    </env>
+                    <wait>
+                      <log>database system is ready to accept connections</log>
+                      <tcp>
+                        <ports>
+                          <port>5432</port>
+                        </ports>
+                      </tcp>
+                      <time>60000</time>
+                    </wait>
+                    <ports>
+                      <port>postgres.port:5432</port>
+                    </ports>
+                  </run>
+                </image>
+                <image>
+                  <name>alpha-server:${project.version}</name>
+                  <alias>alpha</alias>
+                  <run>
+                    <env>
+                      <JAVA_OPTS>
+                        -Dspring.profiles.active=prd
+                      </JAVA_OPTS>
+                    </env>
+                    <links>
+                      <link>postgres:postgresql.servicecomb.io</link>
+                    </links>
+                    <wait>
+                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
+                      <tcp>
+                        <ports>
+                          <port>8080</port>
+                        </ports>
+                      </tcp>
+                      <time>120000</time>
+                    </wait>
+                    <ports>
+                      <port>alpha.port:8080</port>
+                    </ports>
+                    <dependsOn>
+                      <dependsOn>postgres</dependsOn>
+                    </dependsOn>
+                  </run>
+                </image>
+              </images>
+            </configuration>
+            <executions>
+              <execution>
+                <id>start</id>
+                <phase>pre-integration-test</phase>
+                <goals>
+                  <goal>start</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>stop</id>
+                <phase>post-integration-test</phase>
+                <goals>
+                  <goal>stop</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.codehaus.gmaven</groupId>
+            <artifactId>gmaven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>add-default-properties</id>
+                <phase>initialize</phase>
+                <goals>
+                  <goal>execute</goal>
+                </goals>
+                <configuration>
+                  <source>
+                    project.properties.setProperty('docker.hostname', 'localhost')
+                    log.info("Docker hostname is " + project.properties['docker.hostname'])
+                  </source>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-failsafe-plugin</artifactId>
+            <version>${maven.failsafe.version}</version>
+            <configuration>
+              <systemPropertyVariables>
+                <alpha.cluster.address>
+                  ${docker.hostname}:${alpha.port}
+                </alpha.cluster.address>
+                <spring.datasource.url>
+                  jdbc:postgresql://${docker.hostname}:${postgres.port}/saga?useSSL=false
+                </spring.datasource.url>
+              </systemPropertyVariables>
+              <argLine>${jacoco.failsafe.argLine}</argLine>
+            </configuration>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>integration-test</goal>
+                  <goal>verify</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>com.ethlo.persistence.tools</groupId>
+            <artifactId>eclipselink-maven-plugin</artifactId>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>docker-machine</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.gmaven</groupId>
+            <artifactId>gmaven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>add-dynamic-properties</id>
+                <phase>prepare-package</phase>
+                <goals>
+                  <goal>execute</goal>
+                </goals>
+                <configuration>
+                  <source>
+                    def process = "docker-machine ip default".execute()
+                    process.waitFor()
+                    project.properties.setProperty('docker.hostname', process.in.text.trim())
+
+                    log.info("Docker hostname is " + project.properties['docker.hostname'])
+                  </source>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
 </project>
diff --git a/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/PackStepdefs.java b/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/PackStepdefs.java
index fd98536..71c0887 100644
--- a/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/PackStepdefs.java
+++ b/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/PackStepdefs.java
@@ -17,29 +17,42 @@
 
 package org.apache.servicecomb.saga;
 
-import cucumber.api.PendingException;
+import java.lang.invoke.MethodHandles;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import cucumber.api.DataTable;
 import cucumber.api.java8.En;
 
 public class PackStepdefs implements En {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
   public PackStepdefs() {
     Given("^Car Service is up and running$", () -> {
-      // Write code here that turns the phrase above into concrete actions
-      throw new PendingException();
     });
 
     And("^Hotel Service is up and running$", () -> {
-      // Write code here that turns the phrase above into concrete actions
-      throw new PendingException();
     });
 
-    When("^A booking transaction is received$", () -> {
-      // Write code here that turns the phrase above into concrete actions
-      throw new PendingException();
+    When("^User ([A-Za-z]+) requests to book ([0-9]+) cars and ([0-9]+) rooms$", (username, cars, rooms) -> {
+      log.info("Received request from user {} to book {} cars and {} rooms", username, cars, rooms);
     });
 
-    Then("^Alpha records the following events$", () -> {
-      // Write code here that turns the phrase above into concrete actions
-      throw new PendingException();
+    Then("^Alpha records the following events$", (DataTable dataTable) -> {
+      List<Map<String, String>> maps = dataTable.asMaps(String.class, String.class);
+      log.info("events {}", maps);
+    });
+
+    And("^Car Service contains the following booking orders$", (DataTable dataTable) -> {
+      List<Map<String, String>> maps = dataTable.asMaps(String.class, String.class);
+      log.info("car orders {}", maps);
+    });
+    And("^Hotel Service contains the following booking orders$", (DataTable dataTable) -> {
+      List<Map<String, String>> maps = dataTable.asMaps(String.class, String.class);
+      log.info("hotel orders {}", maps);
     });
   }
 }
diff --git a/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/RunCucumberTest.java b/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/RunCucumberIT.java
similarity index 97%
rename from acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/RunCucumberTest.java
rename to acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/RunCucumberIT.java
index d4e2b43..d4fc9ee 100644
--- a/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/RunCucumberTest.java
+++ b/acceptance-tests/acceptance-pack/src/test/java/org/apache/servicecomb/saga/RunCucumberIT.java
@@ -25,5 +25,5 @@ import cucumber.api.junit.Cucumber;
 @RunWith(Cucumber.class)
 @CucumberOptions(plugin = {"pretty", "html:target/cucumber"},
     features = "src/test/resources")
-public class RunCucumberTest {
+public class RunCucumberIT {
 }
diff --git a/acceptance-tests/acceptance-pack/pom.xml b/acceptance-tests/acceptance-pack/src/test/resources/log4j2-test.xml
similarity index 65%
copy from acceptance-tests/acceptance-pack/pom.xml
copy to acceptance-tests/acceptance-pack/src/test/resources/log4j2-test.xml
index 5401ab5..58924c6 100644
--- a/acceptance-tests/acceptance-pack/pom.xml
+++ b/acceptance-tests/acceptance-pack/src/test/resources/log4j2-test.xml
@@ -16,16 +16,15 @@
   ~ limitations under the License.
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>acceptance-tests</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
-    <version>0.0.3-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>acceptance-pack</artifactId>
-
-</project>
+<Configuration status="WARN">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="info">
+      <AppenderRef ref="Console"/>
+    </Root>
+  </Loggers>
+</Configuration>
diff --git a/acceptance-tests/acceptance-pack/src/test/resources/pack_success_scenario.feature b/acceptance-tests/acceptance-pack/src/test/resources/pack_success_scenario.feature
index 270e8ba..da233b0 100644
--- a/acceptance-tests/acceptance-pack/src/test/resources/pack_success_scenario.feature
+++ b/acceptance-tests/acceptance-pack/src/test/resources/pack_success_scenario.feature
@@ -4,13 +4,21 @@ Feature: Alpha records transaction events
     Given Car Service is up and running
     And Hotel Service is up and running
 
-    When A booking transaction is received
+    When User Sean requests to book 2 cars and 1 rooms
 
     Then Alpha records the following events
-      | event type       |
-      | SagaStartedEvent |
-      | TxStartedEvent   |
-      | TxEndedEvent     |
-      | TxStartedEvent   |
-      | TxEndedEvent     |
-      | SagaEndedEvent   |
+      | service name | event type       |
+      | pack-booking | SagaStartedEvent |
+      | pack-car     | TxStartedEvent   |
+      | pack-car     | TxEndedEvent     |
+      | pack-hotel   | TxStartedEvent   |
+      | pack-hotel   | TxEndedEvent     |
+      | pack-booking | SagaEndedEvent   |
+
+    And Car Service contains the following booking orders
+      | user name | amount | confirmed |
+      | Sean      | 2      | true      |
+
+    And Hotel Service contains the following booking orders
+      | user name | amount | confirmed |
+      | Sean      | 1      | true      |
diff --git a/acceptance-tests/pom.xml b/acceptance-tests/pom.xml
index 0c41f81..2a5f12b 100644
--- a/acceptance-tests/pom.xml
+++ b/acceptance-tests/pom.xml
@@ -53,6 +53,26 @@
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.