From ea46f28f65af3673b525335e67ed709cae935fd1 Mon Sep 17 00:00:00 2001 From: Christopher Grote Date: Fri, 3 Jan 2025 11:37:30 +0000 Subject: [PATCH] Fixes attempts to send empty payloads when no tag is found Signed-off-by: Christopher Grote --- .../com/atlan/pkg/aim/InvalidTagTest.kt | 87 +++++++++++++++++++ .../src/test/resources/invalid_tag.csv | 2 + .../com/atlan/model/core/AtlanObject.java | 4 +- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InvalidTagTest.kt create mode 100644 samples/packages/asset-import/src/test/resources/invalid_tag.csv diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InvalidTagTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InvalidTagTest.kt new file mode 100644 index 0000000000..91f6a40296 --- /dev/null +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InvalidTagTest.kt @@ -0,0 +1,87 @@ +/* SPDX-License-Identifier: Apache-2.0 + Copyright 2023 Atlan Pte. Ltd. */ +package com.atlan.pkg.aim + +import AssetImportCfg +import com.atlan.model.assets.Connection +import com.atlan.model.assets.Table +import com.atlan.model.enums.AtlanConnectorType +import com.atlan.pkg.PackageTest +import com.atlan.pkg.Utils +import java.nio.file.Paths +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +/** + * Test import of an invalid tag value. + */ +class InvalidTagTest : PackageTest("it") { + override val logger = Utils.getLogger(this.javaClass.name) + + private val table = makeUnique("t1") + + private val testFile = "invalid_tag.csv" + + private val files = + listOf( + testFile, + "debug.log", + ) + + private fun prepFile(connectionQN: String) { + // Prepare a copy of the file with unique names for glossaries and tags + val input = Paths.get("src", "test", "resources", testFile).toFile() + val output = Paths.get(testDirectory, testFile).toFile() + input.useLines { lines -> + lines.forEach { line -> + val revised = + line + .replace("{{CONNECTION}}", connectionQN) + .replace("{{TABLE}}", table) + output.appendText("$revised\n") + } + } + } + + override fun setup() { + val snowflakeConnection = Connection.findByName(client, "development", AtlanConnectorType.SNOWFLAKE)?.get(0)!! + prepFile(snowflakeConnection.qualifiedName) + } + + override fun teardown() { + val snowflakeConnection = Connection.findByName(client, "development", AtlanConnectorType.SNOWFLAKE)?.get(0)!! + Table.select(client) + .where(Table.CONNECTION_QUALIFIED_NAME.eq(snowflakeConnection.qualifiedName)) + .where(Table.NAME.eq(table)) + .stream() + .findFirst() + .ifPresent { + Table.purge(client, it.guid) + } + } + + @Test + fun failsWithMeaningfulError() { + val exception = + assertFailsWith { + runCustomPackage( + AssetImportCfg( + assetsFile = Paths.get(testDirectory, testFile).toString(), + assetsUpsertSemantic = "upsert", + assetsFailOnErrors = true, + ), + Importer::main, + ) + } + assertEquals( + "Unable to serialize: com.atlan.api.AssetEndpoint\$BulkEntityRequest -- Unexpected IOException (of type java.io.IOException): Unable to find Atlan tag with name: NON_EXISTENT_TAG", + exception.message, + ) + } + + @Test + fun filesCreated() { + validateFilesExist(files) + } +} diff --git a/samples/packages/asset-import/src/test/resources/invalid_tag.csv b/samples/packages/asset-import/src/test/resources/invalid_tag.csv new file mode 100644 index 0000000000..b7dc7bbad1 --- /dev/null +++ b/samples/packages/asset-import/src/test/resources/invalid_tag.csv @@ -0,0 +1,2 @@ +qualifiedName,typeName,name,displayName,description,userDescription,ownerUsers,ownerGroups,certificateStatus,certificateStatusMessage,announcementType,announcementTitle,announcementMessage,assignedTerms,atlanTags,links,readme,starredDetails,connectorType,connectionQualifiedName,databaseQualifiedName,databaseName,schemaQualifiedName,schemaName +{{CONNECTION}}/ANALYTICS/WIDE_WORLD_IMPORTERS/{{TABLE}},Table,{{TABLE}},,,,,,VERIFIED,,,,,,NON_EXISTENT_TAG,,,,snowflake,{{CONNECTION}},{{CONNECTION}}/ANALYTICS,ANALYTICS,{{CONNECTION}}/ANALYTICS/WIDE_WORLD_IMPORTERS,WIDE_WORLD_IMPORTERS diff --git a/sdk/src/main/java/com/atlan/model/core/AtlanObject.java b/sdk/src/main/java/com/atlan/model/core/AtlanObject.java index 63fb02f28f..214c4ed73d 100644 --- a/sdk/src/main/java/com/atlan/model/core/AtlanObject.java +++ b/sdk/src/main/java/com/atlan/model/core/AtlanObject.java @@ -40,9 +40,9 @@ public String toJson(AtlanClient client) { try { return client.writeValueAsString(this); } catch (IOException e) { - log.error("Unable to serialize this object: {}", this.getClass().getName(), e); + throw new IllegalStateException( + "Unable to serialize: " + this.getClass().getName() + " -- " + e.getMessage(), e); } - return null; } /**