Skip to content

Commit dc6095a

Browse files
authored
AB2D-1040: Migrate CI away from bluebutton.hhsdevcloud (#206)
* Removed references to the BFD in HHS Dev Cloud and replaced with BFD Production Sandbox. Updated Travis configuration (`.travis.yml`) to _securely_ pass the keystore location, password and file itself to the builds (`travis encrypt` and `travis encrypt-file` were used). * Removed the quotes that were making their way into environment variable values; standardized on keystore location so that both Maven tests (run outside of Docker Compose) and e2e tests (run _inside_ Docker Compose) equally pass. * Added `AB2D_BFD_URL` to docker-compose.yml for consistency as suggested during PR review. * Incorrect encrypted `AB2D_BFD_KEYSTORE_PASSWORD` value got into .travis.yml by mistake. Also, modified TestRunner.java to automatically pass system environment variables to the containers; otherwise values set in `.bash_profile` simply were not making it through. * Did not realize application.bfd.properties under "test" actually referred to environment variables! * Just realized we are *not* sending coverage information to Code Climate for a good number of modules.
1 parent e98de24 commit dc6095a

File tree

8 files changed

+62
-43
lines changed

8 files changed

+62
-43
lines changed

.travis.yml

+46-31
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,60 @@
11
env:
22
global:
3-
# The CC_TEST_REPORTER_ID
4-
- secure: OY3JWzy8JxPXXqT/YOnYcwFGm46DgQdGMV5dkhDjrBeKgfb2H7ohY6GkAStQv8vV6LE/yu3N6f+XGuPwH2q27Q3I8daYeNY2MtGMt+wokkqhkJWG/XdqQodr+RbkUYN7BHiYQC6ZQKdh9NIA4JIWsNdh8TKrc7cFxy4WM5ACGO9pf6y96GRVT1CHIlwaYzXna+dE0Khbg3EGSa0tcEwLUmYdPGwK+6hiMeX0wTbhDr4YEh5kdnIAFuDDfj+KKmT9FJeTJXywFc9I6YuuYLL+z1g4GMAWCV7PoZdBOLVZQXzP/A8IE1jN7bSNean2risBRXi+PBKohZuvjpLb4UbTTp1+HR5FzPCKpkNvkLmyHpqaDCbDXfXSzMEwWxbj/6vmDK+hO5fqZrI/iO0rNugixxOKEl/ZPXga2Zf1nVxEGzfI86BVNHMegSL1AfLJ5kI+P/0HGnUBbnSAD/kH8k8Rd7r/PHCqoN7VwUhuirI5C9Ulbd6iMm1C8sgq7lOogJvVoS939lP3IcrtNhqmS3Wyc2YsWUE3RlIiJizOQB4K925el41o8qQmDvxIbB8tiDaqfkas3OjDVCr+JjzczXHgjV6Uze5EQovIQ4SvgNidZkjNyei+piJ+lwHx/34jBAC4GNs7uFgkA+RTrNtZCyHK2f2lv7OyNNzWyC3XMRIyQsM=
5-
- codeclimate: true
6-
- DOCKER_COMPOSE_VERSION: 1.24.1
7-
3+
- secure: OY3JWzy8JxPXXqT/YOnYcwFGm46DgQdGMV5dkhDjrBeKgfb2H7ohY6GkAStQv8vV6LE/yu3N6f+XGuPwH2q27Q3I8daYeNY2MtGMt+wokkqhkJWG/XdqQodr+RbkUYN7BHiYQC6ZQKdh9NIA4JIWsNdh8TKrc7cFxy4WM5ACGO9pf6y96GRVT1CHIlwaYzXna+dE0Khbg3EGSa0tcEwLUmYdPGwK+6hiMeX0wTbhDr4YEh5kdnIAFuDDfj+KKmT9FJeTJXywFc9I6YuuYLL+z1g4GMAWCV7PoZdBOLVZQXzP/A8IE1jN7bSNean2risBRXi+PBKohZuvjpLb4UbTTp1+HR5FzPCKpkNvkLmyHpqaDCbDXfXSzMEwWxbj/6vmDK+hO5fqZrI/iO0rNugixxOKEl/ZPXga2Zf1nVxEGzfI86BVNHMegSL1AfLJ5kI+P/0HGnUBbnSAD/kH8k8Rd7r/PHCqoN7VwUhuirI5C9Ulbd6iMm1C8sgq7lOogJvVoS939lP3IcrtNhqmS3Wyc2YsWUE3RlIiJizOQB4K925el41o8qQmDvxIbB8tiDaqfkas3OjDVCr+JjzczXHgjV6Uze5EQovIQ4SvgNidZkjNyei+piJ+lwHx/34jBAC4GNs7uFgkA+RTrNtZCyHK2f2lv7OyNNzWyC3XMRIyQsM=
4+
- codeclimate: true
5+
- DOCKER_COMPOSE_VERSION: 1.24.1
6+
- secure: h8p+gMxYmKLZYrXrd1V3t8WSvrGjiFN2SmYsdQjgtZrZ5Hqm/IY0X18PF70/5nSNxc3h6JF0tfpkANmfdTJEFIF4PNccWpqfhsZc7axR691/pK0ky4kL7xWPVzAs5PP5JdkU2dDfibvb3KFw6sGZYfUdRhDRzFb5cUcNff+qgg0P1A3PRG07MplwUhtB0Xl9gdImaUmqW86kTXmISMpcTJ4bko9KRkX/3dp75B/NvLJqlh0KMaH2T0YtcM49MUPKuSmQOD16huWdZqmzOLN7XJ/rZk6kGWNeyK6yLhy9sd4sNcLZmn8ejxrjfVC1/lHNGRMXvd6oRKBLWK5E2KwYoyMi514t4oTLNA7I1Y44OIq9QE059d81Y+qbcU0eqOXS5MxBZdX7FTVKhH7hirhz+eD0tQIbcvJEhxQL6gWaQuyPgVudsAl6yDwwnSdIUJzdUV9Ri8HTJTAB8zi/sFUIf/aM/8CTzq38I2OJ8SdxQ+n+cd64RIMOSb2qJuI4TWZNudictpHl6f/rVPohpDz+vis1p1HixmfTI5mGl9llgT3U6zqqlcZPXDVkZBCRgf+gbdlB5YnFImU8n/N6RVTmfRFGQMybbDORM6ltZX+Ao913L88FpwTfpTkfb/tqfqD5mwWMtESHxGtVTYZug9+tYk+fUEySSWO01JTvtsj/NAM=
7+
- secure: n1NNXk+OkWTys5pLxwH+o1m0LT53HYBMxJz0negjampyLjPg0xPhdnGqdFITejHQ/fUYDdAFfkoJ/2sX2EZppya8B+X8YovqfxVms2F18e3/3zQhutmw3vxFgVuy/Lp5NkzQYDVoggzQOPNLfSJrCCSIo2FVdaKNjLnjCx3V1IFPq2HzFuUoFNliOpgiox6PICgg0HSysifRjhZygnSnlS0t7yTs5F3hipmPyQOhdyos/f7ut0x0ugW6cENDL8Bk+nR2znXzLqsdC6Y/+xjrpOubTdhQQyOHGTgdsHFTYSgfqBgTNiMzh8OorKfHs1gALnGjUtd4zzJg7lXqnHCkAM8RlFGg1aq7AMxLvuNYz+q84xNIfAxdpRjU2xukdMFke0+c2wR4x2eJHit691wMcezoaiJ5py7D3slmsdhEzyWLNOd86fWPpbebS7S18/p9kOwFpvS73YhGPKD/8M7ot/k78ota/2prBRih94RknXYnDj49HGLLzJu5UbXwf/juLdJK4t3ItapsmHef7hoZnrsPt9Nj0ZkWDI1ePVremFfQWbNGBPwIh/mQ4P+V44FAn3gkAjyPkklgC9slpfqZ254djsfejmMCc2QZTqVzJ1lMxrjxU0K1leVQNnvJFDafWgfVTIguhlgeLW7CC1IXB8bp3aJTp0GnbwikExVPOWs=
88
dist: bionic
99
language: java
1010
jdk:
1111
- openjdk13
1212
cache:
1313
directories:
1414
- "$HOME/.m2"
15-
1615
before_install:
17-
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
18-
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
19-
- sudo apt-get update
20-
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
21-
- sudo rm /usr/local/bin/docker-compose
22-
- curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
23-
- chmod +x docker-compose
24-
- sudo mv docker-compose /usr/local/bin
25-
- docker-compose version
26-
- export OKTA_CLIENT_ID=0oa2t0lsrdZw5uWRx297
27-
- export OKTA_CLIENT_PASSWORD=HHduWG6LogIvDIQuWgp3Zlo9OYMValTtH5OBcuHw
28-
- export SECONDARY_USER_OKTA_CLIENT_ID=0oa2t0lc65ErV8OmY297
29-
- export SECONDARY_USER_OKTA_CLIENT_PASSWORD=1Bl3HGO6eglkXUDtjVjto3L-3C0offzTMk2qlz9r
30-
16+
- mkdir -p /tmp/ab2d_efs_mount
17+
- openssl aes-256-cbc -K $encrypted_27e3c48779c8_key -iv $encrypted_27e3c48779c8_iv
18+
-in ab2d_dev_keystore.enc -out /tmp/ab2d_efs_mount/ab2d_dev_keystore -d
19+
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
20+
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu
21+
$(lsb_release -cs) stable"
22+
- sudo apt-get update
23+
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
24+
- sudo rm /usr/local/bin/docker-compose
25+
- curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname
26+
-s`-`uname -m` > docker-compose
27+
- chmod +x docker-compose
28+
- sudo mv docker-compose /usr/local/bin
29+
- docker-compose version
30+
- export OKTA_CLIENT_ID=0oa2t0lsrdZw5uWRx297
31+
- export OKTA_CLIENT_PASSWORD=HHduWG6LogIvDIQuWgp3Zlo9OYMValTtH5OBcuHw
32+
- export SECONDARY_USER_OKTA_CLIENT_ID=0oa2t0lc65ErV8OmY297
33+
- export SECONDARY_USER_OKTA_CLIENT_PASSWORD=1Bl3HGO6eglkXUDtjVjto3L-3C0offzTMk2qlz9r
3134
install: true
32-
3335
before_script:
34-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
35-
- chmod +x ./cc-test-reporter
36-
- ./cc-test-reporter before-build
36+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
37+
> ./cc-test-reporter
38+
- chmod +x ./cc-test-reporter
39+
- "./cc-test-reporter before-build"
3740
script:
38-
- mvn clean verify
41+
- mvn clean verify
3942
after_script:
40-
- export JACOCO_SOURCE_PATH=./api/src/main/java; ./cc-test-reporter format-coverage ./api/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.api.json
41-
- export JACOCO_SOURCE_PATH=./common/src/main/java; ./cc-test-reporter format-coverage ./common/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.common.json
42-
- export JACOCO_SOURCE_PATH=./hpms/src/main/java; ./cc-test-reporter format-coverage ./hpms/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.hpms.json
43-
- export JACOCO_SOURCE_PATH=./bfd/src/main/java; ./cc-test-reporter format-coverage ./bfd/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.bfd.json
44-
- ./cc-test-reporter sum-coverage codeclimate.*.json -o coverage/codeclimate.json
45-
- if [[ "$TRAVIS_TEST_RESULT" == 0 ]]; then ./cc-test-reporter upload-coverage; fi
43+
- export JACOCO_SOURCE_PATH=./api/src/main/java; ./cc-test-reporter format-coverage
44+
./api/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.api.json
45+
- export JACOCO_SOURCE_PATH=./audit/src/main/java; ./cc-test-reporter format-coverage
46+
./audit/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.audit.json
47+
- export JACOCO_SOURCE_PATH=./common/src/main/java; ./cc-test-reporter format-coverage
48+
./common/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.common.json
49+
- export JACOCO_SOURCE_PATH=./filter/src/main/java; ./cc-test-reporter format-coverage
50+
./filter/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.filter.json
51+
- export JACOCO_SOURCE_PATH=./hpms/src/main/java; ./cc-test-reporter format-coverage
52+
./hpms/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.hpms.json
53+
- export JACOCO_SOURCE_PATH=./optout/src/main/java; ./cc-test-reporter format-coverage
54+
./optout/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.optout.json
55+
- export JACOCO_SOURCE_PATH=./bfd/src/main/java; ./cc-test-reporter format-coverage
56+
./bfd/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.bfd.json
57+
- export JACOCO_SOURCE_PATH=./worker/src/main/java; ./cc-test-reporter format-coverage
58+
./worker/target/site/jacoco/jacoco.xml --input-type jacoco -o codeclimate.worker.json
59+
- "./cc-test-reporter sum-coverage codeclimate.*.json -o coverage/codeclimate.json"
60+
- if [[ "$TRAVIS_TEST_RESULT" == 0 ]]; then ./cc-test-reporter upload-coverage; fi

ab2d_dev_keystore.enc

5.7 KB
Binary file not shown.

bfd/src/main/resources/application.bfd.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
bfd.keystore.password=${AB2D_BFD_KEYSTORE_PASSWORD:#{'changeit'}}
22
bfd.keystore.location=${AB2D_BFD_KEYSTORE_LOCATION:#{'/bb.keystore'}}
3-
bfd.serverBaseUrl=${AB2D_BFD_URL:#{'https://fhir.backend.bluebutton.hhsdevcloud.us/v1/fhir/'}}
3+
bfd.serverBaseUrl=${AB2D_BFD_URL:#{'https://prod-sbx.bfdcloud.net/v1/fhir/'}}
44
bfd.hicn.hash=https://bluebutton.cms.gov/resources/identifier/hicn-hash
55
bfd.connectionTimeout=${AB2D_BFD_CONNECTION_TIMEOUT:#{5000}}
66
bfd.socketTimeout=${AB2D_BFD_SOCKET_TIMEOUT:#{10000}}

bfd/src/test/resources/application.bfd.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
bfd.keystore.password=${AB2D_BFD_KEYSTORE_PASSWORD:#{'changeit'}}
2-
bfd.keystore.location=${AB2D_BFD_KEYSTORE_LOCATION:#{'/bb.keystore'}}
1+
bfd.keystore.password=changeit
2+
bfd.keystore.location=/bb.keystore
33
bfd.serverBaseUrl=http://localhost:8083/v1/fhir/
44
bfd.connectionTimeout=5000
55
bfd.hicn.hash=https://bluebutton.cms.gov/resources/identifier/hicn-hash

bfd/src/test/resources/bb-test-data/eob/20140000009893.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<total value="1"/>
88
<link>
99
<relation value="self"/>
10-
<url value="https://fhir.backend.bluebutton.hhsdevcloud.us/v1/fhir/ExplanationOfBenefit?patient=20140000009893&amp;excludeSAMHSA=true"/>
10+
<url value="https://prod-sbx.bfdcloud.net/v1/fhir/ExplanationOfBenefit?patient=-20140000009893&amp;excludeSAMHSA=true"/>
1111
</link>
1212
<entry>
1313
<resource>

docker-compose.yml

+8
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ services:
4747
- AB2D_DB_USER=ab2d
4848
- AB2D_DB_PASSWORD=ab2d
4949
- AB2D_EFS_MOUNT=/tmp/ab2d_efs_mount
50+
- AB2D_BFD_URL=https://prod-sbx.bfdcloud.net/v1/fhir/
51+
- AB2D_BFD_KEYSTORE_PASSWORD=${AB2D_BFD_KEYSTORE_PASSWORD}
52+
- AB2D_BFD_KEYSTORE_LOCATION=${AB2D_BFD_KEYSTORE_LOCATION}
5053
- NEW_RELIC_LICENSE_KEY="${NEW_RELIC_LICENSE_KEY}"
5154
- NEW_RELIC_APP_NAME="${NEW_RELIC_APP_NAME}"
5255
depends_on:
@@ -57,3 +60,8 @@ services:
5760
# This needs a shared volume so that both the API and worker module can access the ndjson files being generated
5861
volumes:
5962
tmp-volume:
63+
driver: local
64+
driver_opts:
65+
type: none
66+
device: /tmp/ab2d_efs_mount
67+
o: bind

e2e-test/src/test/java/gov/cms/ab2d/e2etest/TestRunner.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import org.json.JSONException;
1010
import org.json.JSONObject;
1111
import org.junit.Assert;
12-
import org.junit.jupiter.api.*;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.TestInstance;
1314
import org.junit.jupiter.api.extension.ExtendWith;
1415
import org.testcontainers.containers.DockerComposeContainer;
15-
import org.testcontainers.containers.output.Slf4jLogConsumer;
1616
import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
1717
import org.testcontainers.junit.jupiter.Testcontainers;
1818
import org.yaml.snakeyaml.Yaml;
@@ -26,14 +26,12 @@
2626
import java.net.http.HttpResponse;
2727
import java.nio.charset.Charset;
2828
import java.nio.charset.StandardCharsets;
29-
3029
import java.time.Duration;
3130
import java.time.Instant;
3231
import java.time.temporal.ChronoUnit;
3332
import java.util.*;
3433
import java.util.zip.GZIPInputStream;
3534

36-
import static gov.cms.ab2d.common.util.Constants.API_PREFIX;
3735
import static gov.cms.ab2d.e2etest.APIClient.PATIENT_EXPORT_PATH;
3836
import static java.time.temporal.ChronoUnit.SECONDS;
3937
import static org.hamcrest.Matchers.matchesPattern;
@@ -75,6 +73,7 @@ public void init() throws IOException, InterruptedException, JSONException {
7573
if(environment.isUsesDockerCompose()) {
7674
DockerComposeContainer container = new DockerComposeContainer(
7775
new File("../docker-compose.yml"))
76+
.withEnv(System.getenv())
7877
.withScaledService("worker", 2)
7978
.withExposedService("db", 5432)
8079
.withExposedService("api", 8080, new HostPortWaitStrategy()

worker/src/main/java/gov/cms/ab2d/worker/adapter/bluebutton/ContractAdapterStub.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import java.util.List;
1616
import java.util.stream.Collectors;
1717

18-
import static org.apache.commons.lang3.StringUtils.contains;
19-
2018
/**
2119
* This is a stub implementation that we can use till the BFD API becomes available.
2220
* The rightmost 3 characters of the contractNumber being passed in must be numeric.
@@ -112,8 +110,7 @@ private List<String> getFromSampleFile(int rowsToRetrieve) {
112110
.limit(rowsToRetrieve)
113111
// This is kind of a hack, I know, but this is a mock,
114112
// and it's not going to be around for much longer anyway.
115-
.map(row -> contains(serverBaseUrl,
116-
"hhsdevcloud") ? row : "-"
113+
.map(row -> "-"
117114
.concat(row))
118115
.collect(Collectors.toList());
119116

0 commit comments

Comments
 (0)