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 e5ffbb25c53d5d8b472ab0454edf2f5f5a9b2e6a Author: seanyinx <[email protected]> AuthorDate: Tue Jan 23 18:39:30 2018 +0800 SCB-237 added alpha controller to query events Signed-off-by: seanyinx <[email protected]> --- .../servicecomb/saga/alpha/core/TxEvent.java | 13 ++++ alpha/alpha-server/pom.xml | 4 ++ .../saga/alpha/server/AlphaEventController.java | 59 +++++++++++++++ .../alpha/server/AlphaEventControllerTest.java | 83 ++++++++++++++++++++++ 4 files changed, 159 insertions(+) diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java index b654689..1364cb7 100644 --- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java +++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java @@ -43,6 +43,19 @@ public class TxEvent { private TxEvent() { } + public TxEvent(TxEvent event) { + this(event.surrogateId, + event.serviceName, + event.instanceId, + event.creationTime, + event.globalTxId, + event.localTxId, + event.parentTxId, + event.type, + event.compensationMethod, + event.payloads); + } + public TxEvent( String serviceName, String instanceId, diff --git a/alpha/alpha-server/pom.xml b/alpha/alpha-server/pom.xml index 9efdf78..54f9cef 100644 --- a/alpha/alpha-server/pom.xml +++ b/alpha/alpha-server/pom.xml @@ -87,6 +87,10 @@ <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaEventController.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaEventController.java new file mode 100644 index 0000000..0f6e139 --- /dev/null +++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaEventController.java @@ -0,0 +1,59 @@ +/* + * 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 org.apache.servicecomb.saga.alpha.server; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +import org.apache.servicecomb.saga.alpha.core.TxEvent; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; + +@Controller +@RequestMapping("/") +class AlphaEventController { + + private final TxEventEnvelopeRepository eventRepository; + + AlphaEventController(TxEventEnvelopeRepository eventRepository) { + this.eventRepository = eventRepository; + } + + @GetMapping(value = "/events") + ResponseEntity<Collection<TxEventVo>> events() { + Iterable<TxEvent> events = eventRepository.findAll(); + + List<TxEventVo> eventVos = new LinkedList<>(); + events.forEach(event -> eventVos.add(new TxEventVo(event))); + + return ResponseEntity.ok(eventVos); + } + + @JsonAutoDetect(fieldVisibility = Visibility.ANY) + private static class TxEventVo extends TxEvent { + private TxEventVo(TxEvent event) { + super(event); + } + } +} diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/saga/alpha/server/AlphaEventControllerTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/saga/alpha/server/AlphaEventControllerTest.java new file mode 100644 index 0000000..a479e2b --- /dev/null +++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/saga/alpha/server/AlphaEventControllerTest.java @@ -0,0 +1,83 @@ +/* + * 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 org.apache.servicecomb.saga.alpha.server; + +import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify; +import static java.util.Collections.singletonList; +import static org.apache.servicecomb.saga.common.EventType.TxStartedEvent; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.core.Is.is; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.Date; +import java.util.UUID; + +import org.apache.servicecomb.saga.alpha.core.TxEvent; +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.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.fasterxml.jackson.databind.ObjectMapper; + +@RunWith(SpringRunner.class) +@WebMvcTest(AlphaEventController.class) +public class AlphaEventControllerTest { + private final TxEvent someEvent = someEvent(); + private final ObjectMapper mapper = new ObjectMapper(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private TxEventEnvelopeRepository eventRepository; + + @Before + public void setUp() throws Exception { + when(eventRepository.findAll()).thenReturn(singletonList(someEvent)); + } + + @Test + public void retrievesEventsFromRepo() throws Exception { + mockMvc.perform(get("/events")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$", hasSize(1))) + .andExpect(jsonPath("$.[0].globalTxId", is(someEvent.globalTxId()))) + .andExpect(jsonPath("$.[0].localTxId", is(someEvent.localTxId()))); + } + + private TxEvent someEvent() { + return new TxEvent( + uniquify("serviceName"), + uniquify("instanceId"), + new Date(), + uniquify("globalTxId"), + uniquify("localTxId"), + UUID.randomUUID().toString(), + TxStartedEvent.name(), + this.getClass().getCanonicalName(), + uniquify("blah").getBytes()); + } +} -- To stop receiving notification emails like this one, please contact [email protected].
