1+ package io .cloudflight .testresources .springboot .azurite ;
2+
3+ import io .micronaut .testresources .testcontainers .AbstractTestContainersProvider ;
4+ import org .testcontainers .containers .GenericContainer ;
5+ import org .testcontainers .utility .DockerImageName ;
6+
7+ import java .util .*;
8+
9+ public class AzuriteTestResourceProvider extends AbstractTestContainersProvider <GenericContainer <?>> {
10+
11+ private static final String PREFIX = "spring.cloud.azure.storage.blob." ;
12+ private static final String ACCOUNT_NAME_PROPERTY = PREFIX + "account-name" ;
13+ private static final String ACCOUNT_KEY_PROPERTY = PREFIX + "account-key" ;
14+ private static final String ACCOUNT_ENDPOINT_PROPERTY = PREFIX + "endpoint" ;
15+ private static final String DEFAULT_IMAGE = "mcr.microsoft.com/azure-storage/azurite" ;
16+ private static final String SIMPLE_NAME = "azurite" ;
17+
18+ /**
19+ * can't be changed, see <a href="https://github.com/Azure/Azurite#default-storage-account">https://github.com/Azure/Azurite#default-storage-account</a>
20+ */
21+ private static final String ACCOUNT_NAME = "devstoreaccount1" ;
22+
23+ /**
24+ * can't be changed, see <a href="https://github.com/Azure/Azurite#default-storage-account">https://github.com/Azure/Azurite#default-storage-account</a>
25+ */
26+ private static final String ACCOUNT_KEY = "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" ;
27+
28+ private static final int AZURITE_PORT = 10000 ;
29+
30+ private static final Set <String > SUPPORTED_PROPERTIES ;
31+
32+ static {
33+ SUPPORTED_PROPERTIES = Set .of (ACCOUNT_NAME_PROPERTY , ACCOUNT_KEY_PROPERTY , ACCOUNT_ENDPOINT_PROPERTY );
34+ }
35+
36+ @ Override
37+ public List <String > getResolvableProperties (Map <String , Collection <String >> propertyEntries , Map <String , Object > testResourcesConfig ) {
38+ return SUPPORTED_PROPERTIES .stream ().toList ();
39+ }
40+
41+ @ Override
42+ protected String getSimpleName () {
43+ return SIMPLE_NAME ;
44+ }
45+
46+ @ Override
47+ protected String getDefaultImageName () {
48+ return DEFAULT_IMAGE ;
49+ }
50+
51+ @ Override
52+ protected GenericContainer <?> createContainer (DockerImageName imageName , Map <String , Object > requestedProperties , Map <String , Object > testResourcesConfiguration ) {
53+ GenericContainer <?> container = new GenericContainer <>(imageName );
54+ container .withExposedPorts (AZURITE_PORT );
55+ return container ;
56+ }
57+
58+ @ Override
59+ protected Optional <String > resolveProperty (String propertyName , GenericContainer <?> container ) {
60+ String value = switch (propertyName ) {
61+ case ACCOUNT_ENDPOINT_PROPERTY -> "http://" + container .getHost () + ":" + container .getMappedPort (AZURITE_PORT ) + "/" + ACCOUNT_NAME ;
62+ case ACCOUNT_NAME_PROPERTY -> ACCOUNT_NAME ;
63+ case ACCOUNT_KEY_PROPERTY -> ACCOUNT_KEY ;
64+ default -> null ;
65+ };
66+ return Optional .ofNullable (value );
67+ }
68+
69+ @ Override
70+ protected boolean shouldAnswer (String propertyName , Map <String , Object > requestedProperties , Map <String , Object > testResourcesConfiguration ) {
71+ return SUPPORTED_PROPERTIES .contains (propertyName );
72+ }
73+ }
0 commit comments