Upgrade timescaledb
[cps/cps-temporal.git] / src / test / java / org / onap / cps / temporal / repository / containers / TimescaleContainer.java
1 /*
2  * ============LICENSE_START=======================================================
3  * Copyright (c) 2021 Bell Canada.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * ============LICENSE_END=========================================================
17  */
18
19 package org.onap.cps.temporal.repository.containers;
20
21 import org.testcontainers.containers.PostgreSQLContainer;
22 import org.testcontainers.utility.DockerImageName;
23
24 /**
25  * Container for timescale database.
26  */
27 public class TimescaleContainer extends PostgreSQLContainer<TimescaleContainer> {
28
29     private static final String IMAGE_NAME = "timescale/timescaledb:2.5.1-pg14";
30     private static final DockerImageName DOCKER_IMAGE_NAME =
31             DockerImageName.parse(IMAGE_NAME).asCompatibleSubstituteFor("postgres");
32
33     private static TimescaleContainer container;
34
35     private TimescaleContainer() {
36         super(DOCKER_IMAGE_NAME);
37     }
38
39     /**
40      * Get the unique container instance.
41      * @return the container instance.
42      */
43     public static TimescaleContainer getInstance() {
44         if (container == null) {
45             container = new TimescaleContainer();
46             Runtime.getRuntime().addShutdownHook(new Thread(container::terminate));
47         }
48         return container;
49     }
50
51     @Override
52     public void start() {
53         super.start();
54         System.setProperty("DB_URL", container.getJdbcUrl());
55         System.setProperty("DB_USERNAME", container.getUsername());
56         System.setProperty("DB_PASSWORD", container.getPassword());
57     }
58
59     @Override
60     public void stop() {
61         // Do nothing on test completion, container removal is performed via terminate() on JVM shutdown.
62     }
63
64     private void terminate() {
65         super.stop();
66     }
67
68 }