Skip to content

Commit d5e6e7e

Browse files
committed
CVV_COLUMNS table integration test
1. Added JdbcUtils and methods 2. Added svv_columns.sql for retrieving table's data 3. Added SvvColumnsTest test 4. Added SvvColumnsRow POJO object 5. Added CsvUtil and methods 6. Added Gradle reporting plugin
1 parent d9b385a commit d5e6e7e

File tree

11 files changed

+477
-184
lines changed

11 files changed

+477
-184
lines changed

dumper-integration-tests/redshift-tests/build.gradle

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@ buildscript {
22
repositories {
33
mavenCentral()
44
}
5-
dependencies {
6-
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
7-
}
85
}
96

107
plugins {
118
id 'java'
12-
id "com.google.protobuf" version "0.8.18"
9+
id 'com.adarshr.test-logger' version '3.2.0'
1310
}
1411

1512
sourceCompatibility = 1.8
@@ -22,28 +19,23 @@ repositories {
2219
}
2320

2421
dependencies {
25-
implementation 'org.codehaus.groovy:groovy-all:3.0.5'
22+
implementation 'org.codehaus.groovy:groovy-all:3.0.10'
23+
implementation 'com.google.guava:guava:31.1-jre'
2624
implementation 'org.testng:testng:7.5'
2725
implementation 'org.slf4j:slf4j-api:2.0.0-alpha5'
2826
implementation 'org.slf4j:slf4j-jdk14:2.0.0-alpha5'
29-
implementation 'com.amazon.redshift:redshift-jdbc42:2.1.0.6'
27+
implementation 'com.amazon.redshift:redshift-jdbc42:2.1.0.7'
3028
implementation 'commons-io:commons-io:2.11.0'
31-
implementation 'org.apache.commons:commons-collections4:4.4'
32-
implementation 'com.google.guava:guava:31.0.1-jre'
3329
implementation 'com.opencsv:opencsv:5.6'
34-
implementation 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
35-
implementation 'com.google.protobuf:protobuf-java:3.20.1'
30+
annotationProcessor 'com.google.auto.value:auto-value:1.9'
31+
compileOnly 'com.google.auto.value:auto-value-annotations:1.9'
3632
}
3733

3834
test {
35+
ignoreFailures = true
36+
3937
useTestNG {
4038
preserveOrder true
4139
systemProperty 'java.util.logging.config.file', 'src/main/resources/logging.properties'
4240
}
43-
}
44-
45-
protobuf {
46-
protoc {
47-
artifact = 'com.google.protobuf:protoc:3.20.1'
48-
}
4941
}

dumper-integration-tests/redshift-tests/src/main/java/com/google/base/TestBase.java

Lines changed: 0 additions & 59 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright 2022 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.edwmigration.dumper.base;
17+
18+
import static java.lang.String.format;
19+
import static java.lang.System.lineSeparator;
20+
21+
import com.google.common.base.Joiner;
22+
import com.google.common.collect.LinkedHashMultiset;
23+
import com.opencsv.CSVParser;
24+
import com.opencsv.CSVParserBuilder;
25+
import org.junit.Assert;
26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
28+
29+
/** Base class with general values for all TestNG test suites */
30+
public abstract class TestBase {
31+
32+
public static final CSVParser CSV_PARSER = new CSVParserBuilder().withEscapeChar('\0').build();
33+
private static final Logger LOGGER = LoggerFactory.getLogger(TestBase.class);
34+
35+
/**
36+
* @param dbMultiset List of extracted from DB items
37+
* @param csvMultiset List of uploaded from Avro items
38+
*/
39+
public static void assertMultisetsEqual(
40+
LinkedHashMultiset<?> dbMultiset, LinkedHashMultiset<?> csvMultiset) {
41+
LinkedHashMultiset<?> dbMultisetCopy = LinkedHashMultiset.create(dbMultiset);
42+
csvMultiset.forEach(dbMultiset::remove);
43+
dbMultisetCopy.forEach(csvMultiset::remove);
44+
45+
String dbListForLogs = lineSeparator() + Joiner.on("").join(dbMultiset);
46+
String csvListForLogs = lineSeparator() + Joiner.on("").join(csvMultiset);
47+
48+
if (dbMultiset.isEmpty() && csvMultiset.isEmpty()) {
49+
LOGGER.info("DB view and CSV file are equal");
50+
} else if (!dbMultiset.isEmpty() && !csvMultiset.isEmpty()) {
51+
Assert.fail(
52+
format(
53+
"DB view and CSV file have mutually exclusive row(s)%n"
54+
+ "DB view has %d different row(s): %s%n"
55+
+ "CSV file has %d different row(s): %s",
56+
dbMultiset.size(), dbListForLogs, csvMultiset.size(), csvListForLogs));
57+
} else if (!dbMultiset.isEmpty()) {
58+
Assert.fail(format("DB view has %d extra row(s):%n%s", dbMultiset.size(), dbListForLogs));
59+
} else if (!csvMultiset.isEmpty()) {
60+
Assert.fail(format("CSV file has %d extra row(s):%n%s", csvMultiset.size(), csvListForLogs));
61+
}
62+
}
63+
}

dumper-integration-tests/redshift-tests/src/main/java/com/google/base/TestConstants.java renamed to dumper-integration-tests/redshift-tests/src/main/java/com/google/edwmigration/dumper/base/TestConstants.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/*
22
* Copyright 2022 Google LLC
3-
* Copyright 2013-2021 CompilerWorks
43
*
54
* Licensed under the Apache License, Version 2.0 (the "License");
65
* you may not use this file except in compliance with the License.
@@ -14,24 +13,20 @@
1413
* See the License for the specific language governing permissions and
1514
* limitations under the License.
1615
*/
17-
package com.google.base;
16+
package com.google.edwmigration.dumper.base;
1817

1918
import static java.lang.System.getenv;
2019

21-
import java.util.regex.Pattern;
22-
23-
/**
24-
* Stores constants common among all tests.
25-
*/
20+
/** Stores constants common among all tests. */
2621
public final class TestConstants {
2722

2823
public static final String URL_DB = getenv("DB_URL");
2924
public static final String USERNAME_DB = getenv("USERNAME");
3025
public static final String PASSWORD_DB = getenv("PASSWORD");
3126

32-
public static final String ET_OUTPUT_PATH = getenv("EXPORT_PATH");
33-
public static final Pattern TRAILING_SPACES_REGEX = Pattern.compile("\\s+$");
27+
public static final String EXPORTED_FILES_BASE_PATH = getenv("EXPORT_PATH");
28+
29+
public static final String SQL_REQUESTS_BASE_PATH = "sql/";
3430

35-
private TestConstants() {
36-
}
31+
private TestConstants() {}
3732
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright 2022 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.edwmigration.dumper.csv;
17+
18+
import static java.lang.Integer.parseInt;
19+
20+
/** A helper class for reading and extracting data from CSV files. */
21+
public final class CsvUtil {
22+
23+
private CsvUtil() {}
24+
25+
/**
26+
* @return String or an empty string if null.
27+
*/
28+
public static String getStringNotNull(String value) {
29+
return value == null ? "" : value;
30+
}
31+
32+
/**
33+
* @return int or 0 if "".
34+
*/
35+
public static int getIntNotNull(String value) {
36+
return getStringNotNull(value).equals("") ? 0 : parseInt(value);
37+
}
38+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2022 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.edwmigration.dumper.jdbc;
17+
18+
import java.sql.ResultSet;
19+
import java.sql.SQLException;
20+
21+
/**
22+
* A helper class for checking Null values returned by executing SELECT request against a database.
23+
*/
24+
public final class JdbcUtil {
25+
26+
private JdbcUtil() {}
27+
28+
/**
29+
* @param rs A row with SELECT results.
30+
* @param column Database column name.
31+
* @return String or an empty string if null.
32+
*/
33+
public static String getStringNotNull(ResultSet rs, String column) throws SQLException {
34+
String string = rs.getString(column);
35+
return rs.wasNull() ? "" : string;
36+
}
37+
}

0 commit comments

Comments
 (0)