AWS SNS 를 사용하기 위한 객체를 생성합니다.
+ * Spring profile 구분 별로 다른 자격 증명 방식을 사용하고 있습니다. + * 기본 자격 증명 방식 과 IAM ROLE 자격증명 방식을 사용합니다. + * + * @see + * Setting Credentials + */ +public interface AwsSnsClientFactory { + + /** + * SNS 서비스 클라이언트 AmazonSNS 리턴합니다. + */ + AmazonSNS createSnsClient(); + +} diff --git a/adapters/notification/adapter-aws-sns/src/main/resources/application.yml b/adapters/notification/adapter-aws-sns/src/main/resources/application.yml index a10c9aa..84b1220 100644 --- a/adapters/notification/adapter-aws-sns/src/main/resources/application.yml +++ b/adapters/notification/adapter-aws-sns/src/main/resources/application.yml @@ -4,11 +4,8 @@ spring: caregiver: aws: - #service-endpoint: - signing-region: ap-northeast-2 + signing-region: ap-northeast-1 access-key: ${caregiver.aws.secret-key} secret-key: ${caregiver.aws.access-key} sns: arn: ${caregiver.aws.sns.arn} - - diff --git a/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/AdapterSnsApplicationTest.java b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/AdapterSnsApplicationTest.java new file mode 100644 index 0000000..2a5472b --- /dev/null +++ b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/AdapterSnsApplicationTest.java @@ -0,0 +1,10 @@ +package com.caregiver; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * SNS Application Junit Test를 실행하기 위한 클래스. + */ +@SpringBootApplication +public class AdapterSnsApplicationTest { +} diff --git a/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/common/BaseConfiguration.java b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/common/BaseConfiguration.java new file mode 100644 index 0000000..560aa24 --- /dev/null +++ b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/common/BaseConfiguration.java @@ -0,0 +1,20 @@ +package com.caregiver.common; + +import com.caregiver.config.AwsDefaultCredential; +import com.caregiver.config.AwsProperties; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +/** + * 테스트를 클래스에서 공통으로 필요로하는 정보를 관리하는 클래스. + */ +@ActiveProfiles("test") +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = {AwsProperties.class, AwsDefaultCredential.class}, + initializers = ConfigFileApplicationContextInitializer.class) +public class BaseConfiguration { + +} diff --git a/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/config/AwsPropertiesTest.java b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/config/AwsPropertiesTest.java new file mode 100644 index 0000000..fe434ae --- /dev/null +++ b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/config/AwsPropertiesTest.java @@ -0,0 +1,29 @@ +package com.caregiver.config; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.amazonaws.regions.Regions; +import com.caregiver.common.BaseConfiguration; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +@SuppressWarnings("NonAsciiCharacters") +class AwsPropertiesTest extends BaseConfiguration { + + @Autowired + AwsProperties awsProperties; + + @Test + @DisplayName("Aws 설정정보를 확인하라") + public void Aws_설정정보를_확인하라() { + + assertThat(awsProperties.getSigningRegion()).isEqualTo(Regions.AP_NORTHEAST_1.getName()); + assertThat(awsProperties.getArn()).isNotBlank(); + assertThat(awsProperties.getAccessKey()).isNotBlank(); + assertThat(awsProperties.getSecretKey()).isNotBlank(); + + } + + +} diff --git a/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/sms/SendSmsMessageTest.java b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/sms/SendSmsMessageTest.java new file mode 100644 index 0000000..15612a3 --- /dev/null +++ b/adapters/notification/adapter-aws-sns/src/test/java/com/caregiver/sms/SendSmsMessageTest.java @@ -0,0 +1,53 @@ +package com.caregiver.sms; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.amazonaws.services.sns.AmazonSNS; +import com.amazonaws.services.sns.model.MessageAttributeValue; +import com.amazonaws.services.sns.model.PublishRequest; +import com.amazonaws.services.sns.model.PublishResult; +import com.caregiver.common.BaseConfiguration; +import com.caregiver.config.AwsDefaultCredential; +import java.util.Map; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 문자메세지 발송 테스트. + */ +@SuppressWarnings({"NonAsciiCharacters", "CheckStyle"}) +public class SendSmsMessageTest extends BaseConfiguration { + + @Autowired + AwsDefaultCredential awsDefaultCredential; + + /** + * 테스트가 실행될 경우 SMS 문자 메세지를 발송합니다. + * 과금이 발생 요소가 있기에 Disabled 처리합니다. + * TODO 테스트 코드 목킹 그리고 리팩토링 + */ + @Test + @Disabled + @DisplayName("aws Sms 메일 발송을 테스트하라") + public void aws_sms_메일_발송을_테스트하라() { + + final var amazonSns = awsDefaultCredential.createSnsClient(); + + final var publishResult = sendSmsMessage(amazonSns, "안녕하세요 이지훈입니다. 문자메세지 테스트", + "+8201093793259", awsDefaultCredential.messageAttributeValue()); + + assertThat(publishResult.getMessageId()).isNotBlank(); + } + + private PublishResult sendSmsMessage(AmazonSNS amazonSns, String message, String phoneNumber, + Map