Skip to content

Commit f040ddb

Browse files
author
Fabian Martinez
authored
fix MAS CI : custom image for running postgresql + tests (#1846)
1 parent b7d0797 commit f040ddb

File tree

11 files changed

+147
-13
lines changed

11 files changed

+147
-13
lines changed

Dockerfile.testing

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
FROM quay.io/app-sre/postgres
2+
3+
ENV POSTGRES_PASSWORD test
4+
ENV POSTGRES_USER test
5+
ENV POSTGRES_DB test
6+
7+
RUN apt-get update
8+
RUN apt-get install -y make openjdk-11-jdk curl
9+
10+
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
11+
&& curl -fsSL -o /tmp/apache-maven.tar.gz https://apache.osuosl.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz \
12+
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
13+
&& rm -f /tmp/apache-maven.tar.gz \
14+
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
15+
16+
# copy the setup scripts and the pr check script
17+
COPY pr_check_docker.sh /docker-entrypoint-initdb.d/
18+
19+
# copy over the kas-fleet-manager
20+
RUN mkdir -p /opt/srs/apicurio-registry
21+
COPY . /opt/srs/apicurio-registry
22+
23+
# Docker built / owned as 'root' but the 'postgres' user runs the image
24+
RUN chown -R postgres:postgres /opt/srs/apicurio-registry /usr/bin/mvn
25+
26+
WORKDIR /opt/srs/apicurio-registry
27+
28+
ENTRYPOINT ["docker-entrypoint.sh"]
29+
30+
CMD ["postgres"]

Makefile

+7-6
Original file line numberDiff line numberDiff line change
@@ -209,16 +209,17 @@ push-all-images: push-mem-image push-sql-image push-kafkasql-image push-tenant-m
209209

210210
.PHONY: pr-check ## Builds and runs basic tests for multitenant registry pipelines
211211
pr-check:
212-
# TODO undo skipping tests for main build and running tests just for app module
213-
CURRENT_ENV=mas mvn clean install -Pno-docker -Dskip.yarn -Pprod -Psql -Pmultitenancy -am -pl app -Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false
214212
CURRENT_ENV=mas mvn clean install -Pno-docker -Dskip.yarn -Pprod -Psql -Pmultitenancy -am -pl storage/sql,multitenancy/tenant-manager-api \
215-
-Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false -DskipTests
216-
# NO_DOCKER=true mvn verify -Pintegration-tests -Pmultitenancy -Psql -am -pl integration-tests/testsuite \
217-
# -Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false
213+
-Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false
214+
./scripts/clean-postgres.sh
215+
CURRENT_ENV=mas NO_DOCKER=true mvn verify -Pintegration-tests -Pmultitenancy -Psql -am -pl integration-tests/testsuite \
216+
-Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false
218217

219218
.PHONY: build-project ## Builds the components for multitenant registry pipelines
220219
build-project:
221-
# TODO undo skipping tests for main build and running tests just for app module
220+
# run unit tests for app module
221+
CURRENT_ENV=mas mvn clean install -Pno-docker -Dskip.yarn -Pprod -Psql -Pmultitenancy -am -pl app -Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false
222+
# build everything without running tests in order to be able to build container images
222223
CURRENT_ENV=mas mvn clean install -Pprod -Pno-docker -Dskip.yarn -Psql -Pmultitenancy -Dmaven.javadoc.skip=true --no-transfer-progress -DtrimStackTrace=false -DskipTests
223224

224225
# Please declare your targets as .PHONY in the format shown below, so that the 'make help' parses the information correctly.

app/src/test/java/io/apicurio/registry/ImportLifecycleBeanTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.quarkus.test.junit.TestProfile;
66
import org.junit.jupiter.api.BeforeEach;
77
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
89

910
import static io.restassured.RestAssured.given;
1011
import static org.hamcrest.Matchers.containsInAnyOrder;
@@ -14,6 +15,7 @@
1415

1516
@QuarkusTest
1617
@TestProfile(ImportLifecycleBeanTestProfile.class)
18+
@DisabledIfEnvironmentVariable(named = AbstractRegistryTestBase.CURRENT_ENV, matches = AbstractRegistryTestBase.CURRENT_ENV_MAS_REGEX)
1719
public class ImportLifecycleBeanTest extends AbstractResourceTestBase {
1820

1921
@Override

app/src/test/java/io/apicurio/registry/RegistryClientTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.commons.io.IOUtils;
4949
import org.junit.jupiter.api.Assertions;
5050
import org.junit.jupiter.api.Test;
51+
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
5152
import org.slf4j.Logger;
5253
import org.slf4j.LoggerFactory;
5354

@@ -933,6 +934,7 @@ public void smokeLogLevels() {
933934
}
934935

935936
@Test
937+
@DisabledIfEnvironmentVariable(named = AbstractRegistryTestBase.CURRENT_ENV, matches = AbstractRegistryTestBase.CURRENT_ENV_MAS_REGEX)
936938
public void testDefaultGroup() throws Exception {
937939
String nullDefaultGroup = null;
938940
String artifactId1 = "testDefaultGroup-" + UUID.randomUUID().toString();

app/src/test/java/io/apicurio/registry/limits/LimitsTest.java

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
import org.apache.commons.lang3.StringUtils;
2525
import org.junit.jupiter.api.Assertions;
2626
import org.junit.jupiter.api.Test;
27+
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
28+
29+
import io.apicurio.registry.AbstractRegistryTestBase;
2730
import io.apicurio.registry.AbstractResourceTestBase;
2831
import io.apicurio.registry.rest.client.exception.LimitExceededException;
2932
import io.apicurio.registry.rest.v2.beans.EditableMetaData;
@@ -38,6 +41,7 @@
3841
*/
3942
@QuarkusTest
4043
@TestProfile(LimitsTestProfile.class)
44+
@DisabledIfEnvironmentVariable(named = AbstractRegistryTestBase.CURRENT_ENV, matches = AbstractRegistryTestBase.CURRENT_ENV_MAS_REGEX)
4145
public class LimitsTest extends AbstractResourceTestBase {
4246

4347
@Test

integration-tests/integration-tests-common/src/main/java/io/apicurio/tests/common/RegistryFacade.java

+37-1
Original file line numberDiff line numberDiff line change
@@ -482,8 +482,44 @@ public boolean isContainer() {
482482
private void setupSQLStorage(Map<String, String> appEnv) throws Exception {
483483

484484
String noDocker = System.getenv("NO_DOCKER");
485+
String currentEnv = System.getenv("CURRENT_ENV");
485486

486-
if (noDocker != null && noDocker.equals("true")) {
487+
if (currentEnv != null && "mas".equals(currentEnv)) {
488+
489+
//postgresql running in a pre-deployed container
490+
491+
appEnv.put("REGISTRY_DATASOURCE_URL", "jdbc:postgresql://localhost:5432/test");
492+
appEnv.put("REGISTRY_DATASOURCE_USERNAME", "test");
493+
appEnv.put("REGISTRY_DATASOURCE_PASSWORD", "test");
494+
495+
processes.add(new RegistryTestProcess() {
496+
497+
@Override
498+
public String getName() {
499+
return "container-postgresql";
500+
}
501+
502+
@Override
503+
public void close() throws Exception {
504+
}
505+
506+
@Override
507+
public String getStdOut() {
508+
return "";
509+
}
510+
511+
@Override
512+
public String getStdErr() {
513+
return "";
514+
}
515+
516+
@Override
517+
public boolean isContainer() {
518+
return false;
519+
}
520+
});
521+
522+
} else if (noDocker != null && noDocker.equals("true")) {
487523
EmbeddedPostgres database = EmbeddedPostgres.start();
488524

489525

pr-check.sh

+12-6
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,18 @@ build_project() {
3838
# docker run --rm -t -u $(id -u):$(id -g) -w /home/user -v $(pwd):/home/user quay.io/riprasad/srs-project-builder:latest bash -c "${MVN_BUILD_COMMAND}"
3939

4040
#TODO confirm we are ok with this, using this ci-tools image is the recomended way, but using this we don't control the java nor maven version...
41-
docker pull quay.io/app-sre/mk-ci-tools:latest
42-
docker run -v $(pwd):/opt/srs -w /opt/srs -e HOME=/tmp -u $(id -u) \
43-
-e LANG=en_US.UTF-8 \
44-
-e LANGUAGE=en_US:en \
45-
-e LC_ALL=en_US.UTF-8 \
46-
quay.io/app-sre/mk-ci-tools:latest make pr-check
41+
# docker pull quay.io/app-sre/mk-ci-tools:latest
42+
# docker run -v $(pwd):/opt/srs -w /opt/srs -e HOME=/tmp -u $(id -u) \
43+
# -e LANG=en_US.UTF-8 \
44+
# -e LANGUAGE=en_US:en \
45+
# -e LC_ALL=en_US.UTF-8 \
46+
# quay.io/app-sre/mk-ci-tools:latest make pr-check
47+
48+
49+
docker login -u "${QUAY_USER}" -p "${QUAY_TOKEN}" quay.io
50+
docker build -t apicurio-registry-test -f Dockerfile.testing .
51+
docker run -i apicurio-registry-test
52+
4753
}
4854

4955
main() {

pr_check_docker.sh

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash -ex
2+
3+
# start postgres
4+
which pg_ctl
5+
PGDATA=/var/lib/postgresql/data /usr/lib/postgresql/*/bin/pg_ctl -w stop
6+
PGDATA=/var/lib/postgresql/data /usr/lib/postgresql/*/bin/pg_ctl start -o "-c listen_addresses='*' -p 5432"
7+
8+
echo "Running make pr-check"
9+
make pr-check
10+
11+
# required for entrypoint script run by docker to exit and stop container
12+
exit 0

scripts/clean-postgres.sh

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
PGPASSWORD=test psql -h localhost -p 5432 -U test -d test -a -f scripts/clean-postgres.sql

scripts/clean-postgres.sql

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
DROP TABLE apicurio;
2+
3+
DROP SEQUENCE contentidsequence;
4+
DROP SEQUENCE globalidsequence;
5+
6+
DROP TABLE globalrules;
7+
8+
DROP TABLE artifacts CASCADE;
9+
10+
DROP TABLE rules CASCADE;
11+
12+
DROP TABLE content CASCADE;
13+
14+
DROP TABLE versions CASCADE;
15+
16+
DROP TABLE properties CASCADE;
17+
18+
DROP TABLE labels CASCADE;
19+
20+
DROP TABLE logconfiguration;
21+
22+
DROP TABLE groups;
23+
24+
DROP TABLE acls;

storage/sql/src/test/java/io/apicurio/registry/storage/util/PostgreSqlEmbeddedTestResource.java

+14
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ public class PostgreSqlEmbeddedTestResource implements QuarkusTestResourceLifecy
3737
@Override
3838
public Map<String, String> start() {
3939

40+
String currentEnv = System.getenv("CURRENT_ENV");
41+
42+
if (currentEnv != null && "mas".equals(currentEnv)) {
43+
Map<String, String> props = new HashMap<>();
44+
props.put("quarkus.datasource.jdbc.url", "jdbc:postgresql://localhost:5432/test");
45+
props.put("quarkus.datasource.username", "test");
46+
props.put("quarkus.datasource.password", "test");
47+
return props;
48+
} else {
49+
return startPostgresql();
50+
}
51+
}
52+
53+
private Map<String, String> startPostgresql() {
4054
try {
4155
database = EmbeddedPostgres.start();
4256
} catch (IOException e) {

0 commit comments

Comments
 (0)