Skip to content

Commit 4e4c447

Browse files
committed
Adding integration test for Couchbase and ICON weather model
1 parent 63242d5 commit 4e4c447

File tree

5 files changed

+351
-49
lines changed

5 files changed

+351
-49
lines changed

src/test/groovy/edu/ie3/datamodel/io/source/couchbase/CouchbaseWeatherSourceCosmoIT.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class CouchbaseWeatherSourceCosmoIT extends Specification implements WeatherSour
3232
BucketDefinition bucketDefinition = new BucketDefinition("ie3_in")
3333

3434
@Shared
35-
CouchbaseContainer couchbaseContainer = new CouchbaseContainer("couchbase/server:latest").withBucket(bucketDefinition)
35+
CouchbaseContainer couchbaseContainer = new CouchbaseContainer("couchbase/server:6.0.2").withBucket(bucketDefinition)
3636
.withExposedPorts(8091, 8092, 8093, 8094, 11210)
3737

3838
@Shared
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/*
2+
* © 2021. TU Dortmund University,
3+
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
4+
* Research group Distribution grid planning and operation
5+
*/
6+
package edu.ie3.datamodel.io.source.couchbase
7+
8+
import edu.ie3.datamodel.io.connectors.CouchbaseConnector
9+
import edu.ie3.datamodel.io.factory.timeseries.IconTimeBasedWeatherValueFactory
10+
import edu.ie3.datamodel.io.factory.timeseries.TimeBasedWeatherValueFactory
11+
import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries
12+
import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue
13+
import edu.ie3.test.common.IconWeatherTestData
14+
import edu.ie3.test.helper.WeatherSourceTestHelper
15+
import edu.ie3.util.TimeUtil
16+
import edu.ie3.util.interval.ClosedInterval
17+
import org.testcontainers.couchbase.BucketDefinition
18+
import org.testcontainers.couchbase.CouchbaseContainer
19+
import org.testcontainers.spock.Testcontainers
20+
import org.testcontainers.utility.MountableFile
21+
import spock.lang.Shared
22+
import spock.lang.Specification
23+
24+
import java.time.ZoneId
25+
26+
@Testcontainers
27+
class CouchbaseWeatherSourceIconIT extends Specification implements WeatherSourceTestHelper {
28+
29+
@Shared
30+
BucketDefinition bucketDefinition = new BucketDefinition("ie3_in")
31+
32+
@Shared
33+
CouchbaseContainer couchbaseContainer = new CouchbaseContainer("couchbase/server:6.0.2").withBucket(bucketDefinition)
34+
.withExposedPorts(8091, 8092, 8093, 8094, 11210)
35+
36+
@Shared
37+
CouchbaseWeatherSource source
38+
39+
static String coordinateIdColumnName = TimeBasedWeatherValueFactory.COORDINATE_ID_NAMING.flatCase()
40+
41+
def setupSpec() {
42+
// Copy import file with json array of documents into docker
43+
def couchbaseWeatherJsonsFile = MountableFile.forClasspathResource("/testcontainersFiles/couchbase/icon/weather.json")
44+
couchbaseContainer.copyFileToContainer(couchbaseWeatherJsonsFile, "/home/weather.json")
45+
46+
// create an index for the document keys
47+
couchbaseContainer.execInContainer("cbq",
48+
"-e", "http://localhost:8093",
49+
"-u", couchbaseContainer.username,
50+
"-p", couchbaseContainer.password,
51+
"-s", "CREATE index id_idx ON `" + bucketDefinition.name + "` (META().id);")
52+
53+
//import the json documents from the copied file
54+
couchbaseContainer.execInContainer("cbimport", "json",
55+
"-cluster", "http://localhost:8091",
56+
"--bucket", "ie3_in",
57+
"--username", couchbaseContainer.username,
58+
"--password", couchbaseContainer.password,
59+
"--format", "list",
60+
"--generate-key", "weather::%" + coordinateIdColumnName + "%::%time%",
61+
"--dataset", "file:///home/weather.json")
62+
63+
def connector = new CouchbaseConnector(couchbaseContainer.connectionString, bucketDefinition.name, couchbaseContainer.username, couchbaseContainer.password)
64+
def weatherFactory = new IconTimeBasedWeatherValueFactory(new TimeUtil(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd'T'HH:mm:ssxxx"))
65+
source = new CouchbaseWeatherSource(connector, IconWeatherTestData.coordinateSource, weatherFactory)
66+
}
67+
68+
def "The test container can establish a valid connection"() {
69+
when:
70+
def connector = new CouchbaseConnector(couchbaseContainer.connectionString, bucketDefinition.name, couchbaseContainer.username, couchbaseContainer.password)
71+
72+
then:
73+
connector.connectionValid
74+
}
75+
76+
def "A CouchbaseWeatherSource can read and correctly parse a single value for a specific date and coordinate"() {
77+
given:
78+
def expectedTimeBasedValue = new TimeBasedValue(IconWeatherTestData.TIME_15H, IconWeatherTestData.WEATHER_VALUE_67775_15H)
79+
80+
when:
81+
def optTimeBasedValue = source.getWeather(IconWeatherTestData.TIME_15H, IconWeatherTestData.COORDINATE_67775)
82+
83+
then:
84+
optTimeBasedValue.present
85+
equalsIgnoreUUID(optTimeBasedValue.get(), expectedTimeBasedValue)
86+
}
87+
88+
def "A CouchbaseWeatherSource can read multiple time series values for multiple coordinates"() {
89+
given:
90+
def coordinates = [
91+
IconWeatherTestData.COORDINATE_67775,
92+
IconWeatherTestData.COORDINATE_67776
93+
]
94+
def timeInterval = new ClosedInterval(IconWeatherTestData.TIME_16H, IconWeatherTestData.TIME_17H)
95+
def timeSeries67775 = new IndividualTimeSeries(null,
96+
[
97+
new TimeBasedValue(IconWeatherTestData.TIME_16H, IconWeatherTestData.WEATHER_VALUE_67775_16H),
98+
new TimeBasedValue(IconWeatherTestData.TIME_17H, IconWeatherTestData.WEATHER_VALUE_67775_17H)]
99+
as Set<TimeBasedValue>)
100+
def timeSeries67776 = new IndividualTimeSeries(null,
101+
[
102+
new TimeBasedValue(IconWeatherTestData.TIME_16H, IconWeatherTestData.WEATHER_VALUE_67776_16H)] as Set<TimeBasedValue>)
103+
104+
when:
105+
def coordinateToTimeSeries = source.getWeather(timeInterval, coordinates)
106+
107+
then:
108+
coordinateToTimeSeries.keySet().size() == 2
109+
equalsIgnoreUUID(coordinateToTimeSeries.get(IconWeatherTestData.COORDINATE_67775), timeSeries67775)
110+
equalsIgnoreUUID(coordinateToTimeSeries.get(IconWeatherTestData.COORDINATE_67776), timeSeries67776)
111+
}
112+
113+
def "A CouchbaseWeatherSource can read all weather data in a given time interval"() {
114+
given:
115+
def timeInterval = new ClosedInterval(IconWeatherTestData.TIME_15H, IconWeatherTestData.TIME_17H)
116+
def timeSeries67775 = new IndividualTimeSeries(null,
117+
[
118+
new TimeBasedValue(IconWeatherTestData.TIME_15H, IconWeatherTestData.WEATHER_VALUE_67775_15H),
119+
new TimeBasedValue(IconWeatherTestData.TIME_16H, IconWeatherTestData.WEATHER_VALUE_67775_16H),
120+
new TimeBasedValue(IconWeatherTestData.TIME_17H, IconWeatherTestData.WEATHER_VALUE_67775_17H)] as Set<TimeBasedValue>)
121+
def timeSeries67776 = new IndividualTimeSeries(null,
122+
[
123+
new TimeBasedValue(IconWeatherTestData.TIME_15H, IconWeatherTestData.WEATHER_VALUE_67776_15H),
124+
new TimeBasedValue(IconWeatherTestData.TIME_16H, IconWeatherTestData.WEATHER_VALUE_67776_16H)] as Set<TimeBasedValue>)
125+
126+
when:
127+
def coordinateToTimeSeries = source.getWeather(timeInterval)
128+
129+
then:
130+
coordinateToTimeSeries.keySet().size() == 2
131+
equalsIgnoreUUID(coordinateToTimeSeries.get(IconWeatherTestData.COORDINATE_67775).entries, timeSeries67775.entries)
132+
equalsIgnoreUUID(coordinateToTimeSeries.get(IconWeatherTestData.COORDINATE_67776).entries, timeSeries67776.entries)
133+
}
134+
}

src/test/groovy/edu/ie3/test/common/WeatherTestData.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ abstract class WeatherTestData {
5555
return [
5656
GeoUtils.xyToPoint(49d, 7d),
5757
GeoUtils.xyToPoint(49d, 8d),
58-
GeoUtils.xyToPoint(50d, 7d)
58+
GeoUtils.xyToPoint(50d, 7d),
59+
GeoUtils.xyToPoint(50d, 8d),
60+
GeoUtils.xyToPoint(51d, 7d)
5961
]
6062
}
6163
}
Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,56 @@
1-
[{"coordinateid":193186,
2-
"time":"2020-04-28T15:00:00+00:00",
3-
"diffuseirradiance":286.872985839844,
4-
"directirradiance":282.671997070312,
5-
"temperature":278.019012451172,
6-
"winddirection":0,
7-
"windvelocity":1.66103506088257},
8-
9-
{"coordinateid":193187,
10-
"time":"2020-04-28T15:00:00+00:00",
11-
"diffuseirradiance":287.872985839844,
12-
"directirradiance":283.671997070312,
13-
"temperature":279.019012451172,
14-
"winddirection":0,
15-
"windvelocity":1.76103506088257},
16-
17-
{"coordinateid":193188,
18-
"time":"2020-04-28T15:00:00+00:00",
19-
"diffuseirradiance":288.872985839844,
20-
"directirradiance":284.671997070312,
21-
"temperature":280.019012451172,
22-
"winddirection":0,
23-
"windvelocity":1.86103506088257},
24-
25-
{"coordinateid":193186,
26-
"time":"2020-04-28T16:00:00+00:00",
27-
"diffuseirradiance":286.872,
28-
"directirradiance":282.672,
29-
"temperature":278.012,
30-
"winddirection":0,
31-
"windvelocity":1.662},
32-
33-
{"coordinateid":193187,
34-
"time":"2020-04-28T16:00:00+00:00",
35-
"diffuseirradiance":287.872,
36-
"directirradiance":283.672,
37-
"temperature":279.012,
38-
"winddirection":0,
39-
"windvelocity":1.762},
40-
41-
{"coordinateid":193186,
42-
"time":"2020-04-28T17:00:00+00:00",
43-
"diffuseirradiance":286.873,
44-
"directirradiance":282.673,
45-
"temperature":278.013,
46-
"winddirection":0,
47-
"windvelocity":1.663}]
1+
[
2+
{
3+
"coordinateid": 193186,
4+
"time": "2020-04-28T15:00:00+00:00",
5+
"diffuseirradiance": 286.872985839844,
6+
"directirradiance": 282.671997070312,
7+
"temperature": 278.019012451172,
8+
"winddirection": 0,
9+
"windvelocity": 1.66103506088257
10+
},
11+
{
12+
"coordinateid": 193187,
13+
"time": "2020-04-28T15:00:00+00:00",
14+
"diffuseirradiance": 287.872985839844,
15+
"directirradiance": 283.671997070312,
16+
"temperature": 279.019012451172,
17+
"winddirection": 0,
18+
"windvelocity": 1.76103506088257
19+
},
20+
{
21+
"coordinateid": 193188,
22+
"time": "2020-04-28T15:00:00+00:00",
23+
"diffuseirradiance": 288.872985839844,
24+
"directirradiance": 284.671997070312,
25+
"temperature": 280.019012451172,
26+
"winddirection": 0,
27+
"windvelocity": 1.86103506088257
28+
},
29+
{
30+
"coordinateid": 193186,
31+
"time": "2020-04-28T16:00:00+00:00",
32+
"diffuseirradiance": 286.872,
33+
"directirradiance": 282.672,
34+
"temperature": 278.012,
35+
"winddirection": 0,
36+
"windvelocity": 1.662
37+
},
38+
{
39+
"coordinateid": 193187,
40+
"time": "2020-04-28T16:00:00+00:00",
41+
"diffuseirradiance": 287.872,
42+
"directirradiance": 283.672,
43+
"temperature": 279.012,
44+
"winddirection": 0,
45+
"windvelocity": 1.762
46+
},
47+
{
48+
"coordinateid": 193186,
49+
"time": "2020-04-28T17:00:00+00:00",
50+
"diffuseirradiance": 286.873,
51+
"directirradiance": 282.673,
52+
"temperature": 278.013,
53+
"winddirection": 0,
54+
"windvelocity": 1.663
55+
}
56+
]

0 commit comments

Comments
 (0)