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 20cdc58bd0a18bb45053acfa47091b2c9e2d5720 Author: seanyinx <[email protected]> AuthorDate: Tue Dec 26 19:13:25 2017 +0800 SCB-97 ensured events are persisted Signed-off-by: seanyinx <[email protected]> --- integration-tests/pack-tests/pom.xml | 13 ++++++ .../saga/integration/pack/tests/PackIT.java | 13 +++++- .../integration/pack/tests/TxEventEnvelope.java | 49 ++++++++++++++++++++++ .../pack/tests/TxEventEnvelopeRepository.java | 26 ++++++++++++ .../pack-tests/src/test/resources/application.yaml | 27 ++++++++++++ 5 files changed, 127 insertions(+), 1 deletion(-) diff --git a/integration-tests/pack-tests/pom.xml b/integration-tests/pack-tests/pom.xml index 41a40d8..4dea6c3 100644 --- a/integration-tests/pack-tests/pom.xml +++ b/integration-tests/pack-tests/pom.xml @@ -76,6 +76,16 @@ </dependency> <dependency> <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> @@ -200,6 +210,9 @@ <alpha.cluster.address> ${docker.hostname}:${alpha.port} </alpha.cluster.address> + <spring.datasource.url> + jdbc:mysql://${docker.hostname}:${mysql.port}/saga?useSSL=false + </spring.datasource.url> </systemPropertyVariables> <argLine>${jacoco.failsafe.argLine}</argLine> </configuration> diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java index 3c1d0eb..b32eeb6 100644 --- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java +++ b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertThat; import static org.springframework.http.HttpMethod.GET; import static org.springframework.http.HttpStatus.OK; +import java.util.List; import java.util.UUID; import org.junit.Test; @@ -41,18 +42,22 @@ import io.servicecomb.saga.omega.context.OmegaContext; @RunWith(SpringRunner.class) @SpringBootTest(classes = GreetingApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) public class PackIT { + private final String globalTxId = UUID.randomUUID().toString(); + @Autowired private TestRestTemplate restTemplate; @Autowired private OmegaContext omegaContext; + @Autowired + private TxEventEnvelopeRepository repository; @Test public void updatesTxStateToAlpha() throws Exception { HttpHeaders headers = new HttpHeaders(); - headers.set(GLOBAL_TX_ID_KEY, UUID.randomUUID().toString()); + headers.set(GLOBAL_TX_ID_KEY, globalTxId); ResponseEntity<String> entity = restTemplate.exchange("/greet?name={name}", GET, @@ -62,5 +67,11 @@ public class PackIT { assertThat(entity.getStatusCode(), is(OK)); assertThat(entity.getBody(), is("Greetings, mike")); + + List<TxEventEnvelope> envelopes = repository.findByGlobalTxIdOrderByCreationTime(globalTxId); + + assertThat(envelopes.size(), is(2)); + assertThat(envelopes.get(0).type(), is("TxStartedEvent")); + assertThat(envelopes.get(1).type(), is("TxEndedEvent")); } } diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java new file mode 100644 index 0000000..1ff04e9 --- /dev/null +++ b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 io.servicecomb.saga.integration.pack.tests; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +class TxEventEnvelope { + @Id + @GeneratedValue + private long surrogateId; + + private Date creationTime; + private String globalTxId; + private String localTxId; + private String parentTxId; + private String type; + private byte[] payloads; + + private TxEventEnvelope() { + } + + String type() { + return type; + } + + public byte[] payloads() { + return payloads; + } +} diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java new file mode 100644 index 0000000..7c88c2b --- /dev/null +++ b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 io.servicecomb.saga.integration.pack.tests; + +import java.util.List; + +import org.springframework.data.repository.CrudRepository; + +interface TxEventEnvelopeRepository extends CrudRepository<TxEventEnvelope, Long> { + List<TxEventEnvelope> findByGlobalTxIdOrderByCreationTime(String globalTxId); +} diff --git a/integration-tests/pack-tests/src/test/resources/application.yaml b/integration-tests/pack-tests/src/test/resources/application.yaml new file mode 100644 index 0000000..a7ed531 --- /dev/null +++ b/integration-tests/pack-tests/src/test/resources/application.yaml @@ -0,0 +1,27 @@ +## --------------------------------------------------------------------------- +## Licensed to the Apache Software Foundation (ASF) under one or more +## contributor license agreements. See the NOTICE file distributed with +## this work for additional information regarding copyright ownership. +## The ASF licenses this file to You 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. +## --------------------------------------------------------------------------- +spring: + datasource: + username: saga + password: password + driver-class-name: com.mysql.jdbc.Driver + jpa: + properties: + hibernate: + dialect: org.hibernate.dialect.MySQL5Dialect + hibernate: + ddl-auto: none -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
