diff --git a/.gitignore b/.gitignore index 61e181b..e540fda 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,7 @@ dist/ nbdist/ .nb-gradle/ \.DS_Store + +### Eclipse ### +bin/ +logs/ diff --git a/.travis.yml b/.travis.yml index 2d29533..63b16a7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,8 @@ services: sudo: required before_script: - sudo service mysql stop +script: + - ./gradlew check -i env: global: - secure: WF5U05+p8xQRBhT75aviCl9sXpnzER52xJDkKaZPtsak3B/21rj5FGQ4TTu9ivh0oF56ws8Zy8hzNZhjS09QimqtpD+Zl5m5er4Q2GvrStVDM0k38wqye2IBf7juKIlkfntX1o1E9/xGkUgIW5eQpUt7TDGpon5FCvY8NHqDyVi+ZDU7hGQh8E3oyK+8Dly1ETLxVhoDEY3vG1VyEZ1IDrgAw/N6KlNIyiuWjPMBLTFAjGMzJAaf/MQiKfmB3HUBUtGqEdhobppEqriJkXl/6ov+Np+vh83dIBaOfRUpB1KgvGmefmtL7rb+mIIXOLMm9cpyqmK+6h1JeQrwB3xtWtIIXmmL2VEwmO/2YfTDyu+JpRkkgwDMLgyRKN9wEtaR+4C3X/p9zMysocDhyccOeGVq7XhJwgdosoJ0VRLVtUhPq1T10B/ipp2g8VF9TW1uIfSQJe6YYCrVK+fqtkWG5yuOfqQdGHNZkRJMpeTyzkJQzX7GZb8G0H8EZCsjdJ0FdEpshWcCB2ljozwH3fFMqnzE1thibpg7dC2BXF7aRGjmn/4vqme98i4hP+590FIMF+sdyDItVq7/91EAwh7m35dvszkFruIzLgHFRnrKAgG76bTHTz8bwywhnCZVbDmy/HEDOjj2ykW9jPKJ7buKRKVYbXnSgYqkn/keTHiRvLI= diff --git a/build.gradle b/build.gradle index 83a7850..272f808 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,7 @@ dependencies { testCompile('com.jayway.restassured:rest-assured:2.5.0') testCompile ('com.jayway.restassured:spring-mock-mvc:2.5.0') testCompile ('org.springframework.cloud:spring-cloud-starter-contract-stub-runner') - testCompile ('com.palantir.docker.compose:docker-compose-rule-junit4:0.33.0') + testCompile ('com.palantir.docker.compose:docker-compose-rule-junit4:0.35.0') } dependencyManagement { diff --git a/docker-compose-local.yml b/docker-compose-local.yml index d6bedcf..851beb0 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -116,7 +116,10 @@ services: calculationservice: image: aista/calculation-service environment: + - RABBIT_HOST=rabbitmq - EUREKA_SERVER=discoveryservice + - MONGO_HOST=mongo + - MONGO_PORT=27017 command: ["go", "run", "main.go"] ports: - '8080' diff --git a/docker-compose.yml b/docker-compose.yml index e343d0d..3e904d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,31 @@ -version: '3' +version: '2.3' services: edgeservice: image: aista/edge-service + mem_limit: 512M ports: - "8080:8080" depends_on: - discoveryservice + notificationservice: + depends_on: + - discoveryservice + - rabbitmq + image: aista/notification-service + mem_limit: 512M + command: notification-service + ports: + - "32700:32700" + environment: + - RABBIT_HOST=rabbitmq + - EUREKA_SERVER=discoveryservice + discoveryservice: image: aista/eureka + mem_limit: 512M ports: - "8761:8761" @@ -32,6 +47,7 @@ services: mysqlserver: image: mysql:5.7 + mem_limit: 512M volumes: - mysql-data:/var/lib/mysql:rw restart: always @@ -46,6 +62,7 @@ services: userservice: image: aista/user-service + mem_limit: 512M depends_on: - discoveryservice - mysqlserver @@ -54,27 +71,30 @@ services: mongo: image: 'mongo:3.4.1' + mem_limit: 512M container_name: 'mongo' ports: - '27017:27017' volumes: - 'mongo:/data/db' - postgres: - image: postgres - restart: always - environment: - POSTGRES_DB: 'passenger_db' - POSTGRES_PASSWORD: "admin" - POSTGRES_USER: "admin" - PGDATA: ./postgres-data - ports: - - '5432:5432' - volumes: - - ./db_volume:/var/lib/postgresql +# postgres: +# image: postgres +# mem_limit: 512M +# restart: always +# environment: +# POSTGRES_DB: 'passenger_db' +# POSTGRES_PASSWORD: "admin" +# POSTGRES_USER: "admin" +# PGDATA: ./postgres-data +# ports: +# - '5432:5432' +# volumes: +# - ./db_volume:/var/lib/postgresql rabbitmq: image: rabbitmq:management + mem_limit: 512M container_name: 'rabbitmq' ports: - "5672:5672" @@ -82,6 +102,7 @@ services: tripmanagementcmd: image: aista/trip-management-cmd + mem_limit: 512M environment: - RABBIT_HOST=rabbitmq - MONGO_HOST=mongo @@ -94,6 +115,7 @@ services: tripmanagementquery: image: aista/trip-management-query + mem_limit: 512M environment: - RABBIT_HOST=rabbitmq - MONGO_HOST=mongo @@ -106,6 +128,7 @@ services: gmaps-adapter: image: aista/gmaps-adapter + mem_limit: 512M environment: - EUREKA_SERVER=discoveryservice - RABBIT_HOST=rabbitmq @@ -116,46 +139,52 @@ services: calculation-service: image: aista/calculation-service + mem_limit: 512M environment: - - EUREKA_SERVER=discoveryservice - RABBIT_HOST=rabbitmq - command: ["go", "run", "main.go"] - ports: - - '8080' - depends_on: - - discoveryservice - - passenger: - image: aista/passenger - ports: - - '8080' - depends_on: - - postgres - - discoveryservice - - driver-cmd: - image: aista/driver-cmd - environment: - EUREKA_SERVER=discoveryservice + - MONGO_HOST=mongo + - MONGO_PORT=27017 + command: ["go", "run", "main.go"] ports: - '8080' depends_on: - - rabbitmq - - mongo - discoveryservice - driver-query: - image: aista/driver-query - container_name: 'driver-query' - environment: - - RABBIT_HOST=rabbitmq - - MONGO_HOST=mongo - ports: - - "8080" - depends_on: - - rabbitmq - - mongo - - discoveryservice +# passenger: +# image: aista/passenger +# mem_limit: 512M +# ports: +# - '8080' +# depends_on: +# - postgres +# - discoveryservice +# +# driver-cmd: +# image: aista/driver-cmd +# mem_limit: 512M +# environment: +# - EUREKA_SERVER=discoveryservice +# ports: +# - '8080' +# depends_on: +# - rabbitmq +# - mongo +# - discoveryservice +# +# driver-query: +# image: aista/driver-query +# mem_limit: 512M +# container_name: 'driver-query' +# environment: +# - RABBIT_HOST=rabbitmq +# - MONGO_HOST=mongo +# ports: +# - "8080" +# depends_on: +# - rabbitmq +# - mongo +# - discoveryservice volumes: mongo: diff --git a/src/main/java/aist/edge/edgeservice/ConfigurationCORS.java b/src/main/java/aist/edge/edgeservice/ConfigurationCORS.java index 6170d9d..28344f0 100644 --- a/src/main/java/aist/edge/edgeservice/ConfigurationCORS.java +++ b/src/main/java/aist/edge/edgeservice/ConfigurationCORS.java @@ -1,6 +1,6 @@ package aist.edge.edgeservice; - +import java.util.Arrays; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -10,8 +10,6 @@ import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import java.util.Arrays; - @Configuration public class ConfigurationCORS extends WebSecurityConfigurerAdapter { @@ -21,7 +19,7 @@ protected void configure(HttpSecurity http) throws Exception { } @Bean - public CorsConfigurationSource corsConfigurationSource() { + public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("*")); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7232638..5ef922a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,28 +1,34 @@ -spring: - profiles: - active: development --- spring: profiles: development application: name: edgeservice zuul: + host: + connect-timeout-millis: 20000 + socket-timeout-millis: 240000 prefix: /api routes: trip-cmd: path: /trip/cmd/** - url: http://tripmanagementcmd:8080/api + url: http://${TRIP_CMD_HOST:tripmanagementcmd}:${TRIP_CMD_PORT:8080}/api trip-query: path: /trip/query/** - url: http://tripmanagementquery:8080/api + url: http://${TRIP_QUERY_HOST:tripmanagementquery}:${TRIP_QUERY_PORT:8080}/api userservice: path: /userservice/** - url: http://userservice:8080/ + url: http://${USER_SERVICE_HOST:userservice}:${USER_SERVICE_PORT:8080}/ sensitiveHeaders: Cookie,Set-Cookie + calculation: + path: /calculationservice/** + url: http://${CALCULATION_HOST:calculationservice}:${CALCULATION_PORT:8080}/ + gmapsadapter: + path: /gmapsadapter/** + url: http://${GMAPS_ADAPTER_HOST:gmapsadapter}:${GMAPS_ADAPTER_PORT:8080}/ security: oauth2: resource: - userInfoUri: http://userservice:8080/auth/user + userInfoUri: http://${USER_SERVICE_HOST:userservice}:${USER_SERVICE_PORT:8080}/auth/user ignored: /catalog/** eureka: instance: @@ -31,11 +37,16 @@ eureka: registerWithEureka: true fetchRegistry: true serviceUrl: - defaultZone: http://discoveryservice:8761/eureka/ + defaultZone: http://${EUREKA_SERVER:discoveryservice}:${EUREKA_PORT:8761}/eureka/ management: security: enabled: false context-path: /actuator +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000 +ribbon: + ConnectTimeout: 60000 +ReadTimeout: 60000 + --- spring: profiles: docker @@ -67,6 +78,38 @@ eureka: fetchRegistry: true serviceUrl: defaultZone: http://discoveryservice:8761/eureka/ + +--- +spring: + profiles: local + application: + name: edgeservice +zuul: + prefix: /api + routes: + trip-cmd: + path: /trip/cmd/** + url: http://${DOCKER_MACHINE_IP:localhost}:8080/api + trip-query: + path: /trip/query/** + url: http://${DOCKER_MACHINE_IP:localhost}:8080/api + userservice: + path: /userservice/** + url: http://${DOCKER_MACHINE_IP:localhost}:8080/ + sensitiveHeaders: Cookie,Set-Cookie +security: + oauth2: + resource: + userInfoUri: http://${DOCKER_MACHINE_IP:localhost}:8080/auth/user + ignored: /catalog/** +eureka: + instance: + prefer-ip-address: true + client: + registerWithEureka: true + fetchRegistry: true + serviceUrl: + defaultZone: http://${DOCKER_MACHINE_IP:localhost}:8761/eureka/ hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000 ribbon: ConnectTimeout: 3000 diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..ac4fd43 --- /dev/null +++ b/src/main/resources/bootstrap.yml @@ -0,0 +1,9 @@ +spring: + application: + name: edgeservice + profiles: + active: development + cloud: + config: + uri: http://${CONFIGURATION_HOST:localhost}:8888 + enabled: true diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..a9b59f3 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,42 @@ + + + + + + + + + + %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable + + + + + + ${LOGS}/spring-boot-logger.log + + %d %p %C{1.} [%t] %m%n + + + + + ${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log + + + 10MB + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/aist/edge/edgeservice/EdgeServiceIntegrationTests.java b/src/test/java/aist/edge/edgeservice/EdgeServiceIntegrationTests.java index 0f6f907..62b900f 100644 --- a/src/test/java/aist/edge/edgeservice/EdgeServiceIntegrationTests.java +++ b/src/test/java/aist/edge/edgeservice/EdgeServiceIntegrationTests.java @@ -6,7 +6,12 @@ import com.palantir.docker.compose.connection.DockerPort; import com.palantir.docker.compose.connection.waiting.HealthChecks; -import java.util.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Base64; +import java.util.concurrent.TimeUnit; +import java.util.logging.FileHandler; import org.json.JSONException; import org.json.JSONObject; @@ -15,27 +20,32 @@ import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.util.*; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = EdgeServiceApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public class EdgeServiceIntegrationTests { protected static final Logger LOG = LoggerFactory.getLogger(EdgeServiceIntegrationTests.class); + // private static String discoveryServiceURL; + private static String mongoURL; + private static String userServiceURL; private static String tripCommandURL; private static String tripQueryURL; private static String gmapsAdapterURL; private static String calculationServiceURL; - private static String userServiceURL; + private static int MAX_HEALTH_CHECK_TRIES = 100000; // value based on local environment time - //Wait for all services to have ports open + // Wait for all services to have ports open @ClassRule public static DockerComposeRule docker = DockerComposeRule.builder().pullOnStartup(true) .file("src/test/resources/docker-compose.yml") @@ -47,60 +57,75 @@ public class EdgeServiceIntegrationTests { .waitingForService("gmapsadapter", HealthChecks.toHaveAllPortsOpen()) .waitingForService("calculationservice", HealthChecks.toHaveAllPortsOpen()) .waitingForService("discoveryservice", HealthChecks.toHaveAllPortsOpen()) - .waitingForService("discoveryservice", HealthChecks.toRespondOverHttp(8761, - (port) -> port.inFormat("http://localhost:8761"))) +// .waitingForService("discoveryservice", +// HealthChecks.toRespondOverHttp(8761, (port) -> port.inFormat("http://$HOST:$EXTERNAL_PORT"))) .build(); - //Get IP addresses and ports to run tests on + // Get IP addresses and ports to run tests on @BeforeClass - public static void initialize() { + public static void initialize() throws InterruptedException { + TimeUnit.SECONDS.sleep(20); LOG.info("Initializing ports from Docker"); - DockerPort tripManagementCommand = docker.containers().container("tripmanagementcmd") - .port(8080); + DockerPort tripManagementCommand = docker.containers().container("tripmanagementcmd").port(8080); tripCommandURL = String.format("http://%s:%s", tripManagementCommand.getIp(), tripManagementCommand.getExternalPort()); LOG.info("Trip Command url found: " + tripCommandURL); - DockerPort tripManagementQuery = docker.containers().container("tripmanagementquery") - .port(8080); + DockerPort tripManagementQuery = docker.containers().container("tripmanagementquery").port(8080); tripQueryURL = String.format("http://%s:%s", tripManagementQuery.getIp(), tripManagementQuery.getExternalPort()); LOG.info("Trip Query url found: " + tripQueryURL); - DockerPort gmapsAdapter = docker.containers().container("gmapsadapter") - .port(8080); - gmapsAdapterURL = String.format("http://%s:%s", gmapsAdapter.getIp(), - gmapsAdapter.getExternalPort()); + DockerPort gmapsAdapter = docker.containers().container("gmapsadapter").port(8080); + gmapsAdapterURL = String.format("http://%s:%s", gmapsAdapter.getIp(), gmapsAdapter.getExternalPort()); LOG.info("Gmaps Adapter url found: " + gmapsAdapterURL); - DockerPort calculationService = docker.containers().container("calculationservice") - .port(8080); + DockerPort calculationService = docker.containers().container("calculationservice").port(8080); calculationServiceURL = String.format("http://%s:%s", calculationService.getIp(), calculationService.getExternalPort()); - while (!docker.containers().container("calculationservice").portIsListeningOnHttp(8080, - (port) -> port.inFormat(calculationServiceURL)).succeeded()) { + int tryCount = 0; + while (!docker.containers().container("calculationservice") + .portIsListeningOnHttp(8080, (port) -> port.inFormat(calculationServiceURL)).succeeded()) { + tryCount++; LOG.info("Waiting for calculation service to respond over HTTP"); + if (tryCount == MAX_HEALTH_CHECK_TRIES) { + LOG.error("Error. Max tries (" + tryCount + + ") for health checks on calculationservice reached.\n Calculation Service needs to register " + + "with Eureka before serving on designated port."); + System.exit(100); + } } LOG.info("Calculation Service url found: " + calculationServiceURL); - - DockerPort userService = docker.containers().container("userservice") - .port(8080); - userServiceURL = String.format("http://%s:%s", userService.getIp(), - userService.getExternalPort()); - while (!docker.containers().container("userservice").portIsListeningOnHttp(8080, - (port) -> port.inFormat(userServiceURL)).succeeded()) { + LOG.warn("Calculation Service tryCount: " + tryCount); + System.out.println("********************************************"); + System.out.println("Calculation Service tryCount: " + tryCount); + System.out.println("********************************************"); + + DockerPort userService = docker.containers().container("userservice").port(8080); + userServiceURL = String.format("http://%s:%s", userService.getIp(), userService.getExternalPort()); + tryCount = 0; + while (!docker.containers().container("userservice") + .portIsListeningOnHttp(8080, (port) -> port.inFormat(userServiceURL)).succeeded()) { + tryCount++; LOG.info("Waiting for user service to respond over HTTP"); + if (tryCount == MAX_HEALTH_CHECK_TRIES) { + LOG.error("Error. Max tries (" + tryCount + ") for health checks on userservice reached."); + System.exit(100); + } } LOG.info("User Service url found: " + userServiceURL); + LOG.warn("User Service tryCount: " + tryCount); + System.out.println("********************************************"); + System.out.println("User Service tryCount: " + tryCount); + System.out.println("********************************************"); } private TestRestTemplate restTemplate = new TestRestTemplate(); private String token; - private String tripId; @Before - public void setUp() throws JSONException { + public void setUp() throws JSONException, IOException { String plainCreds = "front-end:front-end"; byte[] plainCredsBytes = plainCreds.getBytes(); byte[] base64CredsBytes = Base64.getEncoder().encode(plainCredsBytes); @@ -116,111 +141,117 @@ public void setUp() throws JSONException { String body = "grant_type=password&scope=webclient&username=passenger&password=password"; HttpEntity request = new HttpEntity<>(body, headers); - //when: - ResponseEntity response = restTemplate.postForEntity(userServiceURL + "/auth/oauth/token", - request, String.class, parameters); + // when: + ResponseEntity response = restTemplate.postForEntity(userServiceURL + "/auth/oauth/token", request, + String.class, parameters); - //then: + // then: assertThat(response.getStatusCodeValue()).isEqualTo(200); JSONObject json = new JSONObject(response.getBody()); token = json.getString("access_token"); } - @Test public void tripCommandPOSTRequestSuccess() { - //given: + // given: HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Bearer " + token); headers.add("Content-Type", "application/json"); String body = "{ \"originAddress\": \"Weston, FL\", \"destinationAddress\": " - + "\"Miami, FL\", \"userId\": \"123e4567-e89b-12d3-a456-426655440000\" }"; + + "\"Miami, FL\", \"userId\": \"4eaf29bc-3909-49d4-a104-3d17f68ba672\" }"; HttpEntity request = new HttpEntity<>(body, headers); - //when: + // when: ResponseEntity response = restTemplate.postForEntity(tripCommandURL + "/api/v1/trip", request, String.class); - //then: + // then: assertThat(response.getStatusCodeValue()).isEqualTo(201); } @Test - public void tripQueryGETSpecificTripRequestSuccess() throws JSONException { - //given: + public void tripQueryGETSpecificTripRequestSuccess() throws JSONException, InterruptedException { + // given: HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Bearer " + token); headers.add("Content-Type", "application/json"); String body = "{ \"originAddress\": \"Weston, FL\", \"destinationAddress\": " - + "\"Miami, FL\", \"userId\": \"123e4567-e89b-12d3-a456-426655440000\" }"; + + "\"Miami, FL\", \"userId\": \"4eaf29bc-3909-49d4-a104-3d17f68ba672\" }"; HttpEntity request = new HttpEntity<>(body, headers); ResponseEntity postResponse = restTemplate.postForEntity(tripCommandURL + "/api/v1/trip", request, String.class); + assertThat(postResponse.getStatusCodeValue()).isEqualTo(201); JSONObject json = new JSONObject(postResponse.getBody()); - tripId = json.getString("id"); + String tripId = json.getString("id"); + + Thread.sleep(1000); - //when: + // when: ResponseEntity response = restTemplate.getForEntity(tripQueryURL + "/api/v1/trip/" + tripId, String.class); - //then: + // then: assertThat(response.getStatusCodeValue()).isEqualTo(200); } @Test public void tripQueryGETAllTripsRequestSuccess() { - //given: + // given: HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Bearer " + token); headers.add("Content-Type", "application/json"); - //when: + // when: ResponseEntity response = restTemplate.getForEntity(tripQueryURL + "/api/v1/trips", String.class); - //then: + // then: assertThat(response.getStatusCodeValue()).isEqualTo(200); } @Test public void calculationServiceRequestSuccess() { - //given: + // given: HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Bearer " + token); headers.add("Content-Type", "application/json"); - String body = "{ \"origin\": \"Weston, FL\", \"destination\": \"Miami, FL\" }"; + String body = "{ \"origin\": \"Weston, FL\", \"destination\": \"Miami, FL\"," + + " \"userId\": \"4eaf29bc-3909-49d4-a104-3d17f68ba672\" }"; HttpEntity request = new HttpEntity<>(body, headers); - //when: + // when: ResponseEntity response = restTemplate.postForEntity(calculationServiceURL + "/api/v1/cost", request, String.class); - //then: + // then: assertThat(response.getStatusCodeValue()).isEqualTo(200); - } @Test - public void gmapsAdapterRequestSuccess() { - //given: + public void gmapsAdapterRequestSuccess() throws Exception { + // given: HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Bearer " + token); headers.add("Content-Type", "application/json"); - String body = "{ \"origin\": \"Weston, FL\", \"destination\": \"Miami, FL\"," - + " \"departureTime\": \"15220998650000000\" }"; + String body = "{ \"origin\": \"2250 N Commerce Pkwy, Weston, FL 33326\", \"destination\": \"11200 SW 8th St, " + + "Miami, FL 33199\", \"departureTime\": \"15220998650000000\" }"; HttpEntity request = new HttpEntity<>(body, headers); - //when: + // when: ResponseEntity response = restTemplate.postForEntity(gmapsAdapterURL + "/api/v1/directions", request, String.class); - //then: - assertThat(response.getStatusCodeValue()).isEqualTo(200); + if (response.getStatusCodeValue() != 200) { + throw new Exception( + String.format("Expected 200, actual %s\n%s", response.getStatusCode(), response.getBody())); + } + // then: + assertThat(response.getStatusCodeValue()).isEqualTo(200); } } diff --git a/src/test/resources/docker-compose-calculation.yml b/src/test/resources/docker-compose-calculation.yml new file mode 100644 index 0000000..26c4474 --- /dev/null +++ b/src/test/resources/docker-compose-calculation.yml @@ -0,0 +1,62 @@ +version: '2.3' + +services: + + discoveryservice: + image: aista/eureka + container_name: 'discoveryservice' + mem_limit: 512M + ports: + - "8761:8761" + + mongo: + image: 'mongo:3.4.1' + container_name: 'mongo' + mem_limit: 512M + ports: + - '27017:27017' + volumes: + - 'mongo:/data/db' + + rabbitmq: + image: rabbitmq:management + container_name: 'rabbitmq' + mem_limit: 512M + ports: + - "5672:5672" + - "15672:15672" + + gmapsadapter: + image: aista/gmaps-adapter + container_name: 'gmapsadapter' + mem_limit: 512M + environment: + - EUREKA_SERVER=discoveryservice + - RABBIT_HOST=rabbitmq + ports: + - '8080' + depends_on: + - discoveryservice + - rabbitmq + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + + calculationservice: + image: aista/calculation-service + container_name: 'calculationservice' + mem_limit: 512M + environment: + - RABBIT_HOST=rabbitmq + - EUREKA_SERVER=discoveryservice + - MONGO_HOST=mongo + - MONGO_PORT=27017 + command: ["go", "run", "main.go"] + ports: + - '8080' + depends_on: + - discoveryservice + - rabbitmq + - mongo + +volumes: + mongo: \ No newline at end of file diff --git a/src/test/resources/docker-compose-gmaps-adapter.yml b/src/test/resources/docker-compose-gmaps-adapter.yml new file mode 100644 index 0000000..943e15d --- /dev/null +++ b/src/test/resources/docker-compose-gmaps-adapter.yml @@ -0,0 +1,33 @@ +version: '2.3' + +services: + + discoveryservice: + image: aista/eureka + container_name: 'discoveryservice' + mem_limit: 512M + ports: + - "8761:8761" + + rabbitmq: + image: rabbitmq:management + container_name: 'rabbitmq' + mem_limit: 512M + ports: + - "5672:5672" + - "15672:15672" + + gmapsadapter: + image: aista/gmaps-adapter + container_name: 'gmapsadapter' + mem_limit: 512M + environment: + - EUREKA_SERVER=discoveryservice + - RABBIT_HOST=rabbitmq + ports: + - '8080' + depends_on: + - discoveryservice + - rabbitmq + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC diff --git a/src/test/resources/docker-compose-trip-cmd-query.yml b/src/test/resources/docker-compose-trip-cmd-query.yml new file mode 100644 index 0000000..94eb577 --- /dev/null +++ b/src/test/resources/docker-compose-trip-cmd-query.yml @@ -0,0 +1,91 @@ +version: '2.3' + +services: + + discoveryservice: + image: aista/eureka + container_name: discoveryservice + mem_limit: 512M + ports: + - "8761:8761" + + mysqlserver: + image: mysql:5.7 + container_name: mysqlserver + mem_limit: 512M + volumes: + - mysql-data:/var/lib/mysql:rw + restart: always + ports: + - '3306:3306' + environment: + MYSQL_USER: + MYSQL_PASSWORD: + MYSQL_ROOT_PASSWORD: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + MYSQL_DATABASE: 'user_service' + + userservice: + image: aista/user-service + container_name: userservice + mem_limit: 512M + depends_on: + - discoveryservice + - mysqlserver + ports: + - '8080' + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + + mongo: + image: 'mongo:3.4.1' + container_name: 'mongo' + mem_limit: 512M + ports: + - '27017:27017' + volumes: + - 'mongo:/data/db' + + rabbitmq: + image: rabbitmq:management + container_name: 'rabbitmq' + mem_limit: 512M + ports: + - "5672:5672" + - "15672:15672" + + tripmanagementcmd: + image: aista/trip-management-cmd + container_name: tripmanagementcmd + mem_limit: 512M + environment: + - RABBIT_HOST=rabbitmq + - MONGO_HOST=mongo + ports: + - '8080' + depends_on: + - discoveryservice + - rabbitmq + - mongo + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + + tripmanagementquery: + image: aista/trip-management-query + container_name: tripmanagementquery + mem_limit: 512M + environment: + - RABBIT_HOST=rabbitmq + - MONGO_HOST=mongo + ports: + - '8080' + depends_on: + - rabbitmq + - mongo + - discoveryservice + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + +volumes: + mongo: + mysql-data: \ No newline at end of file diff --git a/src/test/resources/docker-compose-trip-cmd.yml b/src/test/resources/docker-compose-trip-cmd.yml new file mode 100644 index 0000000..ea54c58 --- /dev/null +++ b/src/test/resources/docker-compose-trip-cmd.yml @@ -0,0 +1,75 @@ +version: '2.3' + +services: + + discoveryservice: + image: aista/eureka + container_name: 'discoveryservice' + mem_limit: 512M + ports: + - "8761:8761" + + mysqlserver: + image: mysql:5.7 + container_name: 'mysqlserver' + mem_limit: 512M + volumes: + - mysql-data:/var/lib/mysql:rw + restart: always + ports: + - '3306:3306' + environment: + MYSQL_USER: + MYSQL_PASSWORD: + MYSQL_ROOT_PASSWORD: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + MYSQL_DATABASE: 'user_service' + + userservice: + image: aista/user-service + container_name: userservice + mem_limit: 512M + depends_on: + - discoveryservice + - mysqlserver + ports: + - '8080' + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + + mongo: + image: 'mongo:3.4.1' + container_name: 'mongo' + mem_limit: 512M + ports: + - '27017:27017' + volumes: + - 'mongo:/data/db' + + rabbitmq: + image: rabbitmq:management + container_name: 'rabbitmq' + mem_limit: 512M + ports: + - "5672:5672" + - "15672:15672" + + tripmanagementcmd: + image: aista/trip-management-cmd + container_name: tripmanagementcmd + mem_limit: 512M + environment: + - RABBIT_HOST=rabbitmq + - MONGO_HOST=mongo + ports: + - '8080' + depends_on: + - discoveryservice + - rabbitmq + - mongo + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + +volumes: + mongo: + mysql-data: \ No newline at end of file diff --git a/src/test/resources/docker-compose-trip-query.yml b/src/test/resources/docker-compose-trip-query.yml new file mode 100644 index 0000000..f9370c2 --- /dev/null +++ b/src/test/resources/docker-compose-trip-query.yml @@ -0,0 +1,75 @@ +version: '2.3' + +services: + + discoveryservice: + image: aista/eureka + container_name: discoveryservice + mem_limit: 512M + ports: + - "8761:8761" + + mysqlserver: + image: mysql:5.7 + container_name: mysqlserver + mem_limit: 512M + volumes: + - mysql-data:/var/lib/mysql:rw + restart: always + ports: + - '3306:3306' + environment: + MYSQL_USER: + MYSQL_PASSWORD: + MYSQL_ROOT_PASSWORD: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + MYSQL_DATABASE: 'user_service' + + userservice: + image: aista/user-service + container_name: userservice + mem_limit: 512M + depends_on: + - discoveryservice + - mysqlserver + ports: + - '8080' + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + + mongo: + image: 'mongo:3.4.1' + container_name: 'mongo' + mem_limit: 512M + ports: + - '27017:27017' + volumes: + - 'mongo:/data/db' + + rabbitmq: + image: rabbitmq:management + container_name: 'rabbitmq' + mem_limit: 512M + ports: + - "5672:5672" + - "15672:15672" + + tripmanagementquery: + image: aista/trip-management-query + container_name: tripmanagementquery + mem_limit: 512M + environment: + - RABBIT_HOST=rabbitmq + - MONGO_HOST=mongo + ports: + - '8080' + depends_on: + - rabbitmq + - mongo + - discoveryservice + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC + +volumes: + mongo: + mysql-data: \ No newline at end of file diff --git a/src/test/resources/docker-compose.yml b/src/test/resources/docker-compose.yml index 9c53a4c..d22af15 100644 --- a/src/test/resources/docker-compose.yml +++ b/src/test/resources/docker-compose.yml @@ -1,14 +1,18 @@ -version: '3' +version: '2.3' services: discoveryservice: image: aista/eureka + container_name: discoveryservice + mem_limit: 512M ports: - "8761:8761" mysqlserver: image: mysql:5.7 + container_name: mysqlserver + mem_limit: 512M volumes: - mysql-data:/var/lib/mysql:rw restart: always @@ -24,15 +28,22 @@ services: userservice: image: aista/user-service container_name: userservice + mem_limit: 512M depends_on: - discoveryservice - mysqlserver + links: + - discoveryservice + - mysqlserver ports: - '8080' + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC mongo: image: 'mongo:3.4.1' - container_name: 'mongo' + container_name: mongo + mem_limit: 512M ports: - '27017:27017' volumes: @@ -40,13 +51,16 @@ services: rabbitmq: image: rabbitmq:management - container_name: 'rabbitmq' + container_name: rabbitmq + mem_limit: 512M ports: - "5672:5672" - "15672:15672" tripmanagementcmd: image: aista/trip-management-cmd + container_name: tripmanagementcmd + mem_limit: 512M environment: - RABBIT_HOST=rabbitmq - MONGO_HOST=mongo @@ -56,9 +70,17 @@ services: - discoveryservice - rabbitmq - mongo + links: + - discoveryservice + - rabbitmq + - mongo + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC tripmanagementquery: image: aista/trip-management-query + container_name: tripmanagementquery + mem_limit: 512M environment: - RABBIT_HOST=rabbitmq - MONGO_HOST=mongo @@ -68,26 +90,51 @@ services: - rabbitmq - mongo - discoveryservice + links: + - rabbitmq + - mongo + - discoveryservice + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC gmapsadapter: image: aista/gmaps-adapter + container_name: gmapsadapter + mem_limit: 512M environment: - EUREKA_SERVER=discoveryservice + - RABBIT_HOST=rabbitmq ports: - '8080' depends_on: - discoveryservice + - rabbitmq + links: + - discoveryservice + - rabbitmq + environment: + - JAVA_OPTS=-Xms64m -Xmx128m -XX:+UseG1GC calculationservice: image: aista/calculation-service + container_name: calculationservice + mem_limit: 512M environment: + - RABBIT_HOST=rabbitmq - EUREKA_SERVER=discoveryservice - command: ["go", "run", "main.go"] + - MONGO_HOST=mongo + - MONGO_PORT=27017 ports: - '8080' depends_on: - discoveryservice + - rabbitmq + - mongo + links: + - discoveryservice + - rabbitmq + - mongo volumes: mongo: - mysql-data: \ No newline at end of file + mysql-data: