Skip to content

Commit

Permalink
test cases in a running state
Browse files Browse the repository at this point in the history
Signed-off-by: Santhosh Gandhe <[email protected]>
  • Loading branch information
san81 committed Feb 4, 2025
1 parent 0e89bf0 commit 66befd5
Show file tree
Hide file tree
Showing 20 changed files with 244 additions and 212 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -48,7 +47,7 @@ public class BasicAuthInterceptorTest {
@Mock
private ClientHttpResponse mockResponse;
@Mock
private ConfluenceSourceConfig mockConfig;
private AtlassianSourceConfig mockConfig;
@Mock
private HttpHeaders mockHeaders;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -41,7 +41,7 @@ public class OAuth2RequestInterceptorTest {
private ClientHttpResponse mockResponse;

@Mock
private ConfluenceOauthConfig mockConfig;
private AtlassianOauthConfig mockConfig;

@Mock
private HttpHeaders mockHeaders;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@
*
*/

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.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;
Expand All @@ -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
Expand All @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
*
*/

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.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;
Expand All @@ -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
Expand All @@ -69,7 +69,7 @@ void testRenewToken() throws InterruptedException {
Map<String, Object> 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;
Expand All @@ -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)))
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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;


Expand All @@ -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++) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -99,9 +97,4 @@ public String getContent(String contentId) {
return invokeRestApi(uri, String.class).getBody();
}


@VisibleForTesting
public void setSleepTimeMultiplier(int multiplier) {
sleepTimeMultiplier = multiplier;
}
}
Loading

0 comments on commit 66befd5

Please sign in to comment.