Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛Destination-mysql: fixed integration test and build process #13302

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
37ec4d8
[13180] destination-mysql-strict-encrypt: fixed integration test
etsybaev May 28, 2022
81cf2b2
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev May 30, 2022
94fff01
Bumped destination mysql versions
etsybaev May 30, 2022
cfce99a
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev May 30, 2022
50450af
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev May 30, 2022
2d2944d
Bumped destination oracle versions
etsybaev May 30, 2022
25cf75e
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev May 31, 2022
25453fa
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev May 31, 2022
1c3d06d
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev May 31, 2022
af1adfb
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev Jun 1, 2022
ab9756e
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev Jun 1, 2022
ddb4a22
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev Jun 2, 2022
accb7e8
[13180] updated testcontainers version
etsybaev Jun 2, 2022
25bcf97
[13180] updated testcontainers version
etsybaev Jun 2, 2022
93d8f6f
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev Jun 10, 2022
4dce816
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev Jun 21, 2022
73363df
Merge branch 'master' into etsybaev/13180-destination-mysql-fix-integ…
etsybaev Jun 22, 2022
4ef9873
reverted verions
etsybaev Jun 22, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@
import io.airbyte.commons.json.Jsons;
import io.airbyte.db.Database;
import io.airbyte.db.factory.DSLContextFactory;
import io.airbyte.db.jdbc.JdbcUtils;
import io.airbyte.db.factory.DatabaseDriver;
import io.airbyte.integrations.base.JavaBaseConstants;
import io.airbyte.integrations.destination.ExtendedNameTransformer;
import io.airbyte.integrations.standardtest.destination.DestinationAcceptanceTest;
import io.airbyte.integrations.standardtest.destination.JdbcDestinationAcceptanceTest;
import io.airbyte.integrations.standardtest.destination.comparator.TestDataComparator;
import io.airbyte.protocol.models.AirbyteCatalog;
import io.airbyte.protocol.models.AirbyteMessage;
import io.airbyte.protocol.models.AirbyteMessage.Type;
Expand All @@ -25,15 +26,14 @@
import io.airbyte.protocol.models.ConfiguredAirbyteCatalog;
import java.sql.SQLException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.MySQLContainer;

public class MySQLStrictEncryptDestinationAcceptanceTest extends DestinationAcceptanceTest {
public class MySQLStrictEncryptDestinationAcceptanceTest extends JdbcDestinationAcceptanceTest {

private MySQLContainer<?> db;
private final ExtendedNameTransformer namingResolver = new MySQLNameTransformer();
Expand All @@ -58,6 +58,26 @@ protected boolean supportsNormalization() {
return true;
}

@Override
protected TestDataComparator getTestDataComparator() {
return new MySqlTestDataComparator();
}

@Override
protected boolean supportBasicDataTypeTest() {
return true;
}

@Override
protected boolean supportArrayDataTypeTest() {
return true;
}

@Override
protected boolean supportObjectDataTypeTest() {
return true;
}

@Override
protected JsonNode getConfig() {
return Jsons.jsonNode(ImmutableMap.builder()
Expand Down Expand Up @@ -96,28 +116,28 @@ protected List<JsonNode> retrieveRecords(final TestDestinationEnv testEnv,
throws Exception {
return retrieveRecordsFromTable(namingResolver.getRawTableName(streamName), namespace)
.stream()
.map(r -> Jsons.deserialize(r.get(JavaBaseConstants.COLUMN_NAME_DATA).asText()))
.map(r -> r.get(JavaBaseConstants.COLUMN_NAME_DATA))
.collect(Collectors.toList());
}

private List<JsonNode> retrieveRecordsFromTable(final String tableName, final String schemaName) throws SQLException {
final DSLContext dslContext = DSLContextFactory.create(
try (final DSLContext dslContext = DSLContextFactory.create(
db.getUsername(),
db.getPassword(),
db.getDriverClassName(),
String.format("jdbc:mysql://%s:%s/%s?useSSL=true&requireSSL=true&verifyServerCertificate=false",
String.format(DatabaseDriver.MYSQL.getUrlFormatString(),
db.getHost(),
db.getFirstMappedPort(),
db.getDatabaseName()),
SQLDialect.MYSQL);
return new Database(dslContext).query(
ctx -> ctx
.fetch(String.format("SELECT * FROM %s.%s ORDER BY %s ASC;", schemaName, tableName,
JavaBaseConstants.COLUMN_NAME_EMITTED_AT))
.stream()
.map(r -> r.formatJSON(JdbcUtils.getDefaultJSONFormat()))
.map(Jsons::deserialize)
.collect(Collectors.toList()));
SQLDialect.MYSQL)) {
return new Database(dslContext).query(
ctx -> ctx
.fetch(String.format("SELECT * FROM %s.%s ORDER BY %s ASC;", schemaName, tableName,
JavaBaseConstants.COLUMN_NAME_EMITTED_AT))
.stream()
.map(this::getJsonFromRecord)
.collect(Collectors.toList()));
}
}

@Override
Expand All @@ -128,18 +148,6 @@ protected List<JsonNode> retrieveNormalizedRecords(final TestDestinationEnv test
return retrieveRecordsFromTable(tableName, schema);
}

@Override
protected List<String> resolveIdentifier(final String identifier) {
final List<String> result = new ArrayList<>();
final String resolved = namingResolver.getIdentifier(identifier);
result.add(identifier);
result.add(resolved);
if (!resolved.startsWith("\"")) {
result.add(resolved.toLowerCase());
}
return result;
}

@Override
protected void setup(final TestDestinationEnv testEnv) {
db = new MySQLContainer<>("mysql:8.0");
Expand All @@ -163,10 +171,10 @@ private void grantCorrectPermissions() {

private void executeQuery(final String query) {
try (final DSLContext dslContext = DSLContextFactory.create(
db.getUsername(),
db.getPassword(),
"root",
"test",
db.getDriverClassName(),
String.format("jdbc:mysql://%s:%s/%s?useSSL=true&requireSSL=true&verifyServerCertificate=false",
String.format(DatabaseDriver.MYSQL.getUrlFormatString(),
db.getHost(),
db.getFirstMappedPort(),
db.getDatabaseName()),
Expand All @@ -187,9 +195,10 @@ protected void tearDown(final TestDestinationEnv testEnv) {

@Override
@Test
public void testCustomDbtTransformations() {
public void testCustomDbtTransformations() throws Exception {
// We need to create view for testing custom dbt transformations
executeQuery("GRANT CREATE VIEW ON *.* TO " + db.getUsername() + "@'%';");
super.testCustomDbtTransformations();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2021 Airbyte, Inc., all rights reserved.
*/

package io.airbyte.integrations.destination.mysql;

import io.airbyte.integrations.destination.ExtendedNameTransformer;
import io.airbyte.integrations.standardtest.destination.comparator.AdvancedTestDataComparator;
import java.util.ArrayList;
import java.util.List;

public class MySqlTestDataComparator extends AdvancedTestDataComparator {

private final ExtendedNameTransformer namingResolver = new MySQLNameTransformer();

@Override
protected List<String> resolveIdentifier(final String identifier) {
final List<String> result = new ArrayList<>();
final String resolved = namingResolver.getIdentifier(identifier);
result.add(identifier);
result.add(resolved);
if (!resolved.startsWith("\"")) {
result.add(resolved.toLowerCase());
}
return result;
}

@Override
protected boolean compareBooleanValues(String firstBooleanValue, String secondBooleanValue) {
if (secondBooleanValue.equalsIgnoreCase("true") || secondBooleanValue.equalsIgnoreCase("false")) {
return super.compareBooleanValues(firstBooleanValue, secondBooleanValue);
} else {
return super.compareBooleanValues(firstBooleanValue, String.valueOf(secondBooleanValue.equals("1")));
}
}

}