package org.cfg4j.source.s3;
import com.amazonaws.services.s3.model.S3Object;
import org.cfg4j.provider.ConfigurationProvider;
import org.cfg4j.provider.ConfigurationProviderBuilder;
import org.cfg4j.source.ConfigurationSource;
import org.cfg4j.source.context.environment.Environment;
import org.cfg4j.source.context.environment.ImmutableEnvironment;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import java.io.ByteArrayInputStream;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class SimpleConfigurationProviderIntegrationTest {
@Mock
private AmazonS3Wrapper s3Wrapper;
private final String FILE_NAME = "application.properties";
private Environment environment = new ImmutableEnvironment(FILE_NAME);
@Before
public void setUp() throws Exception {
String BUCKET_NAME = "configurations-bucket";
S3Object mockS3Object = null;
final String fileContent = "app.version=1.0.0";
when(s3Wrapper.getFile(FILE_NAME))
.thenAnswer(new Answer<S3Object>() {
public S3Object answer(InvocationOnMock invocation) throws Throwable {
S3Object mockS3Object = new S3Object();
mockS3Object.setKey(FILE_NAME);
mockS3Object.setObjectContent(new ByteArrayInputStream(fileContent.getBytes()));
return mockS3Object;
}
});
when(s3Wrapper.isFileExist(FILE_NAME)).thenReturn(true);
when(s3Wrapper.getBucketName()).thenReturn(BUCKET_NAME);
when(s3Wrapper.isBucketExist(BUCKET_NAME)).thenReturn(true);
when(s3Wrapper.getFileContent(mockS3Object)).thenReturn(fileContent);
}
@Test
public void readsConfigsFromS3ConfigurationSource() throws Exception {
ConfigurationSource source = new S3ConfigurationSourceBuilder().build(s3Wrapper);
ConfigurationProvider provider = new ConfigurationProviderBuilder()
.withConfigurationSource(source)
.withEnvironment(environment)
.build();
assertThat(provider.getProperty("app.version", String.class)).isEqualTo("1.0.0");
}
}