|
@@ -23,7 +23,6 @@ import com.microsoft.azure.storage.LocationMode;
|
|
|
import com.microsoft.azure.storage.RetryExponentialRetry;
|
|
|
import com.microsoft.azure.storage.blob.CloudBlobClient;
|
|
|
import com.microsoft.azure.storage.core.Base64;
|
|
|
-
|
|
|
import org.elasticsearch.common.settings.MockSecureSettings;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.settings.SettingsException;
|
|
@@ -36,6 +35,7 @@ import java.net.URI;
|
|
|
import java.net.URISyntaxException;
|
|
|
import java.net.UnknownHostException;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import static org.elasticsearch.repositories.azure.AzureStorageServiceImpl.blobNameFromUri;
|
|
@@ -49,31 +49,14 @@ import static org.hamcrest.Matchers.nullValue;
|
|
|
|
|
|
public class AzureStorageServiceTests extends ESTestCase {
|
|
|
|
|
|
- private MockSecureSettings buildSecureSettings() {
|
|
|
- MockSecureSettings secureSettings = new MockSecureSettings();
|
|
|
- secureSettings.setString("azure.client.azure1.account", "myaccount1");
|
|
|
- secureSettings.setString("azure.client.azure1.key", "mykey1");
|
|
|
- secureSettings.setString("azure.client.azure2.account", "myaccount2");
|
|
|
- secureSettings.setString("azure.client.azure2.key", "mykey2");
|
|
|
- secureSettings.setString("azure.client.azure3.account", "myaccount3");
|
|
|
- secureSettings.setString("azure.client.azure3.key", "mykey3");
|
|
|
- return secureSettings;
|
|
|
- }
|
|
|
- private Settings buildSettings() {
|
|
|
- Settings settings = Settings.builder()
|
|
|
- .setSecureSettings(buildSecureSettings())
|
|
|
- .build();
|
|
|
- return settings;
|
|
|
- }
|
|
|
-
|
|
|
public void testReadSecuredSettings() {
|
|
|
MockSecureSettings secureSettings = new MockSecureSettings();
|
|
|
secureSettings.setString("azure.client.azure1.account", "myaccount1");
|
|
|
- secureSettings.setString("azure.client.azure1.key", "mykey1");
|
|
|
+ secureSettings.setString("azure.client.azure1.key", encodeKey("mykey1"));
|
|
|
secureSettings.setString("azure.client.azure2.account", "myaccount2");
|
|
|
- secureSettings.setString("azure.client.azure2.key", "mykey2");
|
|
|
+ secureSettings.setString("azure.client.azure2.key", encodeKey("mykey2"));
|
|
|
secureSettings.setString("azure.client.azure3.account", "myaccount3");
|
|
|
- secureSettings.setString("azure.client.azure3.key", "mykey3");
|
|
|
+ secureSettings.setString("azure.client.azure3.key", encodeKey("mykey3"));
|
|
|
Settings settings = Settings.builder().setSecureSettings(secureSettings)
|
|
|
.put("azure.client.azure3.endpoint_suffix", "my_endpoint_suffix").build();
|
|
|
|
|
@@ -88,9 +71,9 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
public void testCreateClientWithEndpointSuffix() {
|
|
|
MockSecureSettings secureSettings = new MockSecureSettings();
|
|
|
secureSettings.setString("azure.client.azure1.account", "myaccount1");
|
|
|
- secureSettings.setString("azure.client.azure1.key", Base64.encode("mykey1".getBytes(StandardCharsets.UTF_8)));
|
|
|
+ secureSettings.setString("azure.client.azure1.key", encodeKey("mykey1"));
|
|
|
secureSettings.setString("azure.client.azure2.account", "myaccount2");
|
|
|
- secureSettings.setString("azure.client.azure2.key", Base64.encode("mykey2".getBytes(StandardCharsets.UTF_8)));
|
|
|
+ secureSettings.setString("azure.client.azure2.key", encodeKey("mykey2"));
|
|
|
Settings settings = Settings.builder().setSecureSettings(secureSettings)
|
|
|
.put("azure.client.azure1.endpoint_suffix", "my_endpoint_suffix").build();
|
|
|
AzureStorageServiceImpl azureStorageService = new AzureStorageServiceImpl(settings, AzureStorageSettings.load(settings));
|
|
@@ -103,7 +86,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
|
|
|
public void testGetSelectedClientWithNoPrimaryAndSecondary() {
|
|
|
try {
|
|
|
- new AzureStorageServiceMockForSettings(Settings.EMPTY);
|
|
|
+ new AzureStorageServiceImpl(Settings.EMPTY, Collections.emptyMap());
|
|
|
fail("we should have raised an IllegalArgumentException");
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
assertThat(e.getMessage(), is("If you want to use an azure repository, you need to define a client configuration."));
|
|
@@ -111,11 +94,11 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testGetSelectedClientNonExisting() {
|
|
|
- AzureStorageServiceImpl azureStorageService = new AzureStorageServiceMockForSettings(buildSettings());
|
|
|
+ AzureStorageServiceImpl azureStorageService = createAzureService(buildSettings());
|
|
|
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> {
|
|
|
azureStorageService.getSelectedClient("azure4", LocationMode.PRIMARY_ONLY);
|
|
|
});
|
|
|
- assertThat(e.getMessage(), is("Can not find named azure client [azure4]. Check your settings."));
|
|
|
+ assertThat(e.getMessage(), is("Unable to find client with name [azure4]"));
|
|
|
}
|
|
|
|
|
|
public void testGetSelectedClientDefaultTimeout() {
|
|
@@ -123,7 +106,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.setSecureSettings(buildSecureSettings())
|
|
|
.put("azure.client.azure3.timeout", "30s")
|
|
|
.build();
|
|
|
- AzureStorageServiceImpl azureStorageService = new AzureStorageServiceMockForSettings(timeoutSettings);
|
|
|
+ AzureStorageServiceImpl azureStorageService = createAzureService(timeoutSettings);
|
|
|
CloudBlobClient client1 = azureStorageService.getSelectedClient("azure1", LocationMode.PRIMARY_ONLY);
|
|
|
assertThat(client1.getDefaultRequestOptions().getTimeoutIntervalInMs(), nullValue());
|
|
|
CloudBlobClient client3 = azureStorageService.getSelectedClient("azure3", LocationMode.PRIMARY_ONLY);
|
|
@@ -131,13 +114,13 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testGetSelectedClientNoTimeout() {
|
|
|
- AzureStorageServiceImpl azureStorageService = new AzureStorageServiceMockForSettings(buildSettings());
|
|
|
+ AzureStorageServiceImpl azureStorageService = createAzureService(buildSettings());
|
|
|
CloudBlobClient client1 = azureStorageService.getSelectedClient("azure1", LocationMode.PRIMARY_ONLY);
|
|
|
assertThat(client1.getDefaultRequestOptions().getTimeoutIntervalInMs(), is(nullValue()));
|
|
|
}
|
|
|
|
|
|
public void testGetSelectedClientBackoffPolicy() {
|
|
|
- AzureStorageServiceImpl azureStorageService = new AzureStorageServiceMockForSettings(buildSettings());
|
|
|
+ AzureStorageServiceImpl azureStorageService = createAzureService(buildSettings());
|
|
|
CloudBlobClient client1 = azureStorageService.getSelectedClient("azure1", LocationMode.PRIMARY_ONLY);
|
|
|
assertThat(client1.getDefaultRequestOptions().getRetryPolicyFactory(), is(notNullValue()));
|
|
|
assertThat(client1.getDefaultRequestOptions().getRetryPolicyFactory(), instanceOf(RetryExponentialRetry.class));
|
|
@@ -149,7 +132,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.max_retries", 7)
|
|
|
.build();
|
|
|
|
|
|
- AzureStorageServiceImpl azureStorageService = new AzureStorageServiceMockForSettings(timeoutSettings);
|
|
|
+ AzureStorageServiceImpl azureStorageService = createAzureService(timeoutSettings);
|
|
|
CloudBlobClient client1 = azureStorageService.getSelectedClient("azure1", LocationMode.PRIMARY_ONLY);
|
|
|
assertThat(client1.getDefaultRequestOptions().getRetryPolicyFactory(), is(notNullValue()));
|
|
|
assertThat(client1.getDefaultRequestOptions().getRetryPolicyFactory(), instanceOf(RetryExponentialRetry.class));
|
|
@@ -159,7 +142,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
Settings settings = Settings.builder()
|
|
|
.setSecureSettings(buildSecureSettings())
|
|
|
.build();
|
|
|
- AzureStorageServiceMockForSettings mock = new AzureStorageServiceMockForSettings(settings);
|
|
|
+ AzureStorageServiceImpl mock = createAzureService(settings);
|
|
|
assertThat(mock.storageSettings.get("azure1").getProxy(), nullValue());
|
|
|
assertThat(mock.storageSettings.get("azure2").getProxy(), nullValue());
|
|
|
assertThat(mock.storageSettings.get("azure3").getProxy(), nullValue());
|
|
@@ -172,7 +155,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.proxy.port", 8080)
|
|
|
.put("azure.client.azure1.proxy.type", "http")
|
|
|
.build();
|
|
|
- AzureStorageServiceMockForSettings mock = new AzureStorageServiceMockForSettings(settings);
|
|
|
+ AzureStorageServiceImpl mock = createAzureService(settings);
|
|
|
Proxy azure1Proxy = mock.storageSettings.get("azure1").getProxy();
|
|
|
|
|
|
assertThat(azure1Proxy, notNullValue());
|
|
@@ -192,7 +175,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure2.proxy.port", 8081)
|
|
|
.put("azure.client.azure2.proxy.type", "http")
|
|
|
.build();
|
|
|
- AzureStorageServiceMockForSettings mock = new AzureStorageServiceMockForSettings(settings);
|
|
|
+ AzureStorageServiceImpl mock = createAzureService(settings);
|
|
|
Proxy azure1Proxy = mock.storageSettings.get("azure1").getProxy();
|
|
|
assertThat(azure1Proxy, notNullValue());
|
|
|
assertThat(azure1Proxy.type(), is(Proxy.Type.HTTP));
|
|
@@ -211,7 +194,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.proxy.port", 8080)
|
|
|
.put("azure.client.azure1.proxy.type", "socks")
|
|
|
.build();
|
|
|
- AzureStorageServiceMockForSettings mock = new AzureStorageServiceMockForSettings(settings);
|
|
|
+ AzureStorageServiceImpl mock = createAzureService(settings);
|
|
|
Proxy azure1Proxy = mock.storageSettings.get("azure1").getProxy();
|
|
|
assertThat(azure1Proxy, notNullValue());
|
|
|
assertThat(azure1Proxy.type(), is(Proxy.Type.SOCKS));
|
|
@@ -227,7 +210,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.proxy.type", randomFrom("socks", "http"))
|
|
|
.build();
|
|
|
|
|
|
- SettingsException e = expectThrows(SettingsException.class, () -> new AzureStorageServiceMockForSettings(settings));
|
|
|
+ SettingsException e = expectThrows(SettingsException.class, () -> createAzureService(settings));
|
|
|
assertEquals("Azure Proxy type has been set but proxy host or port is not defined.", e.getMessage());
|
|
|
}
|
|
|
|
|
@@ -238,7 +221,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.proxy.type", randomFrom("socks", "http"))
|
|
|
.build();
|
|
|
|
|
|
- SettingsException e = expectThrows(SettingsException.class, () -> new AzureStorageServiceMockForSettings(settings));
|
|
|
+ SettingsException e = expectThrows(SettingsException.class, () -> createAzureService(settings));
|
|
|
assertEquals("Azure Proxy type has been set but proxy host or port is not defined.", e.getMessage());
|
|
|
}
|
|
|
|
|
@@ -249,7 +232,7 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.proxy.port", 8080)
|
|
|
.build();
|
|
|
|
|
|
- SettingsException e = expectThrows(SettingsException.class, () -> new AzureStorageServiceMockForSettings(settings));
|
|
|
+ SettingsException e = expectThrows(SettingsException.class, () -> createAzureService(settings));
|
|
|
assertEquals("Azure Proxy port or host have been set but proxy type is not defined.", e.getMessage());
|
|
|
}
|
|
|
|
|
@@ -261,26 +244,10 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
.put("azure.client.azure1.proxy.port", 8080)
|
|
|
.build();
|
|
|
|
|
|
- SettingsException e = expectThrows(SettingsException.class, () -> new AzureStorageServiceMockForSettings(settings));
|
|
|
+ SettingsException e = expectThrows(SettingsException.class, () -> createAzureService(settings));
|
|
|
assertEquals("Azure proxy host is unknown.", e.getMessage());
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * This internal class just overload createClient method which is called by AzureStorageServiceImpl.doStart()
|
|
|
- */
|
|
|
- class AzureStorageServiceMockForSettings extends AzureStorageServiceImpl {
|
|
|
- AzureStorageServiceMockForSettings(Settings settings) {
|
|
|
- super(settings, AzureStorageSettings.load(settings));
|
|
|
- }
|
|
|
-
|
|
|
- // We fake the client here
|
|
|
- @Override
|
|
|
- void createClient(AzureStorageSettings azureStorageSettings) {
|
|
|
- this.clients.put(azureStorageSettings.getAccount(),
|
|
|
- new CloudBlobClient(URI.create("https://" + azureStorageSettings.getAccount())));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public void testBlobNameFromUri() throws URISyntaxException {
|
|
|
String name = blobNameFromUri(new URI("https://myservice.azure.net/container/path/to/myfile"));
|
|
|
assertThat(name, is("path/to/myfile"));
|
|
@@ -291,4 +258,27 @@ public class AzureStorageServiceTests extends ESTestCase {
|
|
|
name = blobNameFromUri(new URI("https://127.0.0.1/container/path/to/myfile"));
|
|
|
assertThat(name, is("path/to/myfile"));
|
|
|
}
|
|
|
+
|
|
|
+ private static MockSecureSettings buildSecureSettings() {
|
|
|
+ MockSecureSettings secureSettings = new MockSecureSettings();
|
|
|
+ secureSettings.setString("azure.client.azure1.account", "myaccount1");
|
|
|
+ secureSettings.setString("azure.client.azure1.key", encodeKey("mykey1"));
|
|
|
+ secureSettings.setString("azure.client.azure2.account", "myaccount2");
|
|
|
+ secureSettings.setString("azure.client.azure2.key", encodeKey("mykey2"));
|
|
|
+ secureSettings.setString("azure.client.azure3.account", "myaccount3");
|
|
|
+ secureSettings.setString("azure.client.azure3.key", encodeKey("mykey3"));
|
|
|
+ return secureSettings;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static Settings buildSettings() {
|
|
|
+ return Settings.builder().setSecureSettings(buildSecureSettings()).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static AzureStorageServiceImpl createAzureService(final Settings settings) {
|
|
|
+ return new AzureStorageServiceImpl(settings, AzureStorageSettings.load(settings));
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String encodeKey(final String value) {
|
|
|
+ return Base64.encode(value.getBytes(StandardCharsets.UTF_8));
|
|
|
+ }
|
|
|
}
|