src/test/scala/org/embulk/input/dynamodb/AwsCredentialsTest.scala in embulk-input-dynamodb-0.2.0 vs src/test/scala/org/embulk/input/dynamodb/AwsCredentialsTest.scala in embulk-input-dynamodb-0.3.0
- old
+ new
@@ -1,135 +1,188 @@
package org.embulk.input.dynamodb
-import java.io.File
-import java.nio.charset.Charset
-import java.nio.file.{FileSystems, Files}
+import com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException
+import org.embulk.config.{ConfigException, ConfigSource}
+import org.embulk.input.dynamodb.aws.AwsCredentials
+import org.embulk.input.dynamodb.testutil.EmbulkTestBase
+import org.hamcrest.CoreMatchers._
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.{Assume, Test}
-import com.google.inject.{Binder, Module}
-import org.embulk.config.ConfigSource
-import org.embulk.exec.PartialExecutionException
-import org.embulk.plugin.InjectedPluginSource
-import org.embulk.spi.InputPlugin
-import org.embulk.{EmbulkEmbed, EmbulkTestRuntime}
-import org.junit.Assert.assertEquals
-import org.junit.{Before, Rule, Test}
+class AwsCredentialsTest extends EmbulkTestBase {
-class AwsCredentialsTest {
- private var EMBULK_DYNAMODB_TEST_REGION: String = null
- private var EMBULK_DYNAMODB_TEST_TABLE: String = null
- private var EMBULK_DYNAMODB_TEST_ACCESS_KEY: String = null
- private var EMBULK_DYNAMODB_TEST_SECRET_KEY: String = null
- private var EMBULK_DYNAMODB_TEST_PROFILE_NAME: String = null
+ private val runAwsCredentialsTest: Boolean = Option(
+ System.getenv("RUN_AWS_CREDENTIALS_TEST")
+ ) match {
+ case Some(x) =>
+ if (x == "false") false
+ else true
+ case None => true
+ }
- private var embulk: EmbulkEmbed = null
+ private lazy val EMBULK_DYNAMODB_TEST_ACCESS_KEY =
+ getEnvironmentVariableOrShowErrorMessage("EMBULK_DYNAMODB_TEST_ACCESS_KEY")
- @Rule
- def runtime: EmbulkTestRuntime = new EmbulkTestRuntime
+ private lazy val EMBULK_DYNAMODB_TEST_SECRET_KEY =
+ getEnvironmentVariableOrShowErrorMessage("EMBULK_DYNAMODB_TEST_SECRET_KEY")
- @Before
- def createResources() {
- // Get Environments
- EMBULK_DYNAMODB_TEST_REGION = System.getenv("EMBULK_DYNAMODB_TEST_REGION")
- EMBULK_DYNAMODB_TEST_TABLE = System.getenv("EMBULK_DYNAMODB_TEST_TABLE")
- EMBULK_DYNAMODB_TEST_ACCESS_KEY = System.getenv("EMBULK_DYNAMODB_TEST_ACCESS_KEY")
- EMBULK_DYNAMODB_TEST_SECRET_KEY = System.getenv("EMBULK_DYNAMODB_TEST_SECRET_KEY")
- EMBULK_DYNAMODB_TEST_PROFILE_NAME = System.getenv("EMBULK_DYNAMODB_TEST_PROFILE_NAME")
+ private lazy val EMBULK_DYNAMODB_TEST_PROFILE_NAME =
+ getEnvironmentVariableOrShowErrorMessage(
+ "EMBULK_DYNAMODB_TEST_PROFILE_NAME"
+ )
- val bootstrap = new EmbulkEmbed.Bootstrap()
- bootstrap.addModules(new Module {
- def configure(binder: Binder): Unit = {
- InjectedPluginSource.registerPluginTo(binder,
- classOf[InputPlugin],
- "dynamodb",
- classOf[DynamodbInputPlugin])
- }
- })
+ private lazy val EMBULK_DYNAMODB_TEST_ASSUME_ROLE_ROLE_ARN =
+ getEnvironmentVariableOrShowErrorMessage(
+ "EMBULK_DYNAMODB_TEST_ASSUME_ROLE_ROLE_ARN"
+ )
- embulk = bootstrap.initializeCloseable()
+ def doTest(inConfig: ConfigSource): Unit = {
+ val task: PluginTask = inConfig.loadConfig(classOf[PluginTask])
+ val provider = AwsCredentials(task).createAwsCredentialsProvider
+ val cred = provider.getCredentials
+ assertThat(cred.getAWSAccessKeyId, notNullValue())
+ assertThat(cred.getAWSSecretKey, notNullValue())
}
- def doTest(config: ConfigSource) {
- embulk.run(config)
+ def defaultInConfig: ConfigSource = {
+ embulk.configLoader().fromYamlString(s"""
+ |type: dynamodb
+ |region: us-east-1
+ |table: hoge
+ |operation: scan
+ |columns:
+ | - {name: key1, type: string}
+ | - {name: key2, type: long}
+ | - {name: value1, type: string}
+ |""".stripMargin)
+ }
- val fs = FileSystems.getDefault
- val lines = Files.readAllLines(fs.getPath("result000.00.tsv"), Charset.forName("UTF-8"))
- assertEquals("KEY-1\t1\tHogeHoge", lines.get(0))
+ @deprecated(since = "0.3.0")
+ @Test
+ def notSetAuthMethod_SetCredentials_deprecated(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("access_key", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
+ .set("secret_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
+
+ doTest(inConfig)
}
@Test
- def notSetAuthMethod_SetCredentials() {
- val config = embulk.newConfigLoader().fromYamlFile(
- new File("src/test/resources/yaml/notSetAuthMethod.yml"))
+ def notSetAuthMethod_SetCredentials(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("access_key_id", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
+ .set("secret_access_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
- config.getNested("in")
- .set("region", EMBULK_DYNAMODB_TEST_REGION)
- .set("table", EMBULK_DYNAMODB_TEST_TABLE)
+ doTest(inConfig)
+ }
+
+ @deprecated(since = "0.3.0")
+ @Test
+ def setAuthMethod_Basic_deprecated(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "basic")
.set("access_key", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
.set("secret_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
- doTest(config)
+ doTest(inConfig)
}
@Test
- def setAuthMethod_Basic() {
- val config = embulk.newConfigLoader().fromYamlFile(
- new File("src/test/resources/yaml/authMethodBasic.yml"))
+ def setAuthMethod_Basic(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "basic")
+ .set("access_key_id", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
+ .set("secret_access_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
- config.getNested("in")
- .set("region", EMBULK_DYNAMODB_TEST_REGION)
- .set("table", EMBULK_DYNAMODB_TEST_TABLE)
+ doTest(inConfig)
+ }
+
+ @deprecated(since = "0.3.0")
+ @Test(expected = classOf[ConfigException])
+ def throwIfSetAccessKeyAndAccessKeyId(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "basic")
.set("access_key", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
+ .set("access_key_id", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
.set("secret_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
- doTest(config)
+ doTest(inConfig)
}
- @Test(expected = classOf[PartialExecutionException])
- def setAuthMethod_Basic_NotSet() {
- val config = embulk.newConfigLoader().fromYamlFile(
- new File("src/test/resources/yaml/authMethodBasic_Error.yml"))
+ @deprecated(since = "0.3.0")
+ @Test(expected = classOf[ConfigException])
+ def throwIfSetSecretKeyAndSecretAccessKeyId(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "basic")
+ .set("access_key", EMBULK_DYNAMODB_TEST_ACCESS_KEY)
+ .set("secret_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
+ .set("secret_access_key", EMBULK_DYNAMODB_TEST_SECRET_KEY)
- config.getNested("in")
- .set("region", EMBULK_DYNAMODB_TEST_REGION)
- .set("table", EMBULK_DYNAMODB_TEST_TABLE)
+ doTest(inConfig)
+ }
- doTest(config)
+ @Test(expected = classOf[ConfigException])
+ def setAuthMethod_Basic_NotSet(): Unit = {
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "basic")
+
+ doTest(inConfig)
}
@Test
- def setAuthMethod_Env() {
- val config = embulk.newConfigLoader().fromYamlFile(
- new File("src/test/resources/yaml/authMethodEnv.yml"))
+ def setAuthMethod_Env(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ // NOTE: Requires to set the env vars like 'AWS_ACCESS_KEY_ID' and so on when testing.
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "env")
- config.getNested("in")
- .set("region", EMBULK_DYNAMODB_TEST_REGION)
- .set("table", EMBULK_DYNAMODB_TEST_TABLE)
-
- doTest(config)
+ doTest(inConfig)
}
@Test
- def setAuthMethod_Profile() {
- val config = embulk.newConfigLoader().fromYamlFile(
- new File("src/test/resources/yaml/authMethodProfile.yml"))
-
- config.getNested("in")
- .set("region", EMBULK_DYNAMODB_TEST_REGION)
- .set("table", EMBULK_DYNAMODB_TEST_TABLE)
+ def setAuthMethod_Profile(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ // NOTE: Requires to set credentials to '~/.aws' when testing.
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "profile")
.set("profile_name", EMBULK_DYNAMODB_TEST_PROFILE_NAME)
- doTest(config)
+ doTest(inConfig)
}
- @Test(expected = classOf[PartialExecutionException])
- def setAuthMethod_Profile_NotExistProfileName() {
- val config = embulk.newConfigLoader().fromYamlFile(
- new File("src/test/resources/yaml/authMethodProfile.yml"))
+ @Test(expected = classOf[IllegalArgumentException])
+ def setAuthMethod_Profile_NotExistProfileName(): Unit = {
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "profile")
+ .set("profile_name", "DO_NOT_EXIST")
- config.getNested("in")
- .set("region", EMBULK_DYNAMODB_TEST_REGION)
- .set("table", EMBULK_DYNAMODB_TEST_TABLE)
- .set("profile_name", "NotExistName")
+ doTest(inConfig)
+ }
- doTest(config)
+ @Test
+ def setAuthMethod_assume_role(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "assume_role")
+ .set("role_arn", EMBULK_DYNAMODB_TEST_ASSUME_ROLE_ROLE_ARN)
+ .set("role_session_name", "dummy")
+
+ doTest(inConfig)
+ }
+
+ @Test(expected = classOf[AWSSecurityTokenServiceException])
+ def setAuthMethod_assume_role_NotExistRoleArn(): Unit = {
+ Assume.assumeTrue(runAwsCredentialsTest)
+ val inConfig: ConfigSource = defaultInConfig
+ .set("auth_method", "assume_role")
+ .set("role_arn", "DO_NOT_EXIST")
+ .set("role_session_name", "dummy")
+
+ doTest(inConfig)
}
}