diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/BasicAuthInterceptorTest.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/BasicAuthInterceptorTest.java similarity index 84% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/BasicAuthInterceptorTest.java rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/BasicAuthInterceptorTest.java index 68d05b47aa..b88d887e42 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/BasicAuthInterceptorTest.java +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/BasicAuthInterceptorTest.java @@ -8,17 +8,16 @@ * */ -package org.opensearch.dataprepper.plugins.source.confluence.rest; +package org.opensearch.dataprepper.plugins.source.atlassian.rest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.opensearch.dataprepper.plugins.source.confluence.ConfluenceSourceConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.AuthenticationConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.BasicConfig; -import org.opensearch.dataprepper.plugins.source.confluence.rest.BasicAuthInterceptor; +import org.opensearch.dataprepper.plugins.source.atlassian.AtlassianSourceConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.AuthenticationConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.BasicConfig; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; @@ -48,7 +47,7 @@ public class BasicAuthInterceptorTest { @Mock private ClientHttpResponse mockResponse; @Mock - private ConfluenceSourceConfig mockConfig; + private AtlassianSourceConfig mockConfig; @Mock private HttpHeaders mockHeaders; diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/OAuth2RequestInterceptorTest.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/OAuth2RequestInterceptorTest.java similarity index 90% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/OAuth2RequestInterceptorTest.java rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/OAuth2RequestInterceptorTest.java index 554b97e674..b1b6f51b3f 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/OAuth2RequestInterceptorTest.java +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/OAuth2RequestInterceptorTest.java @@ -8,14 +8,14 @@ * */ -package org.opensearch.dataprepper.plugins.source.confluence.rest; +package org.opensearch.dataprepper.plugins.source.atlassian.rest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.opensearch.dataprepper.plugins.source.confluence.rest.auth.ConfluenceOauthConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.rest.auth.AtlassianOauthConfig; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; @@ -41,7 +41,7 @@ public class OAuth2RequestInterceptorTest { private ClientHttpResponse mockResponse; @Mock - private ConfluenceOauthConfig mockConfig; + private AtlassianOauthConfig mockConfig; @Mock private HttpHeaders mockHeaders; diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/ConfluenceAuthFactoryTest.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianAuthFactoryTest.java similarity index 65% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/ConfluenceAuthFactoryTest.java rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianAuthFactoryTest.java index 60fdbdcfd1..7dc618f744 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/ConfluenceAuthFactoryTest.java +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianAuthFactoryTest.java @@ -8,7 +8,7 @@ * */ -package org.opensearch.dataprepper.plugins.source.confluence.rest.auth; +package org.opensearch.dataprepper.plugins.source.atlassian.rest.auth; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -16,20 +16,20 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; -import org.opensearch.dataprepper.plugins.source.confluence.ConfluenceSourceConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.AuthenticationConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.Oauth2Config; +import org.opensearch.dataprepper.plugins.source.atlassian.AtlassianSourceConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.AuthenticationConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.mockito.Mockito.when; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.OAUTH2; +import static org.opensearch.dataprepper.plugins.source.atlassian.utils.Constants.OAUTH2; @ExtendWith(MockitoExtension.class) -public class ConfluenceAuthFactoryTest { +public class AtlassianAuthFactoryTest { @Mock - private ConfluenceSourceConfig sourceConfig; + private AtlassianSourceConfig sourceConfig; @Mock private AuthenticationConfig authenticationConfig; @@ -43,11 +43,11 @@ public class ConfluenceAuthFactoryTest { @Mock private PluginConfigVariable refreshTokenPluginConfigVariable; - private ConfluenceAuthFactory confluenceAuthFactory; + private AtlassianAuthFactory confluenceAuthFactory; @BeforeEach void setUp() { - confluenceAuthFactory = new ConfluenceAuthFactory(sourceConfig); + confluenceAuthFactory = new AtlassianAuthFactory(sourceConfig); } @Test @@ -58,17 +58,17 @@ void testGetObjectOauth2() { when(oauth2Config.getRefreshToken()).thenReturn(refreshTokenPluginConfigVariable); when(oauth2Config.getAccessToken()).thenReturn(accessTokenPluginConfigVariable); when(accessTokenPluginConfigVariable.getValue()).thenReturn("mockRefreshToken"); - assertInstanceOf(ConfluenceOauthConfig.class, confluenceAuthFactory.getObject()); + assertInstanceOf(AtlassianOauthConfig.class, confluenceAuthFactory.getObject()); } @Test void testGetObjectBasicAuth() { when(sourceConfig.getAccountUrl()).thenReturn("https://example.com"); - assertInstanceOf(ConfluenceBasicAuthConfig.class, confluenceAuthFactory.getObject()); + assertInstanceOf(AtlassianBasicAuthConfig.class, confluenceAuthFactory.getObject()); } @Test void testGetObjectType() { - assertEquals(ConfluenceAuthConfig.class, confluenceAuthFactory.getObjectType()); + assertEquals(AtlassianAuthConfig.class, confluenceAuthFactory.getObjectType()); } } diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/JiraBasicAuthConfigTest.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianBasicAuthConfigTest.java similarity index 71% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/JiraBasicAuthConfigTest.java rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianBasicAuthConfigTest.java index ae6f8f3325..7c0a8196af 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/JiraBasicAuthConfigTest.java +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianBasicAuthConfigTest.java @@ -8,30 +8,30 @@ * */ -package org.opensearch.dataprepper.plugins.source.confluence.rest.auth; +package org.opensearch.dataprepper.plugins.source.atlassian.rest.auth; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.opensearch.dataprepper.plugins.source.confluence.ConfluenceSourceConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.AtlassianSourceConfig; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) -public class JiraBasicAuthConfigTest { +public class AtlassianBasicAuthConfigTest { String url = "https://example.com"; @Mock - private ConfluenceSourceConfig confluenceSourceConfig; - private ConfluenceBasicAuthConfig jiraBasicAuthConfig; + private AtlassianSourceConfig confluenceSourceConfig; + private AtlassianBasicAuthConfig jiraBasicAuthConfig; @BeforeEach void setUp() { when(confluenceSourceConfig.getAccountUrl()).thenReturn(url); - jiraBasicAuthConfig = new ConfluenceBasicAuthConfig(confluenceSourceConfig); + jiraBasicAuthConfig = new AtlassianBasicAuthConfig(confluenceSourceConfig); } @Test diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/JiraOauthConfigTest.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianOauthConfigTest.java similarity index 86% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/JiraOauthConfigTest.java rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianOauthConfigTest.java index 7d7ef8aae4..3131e5e502 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/auth/JiraOauthConfigTest.java +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/rest/auth/AtlassianOauthConfigTest.java @@ -8,7 +8,7 @@ * */ -package org.opensearch.dataprepper.plugins.source.confluence.rest.auth; +package org.opensearch.dataprepper.plugins.source.atlassian.rest.auth; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -16,10 +16,10 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; -import org.opensearch.dataprepper.plugins.source.confluence.ConfluenceServiceTest; -import org.opensearch.dataprepper.plugins.source.confluence.ConfluenceSourceConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.Oauth2Config; -import org.opensearch.dataprepper.plugins.source.confluence.exception.UnAuthorizedException; +import org.opensearch.dataprepper.plugins.source.atlassian.AtlassianSourceConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; +import org.opensearch.dataprepper.plugins.source.atlassian.utils.ConfigUtilForTests; +import org.opensearch.dataprepper.plugins.source.source_crawler.exception.UnAuthorizedException; import org.opensearch.dataprepper.test.helper.ReflectivelySetField; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; @@ -44,23 +44,23 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.RETRY_ATTEMPT; +import static org.opensearch.dataprepper.plugins.source.atlassian.utils.Constants.RETRY_ATTEMPT; @ExtendWith(MockitoExtension.class) -public class JiraOauthConfigTest { +public class AtlassianOauthConfigTest { @Mock RestTemplate restTemplateMock; - ConfluenceSourceConfig confluenceSourceConfig; + AtlassianSourceConfig confluenceSourceConfig; @Mock PluginConfigVariable accessTokenVariable; @BeforeEach void setUp() { - confluenceSourceConfig = ConfluenceServiceTest.createJiraConfigurationFromYaml("oauth2-auth-jira-pipeline.yaml"); + confluenceSourceConfig = ConfigUtilForTests.createJiraConfigurationFromYaml("oauth2-auth-jira-pipeline.yaml"); } @Test @@ -69,7 +69,7 @@ void testRenewToken() throws InterruptedException { Map firstMockResponseMap = Map.of("access_token", "first_mock_access_token", "refresh_token", "first_mock_refresh_token", "expires_in", 3600); - ConfluenceOauthConfig jiraOauthConfig = new ConfluenceOauthConfig(confluenceSourceConfig); + AtlassianOauthConfig jiraOauthConfig = new AtlassianOauthConfig(confluenceSourceConfig); when(restTemplateMock.postForEntity(any(String.class), any(HttpEntity.class), any(Class.class))) .thenReturn(new ResponseEntity<>(firstMockResponseMap, HttpStatus.OK)); jiraOauthConfig.restTemplate = restTemplateMock; @@ -96,7 +96,7 @@ void testRenewToken() throws InterruptedException { @Test void testFailedToRenewAccessToken() throws NoSuchFieldException, IllegalAccessException { - ConfluenceOauthConfig jiraOauthConfig = new ConfluenceOauthConfig(confluenceSourceConfig); + AtlassianOauthConfig jiraOauthConfig = new AtlassianOauthConfig(confluenceSourceConfig); Oauth2Config oauth2Config = confluenceSourceConfig.getAuthenticationConfig().getOauth2Config(); ReflectivelySetField.setField(Oauth2Config.class, oauth2Config, "accessToken", accessTokenVariable); when(restTemplateMock.postForEntity(any(String.class), any(HttpEntity.class), any(Class.class))) @@ -110,7 +110,7 @@ void testFailedToRenewAccessToken() throws NoSuchFieldException, IllegalAccessEx @Test void testFailedToRenewAccessToken_with_unauthorized_and_trigger_secrets_refresh() throws NoSuchFieldException, IllegalAccessException { - ConfluenceOauthConfig jiraOauthConfig = new ConfluenceOauthConfig(confluenceSourceConfig); + AtlassianOauthConfig jiraOauthConfig = new AtlassianOauthConfig(confluenceSourceConfig); Oauth2Config oauth2Config = confluenceSourceConfig.getAuthenticationConfig().getOauth2Config(); ReflectivelySetField.setField(Oauth2Config.class, oauth2Config, "accessToken", accessTokenVariable); HttpClientErrorException unAuthorizedException = new HttpClientErrorException(HttpStatus.UNAUTHORIZED); @@ -129,7 +129,7 @@ void testGetJiraAccountCloudId() throws InterruptedException { mockGetCallResponse.put("id", "test_cloud_id"); when(restTemplateMock.exchange(any(String.class), any(HttpMethod.class), any(HttpEntity.class), any(Class.class))) .thenReturn(new ResponseEntity<>(List.of(mockGetCallResponse), HttpStatus.OK)); - ConfluenceOauthConfig jiraOauthConfig = new ConfluenceOauthConfig(confluenceSourceConfig); + AtlassianOauthConfig jiraOauthConfig = new AtlassianOauthConfig(confluenceSourceConfig); jiraOauthConfig.restTemplate = restTemplateMock; ExecutorService executor = Executors.newFixedThreadPool(2); @@ -159,7 +159,7 @@ void testGetJiraAccountCloudIdUnauthorizedCase() { "expires_in", 3600); when(restTemplateMock.postForEntity(any(String.class), any(HttpEntity.class), any(Class.class))) .thenReturn(new ResponseEntity<>(mockRenewTokenResponse, HttpStatus.OK)); - ConfluenceOauthConfig jiraOauthConfig = new ConfluenceOauthConfig(confluenceSourceConfig); + AtlassianOauthConfig jiraOauthConfig = new AtlassianOauthConfig(confluenceSourceConfig); jiraOauthConfig.restTemplate = restTemplateMock; @@ -176,7 +176,7 @@ void testFailedToGetCloudId() { when(restTemplateMock.exchange(any(String.class), any(HttpMethod.class), any(HttpEntity.class), any(Class.class))) .thenThrow(new HttpClientErrorException(HttpStatus.UNAUTHORIZED)) .thenThrow(HttpClientErrorException.class); - ConfluenceOauthConfig jiraOauthConfig = new ConfluenceOauthConfig(confluenceSourceConfig); + AtlassianOauthConfig jiraOauthConfig = new AtlassianOauthConfig(confluenceSourceConfig); jiraOauthConfig.restTemplate = restTemplateMock; assertThrows(RuntimeException.class, jiraOauthConfig::getUrl); for (int i = 0; i <= RETRY_ATTEMPT; i++) { diff --git a/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/utils/ConfigUtilForTests.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/utils/ConfigUtilForTests.java new file mode 100644 index 0000000000..61d1889935 --- /dev/null +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/utils/ConfigUtilForTests.java @@ -0,0 +1,45 @@ +package org.opensearch.dataprepper.plugins.source.atlassian.utils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.opensearch.dataprepper.plugins.source.atlassian.AtlassianSourceConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; +import org.opensearch.dataprepper.test.helper.ReflectivelySetField; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; + +public class ConfigUtilForTests { + + public static final Logger log = LoggerFactory.getLogger(ConfigUtilForTests.class); + + private static InputStream getResourceAsStream(String resourceName) { + InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName); + if (inputStream == null) { + inputStream = ConfigUtilForTests.class.getResourceAsStream("/" + resourceName); + } + return inputStream; + } + + public static AtlassianSourceConfig createJiraConfigurationFromYaml(String fileName) { + ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); + try (InputStream inputStream = getResourceAsStream(fileName)) { + AtlassianSourceConfig confluenceSourceConfig = objectMapper.readValue(inputStream, AtlassianSourceConfig.class); + Oauth2Config oauth2Config = confluenceSourceConfig.getAuthenticationConfig().getOauth2Config(); + if (oauth2Config != null) { + ReflectivelySetField.setField(Oauth2Config.class, oauth2Config, "accessToken", + new MockPluginConfigVariableImpl("mockAccessToken")); + ReflectivelySetField.setField(Oauth2Config.class, oauth2Config, "refreshToken", + new MockPluginConfigVariableImpl("mockRefreshToken")); + } + return confluenceSourceConfig; + } catch (IOException ex) { + log.error("Failed to parse pipeline Yaml", ex); + } catch (Exception e) { + throw new RuntimeException(e); + } + return null; + } +} diff --git a/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/utils/MockPluginConfigVariableImpl.java b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/utils/MockPluginConfigVariableImpl.java new file mode 100644 index 0000000000..4c5f4e8e93 --- /dev/null +++ b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/java/org/opensearch/dataprepper/plugins/source/atlassian/utils/MockPluginConfigVariableImpl.java @@ -0,0 +1,44 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + * + */ + +package org.opensearch.dataprepper.plugins.source.atlassian.utils; + +import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; + +/** + * Mock implementation of PluginConfigVariable interface used only for Unit Testing. + */ +public class MockPluginConfigVariableImpl implements PluginConfigVariable { + + private Object defaultValue; + + public MockPluginConfigVariableImpl(Object defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public Object getValue() { + return null; + } + + @Override + public void setValue(Object someValue) { + this.defaultValue = someValue; + } + + @Override + public void refresh() { + } + + @Override + public boolean isUpdatable() { + return true; + } +} diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/basic-auth-jira-pipeline.yaml b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/resources/basic-auth-jira-pipeline.yaml similarity index 100% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/basic-auth-jira-pipeline.yaml rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/resources/basic-auth-jira-pipeline.yaml diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/oauth2-auth-jira-pipeline.yaml b/data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/resources/oauth2-auth-jira-pipeline.yaml similarity index 100% rename from data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/oauth2-auth-jira-pipeline.yaml rename to data-prepper-plugins/saas-source-plugins/atlassian-commons/src/test/resources/oauth2-auth-jira-pipeline.yaml diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/build.gradle b/data-prepper-plugins/saas-source-plugins/confluence-source/build.gradle index 07308a50f7..cd1cee26e8 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/build.gradle +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/build.gradle @@ -23,6 +23,7 @@ dependencies { annotationProcessor 'org.projectlombok:lombok:1.18.30' testImplementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.4' + testImplementation project(path: ':data-prepper-plugins:saas-source-plugins:atlassian-commons') testImplementation project(path: ':data-prepper-test-common') implementation(libs.spring.context) { diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/main/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClient.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/main/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClient.java index bcda06d076..d3dcdad2d8 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/main/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClient.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/main/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClient.java @@ -10,7 +10,6 @@ package org.opensearch.dataprepper.plugins.source.confluence.rest; -import com.google.common.annotations.VisibleForTesting; import io.micrometer.core.annotation.Timed; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.Timer; @@ -44,7 +43,6 @@ public class ConfluenceRestClient extends AtlassianRestClient { private static final String SEARCH_CALL_LATENCY_TIMER = "searchCallLatency"; private static final String SPACES_FETCH_LATENCY_TIMER = "spacesFetchLatency"; private static final String PAGES_REQUESTED = "pagesRequested"; - private int sleepTimeMultiplier = 1000; private final RestTemplate restTemplate; private final AtlassianAuthConfig authConfig; private final Timer contentFetchLatencyTimer; @@ -99,9 +97,4 @@ public String getContent(String contentId) { return invokeRestApi(uri, String.class).getBody(); } - - @VisibleForTesting - public void setSleepTimeMultiplier(int multiplier) { - sleepTimeMultiplier = multiplier; - } } diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceConfigHelperTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceConfigHelperTest.java index 57ea307b5c..80528646e4 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceConfigHelperTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceConfigHelperTest.java @@ -15,11 +15,11 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.AuthenticationConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.BasicConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.AuthenticationConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.BasicConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; import org.opensearch.dataprepper.plugins.source.confluence.configuration.FilterConfig; import org.opensearch.dataprepper.plugins.source.confluence.configuration.NameConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.Oauth2Config; import org.opensearch.dataprepper.plugins.source.confluence.configuration.PageTypeConfig; import org.opensearch.dataprepper.plugins.source.confluence.configuration.SpaceConfig; import org.opensearch.dataprepper.plugins.source.confluence.utils.ConfluenceConfigHelper; diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceServiceTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceServiceTest.java index d966b2e3ad..c80f5cc78f 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceServiceTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceServiceTest.java @@ -20,13 +20,14 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.dataprepper.metrics.PluginMetrics; import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.Oauth2Config; -import org.opensearch.dataprepper.plugins.source.confluence.exception.BadRequestException; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; import org.opensearch.dataprepper.plugins.source.confluence.models.ConfluenceItem; import org.opensearch.dataprepper.plugins.source.confluence.models.ConfluenceSearchResults; +import org.opensearch.dataprepper.plugins.source.confluence.models.SpaceItem; import org.opensearch.dataprepper.plugins.source.confluence.rest.ConfluenceRestClient; import org.opensearch.dataprepper.plugins.source.confluence.utils.MockPluginConfigVariableImpl; import org.opensearch.dataprepper.plugins.source.source_crawler.base.PluginExecutorServiceProvider; +import org.opensearch.dataprepper.plugins.source.source_crawler.exception.BadRequestException; import org.opensearch.dataprepper.plugins.source.source_crawler.model.ItemInfo; import org.opensearch.dataprepper.test.helper.ReflectivelySetField; import org.slf4j.Logger; @@ -40,13 +41,13 @@ import java.util.List; import java.util.Map; import java.util.Queue; +import java.util.Random; import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; @@ -55,14 +56,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; -import static org.opensearch.dataprepper.plugins.source.confluence.rest.auth.ConfluenceOauthConfig.ACCESSIBLE_RESOURCES; +import static org.opensearch.dataprepper.plugins.source.atlassian.rest.auth.AtlassianOauthConfig.ACCESSIBLE_RESOURCES; import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.BASIC; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.CREATED; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.KEY; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.LAST_MODIFIED; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.NAME; import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.OAUTH2; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.SPACE; /** @@ -85,7 +81,7 @@ private static InputStream getResourceAsStream(String resourceName) { return inputStream; } - public static ConfluenceSourceConfig createJiraConfigurationFromYaml(String fileName) { + public static ConfluenceSourceConfig createConfluenceConfigurationFromYaml(String fileName) { ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); try (InputStream inputStream = getResourceAsStream(fileName)) { ConfluenceSourceConfig confluenceSourceConfig = objectMapper.readValue(inputStream, ConfluenceSourceConfig.class); @@ -105,10 +101,9 @@ public static ConfluenceSourceConfig createJiraConfigurationFromYaml(String file return null; } - public static ConfluenceSourceConfig createJiraConfiguration(String auth_type, - List issueType, - List issueStatus, - List projectKey) throws JsonProcessingException { + public static ConfluenceSourceConfig createConfluenceConfiguration(String auth_type, + List issueType, + List projectKey) throws JsonProcessingException { PluginConfigVariable pcvAccessToken = null; PluginConfigVariable pcvRefreshToken = null; ObjectMapper objectMapper = new ObjectMapper(); @@ -132,20 +127,16 @@ public static ConfluenceSourceConfig createJiraConfiguration(String auth_type, hosts.add(ACCESSIBLE_RESOURCES); Map filterMap = new HashMap<>(); - Map projectMap = new HashMap<>(); - Map issueTypeMap = new HashMap<>(); - Map statusMap = new HashMap<>(); + Map spacesMap = new HashMap<>(); + Map contentTypeMap = new HashMap<>(); - issueTypeMap.put("include", issueType); - filterMap.put("issue_type", issueTypeMap); - - statusMap.put("include", issueStatus); - filterMap.put("status", statusMap); + contentTypeMap.put("include", issueType); + filterMap.put("page_type", contentTypeMap); Map nameMap = new HashMap<>(); nameMap.put("include", projectKey); - projectMap.put("key", nameMap); - filterMap.put("project", projectMap); + spacesMap.put("key", nameMap); + filterMap.put("space", spacesMap); jiraSourceConfigMap.put("hosts", hosts); @@ -174,10 +165,9 @@ void tearDown() { @Test void testJiraServiceInitialization() throws JsonProcessingException { - List issueType = new ArrayList<>(); - List issueStatus = new ArrayList<>(); - List projectKey = new ArrayList<>(); - ConfluenceSourceConfig confluenceSourceConfig = createJiraConfiguration(BASIC, issueType, issueStatus, projectKey); + List contentType = new ArrayList<>(); + List spacesKey = new ArrayList<>(); + ConfluenceSourceConfig confluenceSourceConfig = createConfluenceConfiguration(BASIC, contentType, spacesKey); ConfluenceService confluenceService = new ConfluenceService(confluenceSourceConfig, confluenceRestClient, pluginMetrics); assertNotNull(confluenceService); when(confluenceRestClient.getContent(anyString())).thenReturn("test String"); @@ -186,55 +176,54 @@ void testJiraServiceInitialization() throws JsonProcessingException { @Test public void testGetPages() throws JsonProcessingException { - List issueType = new ArrayList<>(); - List issueStatus = new ArrayList<>(); - List projectKey = new ArrayList<>(); - issueType.add("Task"); - issueStatus.add("Done"); - projectKey.add("KAN"); - ConfluenceSourceConfig confluenceSourceConfig = createJiraConfiguration(BASIC, issueType, issueStatus, projectKey); + List contentType = new ArrayList<>(); + List spaceKey = new ArrayList<>(); + contentType.add("page"); + spaceKey.add("KAN"); + ConfluenceSourceConfig confluenceSourceConfig = createConfluenceConfiguration(BASIC, contentType, spaceKey); ConfluenceService confluenceService = spy(new ConfluenceService(confluenceSourceConfig, confluenceRestClient, pluginMetrics)); - List mockIssues = new ArrayList<>(); - ConfluenceItem issue1 = createConfluenceItemBean(false, false); - mockIssues.add(issue1); - ConfluenceItem issue2 = createConfluenceItemBean(true, false); - mockIssues.add(issue2); - ConfluenceItem issue3 = createConfluenceItemBean(false, true); - mockIssues.add(issue3); + List mockPages = new ArrayList<>(); + ConfluenceItem issue1 = createConfluenceItemBean(); + mockPages.add(issue1); + ConfluenceItem issue2 = createConfluenceItemBean(); + mockPages.add(issue2); + ConfluenceItem issue3 = createConfluenceItemBean(); + mockPages.add(issue3); ConfluenceSearchResults mockConfluenceSearchResults = mock(ConfluenceSearchResults.class); + when(mockConfluenceSearchResults.getResults()).thenReturn(mockPages); doReturn(mockConfluenceSearchResults).when(confluenceRestClient).getAllContent(any(StringBuilder.class), anyInt()); Instant timestamp = Instant.ofEpochSecond(0); Queue itemInfoQueue = new ConcurrentLinkedQueue<>(); confluenceService.getPages(confluenceSourceConfig, timestamp, itemInfoQueue); - assertEquals(mockIssues.size(), itemInfoQueue.size()); + assertEquals(mockPages.size(), itemInfoQueue.size()); } @Test public void buildIssueItemInfoMultipleFutureThreads() throws JsonProcessingException { List issueType = new ArrayList<>(); - List issueStatus = new ArrayList<>(); List projectKey = new ArrayList<>(); issueType.add("Task"); - ConfluenceSourceConfig confluenceSourceConfig = createJiraConfiguration(BASIC, issueType, issueStatus, projectKey); + ConfluenceSourceConfig confluenceSourceConfig = createConfluenceConfiguration(BASIC, issueType, projectKey); ConfluenceService confluenceService = spy(new ConfluenceService(confluenceSourceConfig, confluenceRestClient, pluginMetrics)); List mockIssues = new ArrayList<>(); - for (int i = 0; i < 50; i++) { - ConfluenceItem issue1 = createConfluenceItemBean(false, false); - mockIssues.add(issue1); + Random random = new Random(); + int numberOfIssues = random.nextInt(100); + for (int i = 0; i < numberOfIssues; i++) { + mockIssues.add(createConfluenceItemBean()); } ConfluenceSearchResults mockConfluenceSearchResults = mock(ConfluenceSearchResults.class); - + when(mockConfluenceSearchResults.getResults()).thenReturn(mockIssues); doReturn(mockConfluenceSearchResults).when(confluenceRestClient).getAllContent(any(StringBuilder.class), anyInt()); Instant timestamp = Instant.ofEpochSecond(0); Queue itemInfoQueue = new ConcurrentLinkedQueue<>(); confluenceService.getPages(confluenceSourceConfig, timestamp, itemInfoQueue); - assertTrue(itemInfoQueue.size() >= 100); + assertEquals(numberOfIssues, itemInfoQueue.size()); } @Test @@ -249,7 +238,7 @@ public void testBadProjectKeys() throws JsonProcessingException { projectKey.add("!@#$"); projectKey.add("AAAAAAAAAAAAAA"); - ConfluenceSourceConfig confluenceSourceConfig = createJiraConfiguration(BASIC, issueType, issueStatus, projectKey); + ConfluenceSourceConfig confluenceSourceConfig = createConfluenceConfiguration(BASIC, issueType, projectKey); ConfluenceService confluenceService = new ConfluenceService(confluenceSourceConfig, confluenceRestClient, pluginMetrics); Instant timestamp = Instant.ofEpochSecond(0); @@ -264,7 +253,7 @@ public void testGetPagesException() throws JsonProcessingException { List issueStatus = new ArrayList<>(); List projectKey = new ArrayList<>(); issueType.add("Task"); - ConfluenceSourceConfig confluenceSourceConfig = createJiraConfiguration(BASIC, issueType, issueStatus, projectKey); + ConfluenceSourceConfig confluenceSourceConfig = createConfluenceConfiguration(BASIC, issueType, projectKey); ConfluenceService confluenceService = spy(new ConfluenceService(confluenceSourceConfig, confluenceRestClient, pluginMetrics)); doThrow(RuntimeException.class).when(confluenceRestClient).getAllContent(any(StringBuilder.class), anyInt()); @@ -276,45 +265,15 @@ public void testGetPagesException() throws JsonProcessingException { } - private ConfluenceItem createConfluenceItemBean(boolean nullFields, boolean createdNull) { - ConfluenceItem issue1 = new ConfluenceItem(); - issue1.setId(UUID.randomUUID().toString()); - issue1.setTitle("issue_1_key"); - - Map fieldMap = new HashMap<>(); - if (!nullFields) { - fieldMap.put(CREATED, "2024-07-06T21:12:23.437-0700"); - fieldMap.put(LAST_MODIFIED, "2024-07-06T21:12:23.106-0700"); - } else { - fieldMap.put(CREATED, 0); - fieldMap.put(LAST_MODIFIED, 0); - } - if (createdNull) { - fieldMap.put(CREATED, null); - } - - Map issueTypeMap = new HashMap<>(); - issueTypeMap.put("name", "Task"); - issueTypeMap.put("self", "https://example.com/rest/api/2/issuetype/1"); - issueTypeMap.put("id", "1"); - fieldMap.put("issuetype", issueTypeMap); - - Map projectMap = new HashMap<>(); - if (!nullFields) { - projectMap.put(NAME, "project name test"); - projectMap.put(KEY, "TEST"); - } - fieldMap.put(SPACE, projectMap); - - Map priorityMap = new HashMap<>(); - priorityMap.put(NAME, "Medium"); - fieldMap.put("priority", priorityMap); - - Map statusMap = new HashMap<>(); - statusMap.put(NAME, "In Progress"); - fieldMap.put("statuses", statusMap); - - return issue1; + private ConfluenceItem createConfluenceItemBean() { + ConfluenceItem confluenceItem = new ConfluenceItem(); + confluenceItem.setId(UUID.randomUUID().toString()); + confluenceItem.setTitle("issue_1_key"); + SpaceItem spaceItem = new SpaceItem(); + spaceItem.setId(new Random().nextInt()); + spaceItem.setKey(UUID.randomUUID().toString()); + confluenceItem.setSpaceItem(spaceItem); + return confluenceItem; } } \ No newline at end of file diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceConfigTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceConfigTest.java index 73fdbe9dbe..69535ae697 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceConfigTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceConfigTest.java @@ -13,7 +13,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.Oauth2Config; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; import org.opensearch.dataprepper.plugins.source.confluence.utils.MockPluginConfigVariableImpl; import org.opensearch.dataprepper.test.helper.ReflectivelySetField; @@ -36,11 +36,10 @@ public class ConfluenceSourceConfigTest { private final String password = "test Jira Credential"; private final String username = "test Jira Id"; private final String accountUrl = "https://example.atlassian.net"; - private final List projectList = new ArrayList<>(); - private final List issueTypeList = new ArrayList<>(); - private final List statusList = new ArrayList<>(); + private final List spacesList = new ArrayList<>(); + private final List contentTypeList = new ArrayList<>(); - private ConfluenceSourceConfig createJiraSourceConfig(String authtype, boolean hasToken) throws Exception { + private ConfluenceSourceConfig createConfluenceSourceConfig(String authtype, boolean hasToken) throws Exception { PluginConfigVariable pcvAccessToken = null; PluginConfigVariable pcvRefreshToken = null; Map configMap = new HashMap<>(); @@ -70,30 +69,25 @@ private ConfluenceSourceConfig createJiraSourceConfig(String authtype, boolean h configMap.put("authentication", authenticationMap); - projectList.add("project1"); - projectList.add("project2"); + spacesList.add("space1"); + spacesList.add("space2"); - issueTypeList.add("issue type 1"); - issueTypeList.add("issue type 2"); - - statusList.add("status 1"); - statusList.add("status 2"); + contentTypeList.add("page"); + contentTypeList.add("blogpost"); Map filterMap = new HashMap<>(); Map projectMap = new HashMap<>(); Map issueTypeMap = new HashMap<>(); Map statusMap = new HashMap<>(); - issueTypeMap.put("include", issueTypeList); - filterMap.put("issue_type", issueTypeMap); + issueTypeMap.put("include", contentTypeList); + filterMap.put("page_type", issueTypeMap); - statusMap.put("include", statusList); - filterMap.put("status", statusMap); Map nameMap = new HashMap<>(); - nameMap.put("include", projectList); + nameMap.put("include", spacesList); projectMap.put("key", nameMap); - filterMap.put("project", projectMap); + filterMap.put("space", projectMap); configMap.put("filter", filterMap); @@ -111,9 +105,9 @@ private ConfluenceSourceConfig createJiraSourceConfig(String authtype, boolean h @Test void testGetters() throws Exception { - confluenceSourceConfig = createJiraSourceConfig(BASIC, false); - assertEquals(confluenceSourceConfig.getFilterConfig().getPageTypeConfig().getInclude(), issueTypeList); - assertEquals(confluenceSourceConfig.getFilterConfig().getSpaceConfig().getNameConfig().getInclude(), projectList); + confluenceSourceConfig = createConfluenceSourceConfig(BASIC, false); + assertEquals(confluenceSourceConfig.getFilterConfig().getPageTypeConfig().getInclude(), contentTypeList); + assertEquals(confluenceSourceConfig.getFilterConfig().getSpaceConfig().getNameConfig().getInclude(), spacesList); assertEquals(confluenceSourceConfig.getAccountUrl(), accountUrl); assertEquals(confluenceSourceConfig.getAuthenticationConfig().getBasicConfig().getPassword(), password); assertEquals(confluenceSourceConfig.getAuthenticationConfig().getBasicConfig().getUsername(), username); @@ -121,13 +115,13 @@ void testGetters() throws Exception { @Test void testFetchGivenOauthAttributeWrongAuthType() throws Exception { - confluenceSourceConfig = createJiraSourceConfig(BASIC, true); + confluenceSourceConfig = createConfluenceSourceConfig(BASIC, true); assertThrows(RuntimeException.class, () -> confluenceSourceConfig.getAuthenticationConfig().getOauth2Config().getAccessToken()); } @Test void testFetchGivenOauthAtrribute() throws Exception { - confluenceSourceConfig = createJiraSourceConfig(OAUTH2, true); + confluenceSourceConfig = createConfluenceSourceConfig(OAUTH2, true); assertEquals(accessToken, confluenceSourceConfig.getAuthenticationConfig().getOauth2Config().getAccessToken()); assertEquals(refreshToken, confluenceSourceConfig.getAuthenticationConfig().getOauth2Config().getRefreshToken()); assertEquals(clientId, confluenceSourceConfig.getAuthenticationConfig().getOauth2Config().getClientId()); diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceTest.java index ada00ab1d1..e6c62ee7fc 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/ConfluenceSourceTest.java @@ -21,9 +21,9 @@ import org.opensearch.dataprepper.model.plugin.PluginFactory; import org.opensearch.dataprepper.model.record.Record; import org.opensearch.dataprepper.model.source.coordinator.enhanced.EnhancedSourceCoordinator; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.AuthenticationConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.BasicConfig; -import org.opensearch.dataprepper.plugins.source.confluence.rest.auth.ConfluenceAuthConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.AuthenticationConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.BasicConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.rest.auth.AtlassianAuthConfig; import org.opensearch.dataprepper.plugins.source.source_crawler.base.Crawler; import org.opensearch.dataprepper.plugins.source.source_crawler.base.PluginExecutorServiceProvider; @@ -35,7 +35,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.opensearch.dataprepper.plugins.source.confluence.rest.auth.ConfluenceOauthConfig.ACCESSIBLE_RESOURCES; +import static org.opensearch.dataprepper.plugins.source.atlassian.rest.auth.AtlassianOauthConfig.ACCESSIBLE_RESOURCES; import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.BASIC; @ExtendWith(MockitoExtension.class) @@ -52,7 +52,7 @@ public class ConfluenceSourceTest { @Mock private ConfluenceSourceConfig confluenceSourceConfig; @Mock - private ConfluenceAuthConfig jiraOauthConfig; + private AtlassianAuthConfig jiraOauthConfig; @Mock private PluginFactory pluginFactory; @Mock diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/models/ConfluenceItemTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/models/ConfluenceItemTest.java index 1c22fb673a..827d0824a0 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/models/ConfluenceItemTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/models/ConfluenceItemTest.java @@ -15,9 +15,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.HashMap; -import java.util.Map; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; @@ -26,46 +23,40 @@ public class ConfluenceItemTest { - private ConfluenceItem issueBean; + private ConfluenceItem confluenceItemBean; @BeforeEach void setup() { - issueBean = new ConfluenceItem(); + confluenceItemBean = new ConfluenceItem(); } @Test public void testInitialization() { - assertNotNull(issueBean); + assertNotNull(confluenceItemBean); } @Test public void testNull() { - assertNull(issueBean.getId()); + assertNull(confluenceItemBean.getId()); } @Test void testNullCases() { - assertEquals(issueBean.getUpdatedTimeMillis(), 0); + assertEquals(confluenceItemBean.getUpdatedTimeMillis(), 0); } @Test void testGivenDateField() { - Map fieldsTestObject = new HashMap<>(); - fieldsTestObject.put("created", "2024-07-06T21:12:23.437-0700"); - fieldsTestObject.put("updated", "2022-07-06T21:12:23.106-0700"); - assertEquals(issueBean.getCreatedTimeMillis(), 1720325543000L); - assertEquals(issueBean.getUpdatedTimeMillis(), 1657167143000L); + assertEquals(confluenceItemBean.getCreatedTimeMillis(), 0L); + assertEquals(confluenceItemBean.getUpdatedTimeMillis(), 0L); } @Test public void testStringSettersAndGetters() { - String self = "selfTest"; - String key = "keyTest"; String id = "idTest"; - String expand = "expandTest"; - issueBean.setId(id); - assertEquals(issueBean.getId(), id); + confluenceItemBean.setId(id); + assertEquals(confluenceItemBean.getId(), id); } } diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClientTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClientTest.java index ea7f35350e..375e678183 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClientTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/ConfluenceRestClientTest.java @@ -10,7 +10,6 @@ package org.opensearch.dataprepper.plugins.source.confluence.rest; -import com.fasterxml.jackson.core.JsonProcessingException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -44,8 +43,6 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.BASIC; -import static org.opensearch.dataprepper.plugins.source.confluence.utils.Constants.OAUTH2; @ExtendWith(MockitoExtension.class) public class ConfluenceRestClientTest { @@ -71,15 +68,15 @@ private static Stream provideHttpStatusCodesWithExceptionClass() { } @ParameterizedTest - @ValueSource(strings = {"basic-auth-jira-pipeline.yaml"}) + @ValueSource(strings = {"basic-auth-confluence-pipeline.yaml"}) public void testFetchingJiraIssue(String configFileName) { - String exampleTicketResponse = "{\"id\":\"123\",\"key\":\"key\",\"self\":\"https://example.com/rest/api/2/issue/123\"}"; - doReturn(new ResponseEntity<>(exampleTicketResponse, HttpStatus.OK)).when(restTemplate).getForEntity(any(URI.class), any(Class.class)); - ConfluenceSourceConfig confluenceSourceConfig = ConfluenceServiceTest.createJiraConfigurationFromYaml(configFileName); + String examplePageResponse = "{\"id\":\"123\",\"key\":\"key\",\"self\":\"https://example.com/rest/api/2/issue/123\"}"; + doReturn(new ResponseEntity<>(examplePageResponse, HttpStatus.OK)).when(restTemplate).getForEntity(any(URI.class), any(Class.class)); + ConfluenceSourceConfig confluenceSourceConfig = ConfluenceServiceTest.createConfluenceConfigurationFromYaml(configFileName); AtlassianAuthConfig authConfig = new AtlassianAuthFactory(confluenceSourceConfig).getObject(); ConfluenceRestClient confluenceRestClient = new ConfluenceRestClient(restTemplate, authConfig, pluginMetrics); - String ticketDetails = confluenceRestClient.getContent("key"); - assertEquals(exampleTicketResponse, ticketDetails); + String pageDetails = confluenceRestClient.getContent("key"); + assertEquals(examplePageResponse, pageDetails); } @ParameterizedTest @@ -114,12 +111,9 @@ void testInvokeRestApiTokenExpiredInterruptException() throws InterruptedExcepti } @Test - public void testGetAllContentOauth2() throws JsonProcessingException { + public void testGetAllContentOauth2() { List issueType = new ArrayList<>(); - List issueStatus = new ArrayList<>(); - List projectKey = new ArrayList<>(); issueType.add("Task"); - ConfluenceSourceConfig confluenceSourceConfig = ConfluenceServiceTest.createJiraConfiguration(OAUTH2, issueType, issueStatus, projectKey); ConfluenceRestClient confluenceRestClient = new ConfluenceRestClient(restTemplate, authConfig, pluginMetrics); ConfluenceSearchResults mockConfluenceSearchResults = mock(ConfluenceSearchResults.class); doReturn("http://mock-service.jira.com/").when(authConfig).getUrl(); @@ -129,12 +123,9 @@ public void testGetAllContentOauth2() throws JsonProcessingException { } @Test - public void testGetAllContentBasic() throws JsonProcessingException { + public void testGetAllContentBasic() { List issueType = new ArrayList<>(); - List issueStatus = new ArrayList<>(); - List projectKey = new ArrayList<>(); issueType.add("Task"); - ConfluenceSourceConfig confluenceSourceConfig = ConfluenceServiceTest.createJiraConfiguration(BASIC, issueType, issueStatus, projectKey); ConfluenceRestClient confluenceRestClient = new ConfluenceRestClient(restTemplate, authConfig, pluginMetrics); ConfluenceSearchResults mockConfluenceSearchResults = mock(ConfluenceSearchResults.class); when(authConfig.getUrl()).thenReturn("https://example.com/"); @@ -144,7 +135,7 @@ public void testGetAllContentBasic() throws JsonProcessingException { } @Test - public void testRestApiAddressValidation() throws JsonProcessingException { + public void testRestApiAddressValidation() { when(authConfig.getUrl()).thenReturn("https://224.0.0.1/"); ConfluenceRestClient confluenceRestClient = new ConfluenceRestClient(restTemplate, authConfig, pluginMetrics); assertThrows(BadRequestException.class, () -> confluenceRestClient.getContent("TEST-1")); diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/CustomRestTemplateConfigTest.java b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/CustomRestTemplateConfigTest.java index 23297eb380..ea20598dff 100644 --- a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/CustomRestTemplateConfigTest.java +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/java/org/opensearch/dataprepper/plugins/source/confluence/rest/CustomRestTemplateConfigTest.java @@ -18,11 +18,14 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.dataprepper.model.plugin.PluginConfigVariable; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.AuthenticationConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.BasicConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.configuration.Oauth2Config; +import org.opensearch.dataprepper.plugins.source.atlassian.rest.BasicAuthInterceptor; +import org.opensearch.dataprepper.plugins.source.atlassian.rest.CustomRestTemplateConfig; +import org.opensearch.dataprepper.plugins.source.atlassian.rest.OAuth2RequestInterceptor; +import org.opensearch.dataprepper.plugins.source.atlassian.rest.auth.AtlassianAuthConfig; import org.opensearch.dataprepper.plugins.source.confluence.ConfluenceSourceConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.AuthenticationConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.BasicConfig; -import org.opensearch.dataprepper.plugins.source.confluence.configuration.Oauth2Config; -import org.opensearch.dataprepper.plugins.source.confluence.rest.auth.ConfluenceAuthConfig; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.InterceptingClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @@ -47,7 +50,7 @@ class CustomRestTemplateConfigTest { private ConfluenceSourceConfig mockSourceConfig; @Mock - private ConfluenceAuthConfig mockAuthConfig; + private AtlassianAuthConfig mockAuthConfig; @Mock private BasicConfig mockBasicConfig; diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/basic-auth-confluence-pipeline.yaml b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/basic-auth-confluence-pipeline.yaml new file mode 100644 index 0000000000..0bfa6384e8 --- /dev/null +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/basic-auth-confluence-pipeline.yaml @@ -0,0 +1,6 @@ +hosts: ["https://jira.com/"] +authentication: + basic: + username: "jiraId" + password: "jiraApiKey" + diff --git a/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/oauth2-auth-confluence-pipeline.yaml b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/oauth2-auth-confluence-pipeline.yaml new file mode 100644 index 0000000000..7a4afd3abf --- /dev/null +++ b/data-prepper-plugins/saas-source-plugins/confluence-source/src/test/resources/oauth2-auth-confluence-pipeline.yaml @@ -0,0 +1,6 @@ +hosts: [ "https://jira.com/" ] +authentication: + oauth2: + client_id: "client_id" + client_secret: "client_secret" +