8 changed files with 269 additions and 1 deletions
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
/* |
||||
* Copyright 2012-2023 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.springframework.util.Assert; |
||||
import org.springframework.util.StringUtils; |
||||
|
||||
/** |
||||
* MS SQL Server environment details. |
||||
* |
||||
* @author Andy Wilkinson |
||||
*/ |
||||
class MsSqlServerEnvironment { |
||||
|
||||
private final String username = "SA"; |
||||
|
||||
private final String password; |
||||
|
||||
MsSqlServerEnvironment(Map<String, String> env) { |
||||
this.password = extractPassword(env); |
||||
} |
||||
|
||||
private String extractPassword(Map<String, String> env) { |
||||
String password = env.get("MSSQL_SA_PASSWORD"); |
||||
password = (password != null) ? password : env.get("SA_PASSWORD"); |
||||
Assert.state(StringUtils.hasLength(password), "No MSSQL password found"); |
||||
return password; |
||||
} |
||||
|
||||
String getUsername() { |
||||
return this.username; |
||||
} |
||||
|
||||
String getPassword() { |
||||
return this.password; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,72 @@
@@ -0,0 +1,72 @@
|
||||
/* |
||||
* Copyright 2012-2023 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver; |
||||
|
||||
import io.r2dbc.spi.ConnectionFactoryOptions; |
||||
|
||||
import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; |
||||
import org.springframework.boot.docker.compose.core.RunningService; |
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory; |
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource; |
||||
import org.springframework.boot.docker.compose.service.connection.r2dbc.ConnectionFactoryOptionsBuilder; |
||||
|
||||
/** |
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link R2dbcConnectionDetails} |
||||
* for a {@code mssql} service. |
||||
* |
||||
* @author Moritz Halbritter |
||||
* @author Andy Wilkinson |
||||
* @author Phillip Webb |
||||
*/ |
||||
class MsSqlServerR2dbcDockerComposeConnectionDetailsFactory |
||||
extends DockerComposeConnectionDetailsFactory<R2dbcConnectionDetails> { |
||||
|
||||
MsSqlServerR2dbcDockerComposeConnectionDetailsFactory() { |
||||
super("mssql/server", "io.r2dbc.spi.ConnectionFactoryOptions"); |
||||
} |
||||
|
||||
@Override |
||||
protected R2dbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) { |
||||
return new MsSqlR2dbcDockerComposeConnectionDetails(source.getRunningService()); |
||||
} |
||||
|
||||
/** |
||||
* {@link R2dbcConnectionDetails} backed by a {@code mssql} {@link RunningService}. |
||||
*/ |
||||
static class MsSqlR2dbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails |
||||
implements R2dbcConnectionDetails { |
||||
|
||||
private static final ConnectionFactoryOptionsBuilder connectionFactoryOptionsBuilder = new ConnectionFactoryOptionsBuilder( |
||||
"mssql", 1433); |
||||
|
||||
private final ConnectionFactoryOptions connectionFactoryOptions; |
||||
|
||||
MsSqlR2dbcDockerComposeConnectionDetails(RunningService service) { |
||||
super(service); |
||||
MsSqlServerEnvironment environment = new MsSqlServerEnvironment(service.env()); |
||||
this.connectionFactoryOptions = connectionFactoryOptionsBuilder.build(service, "", |
||||
environment.getUsername(), environment.getPassword()); |
||||
} |
||||
|
||||
@Override |
||||
public ConnectionFactoryOptions getConnectionFactoryOptions() { |
||||
return this.connectionFactoryOptions; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/* |
||||
* Copyright 2012-2023 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
/** |
||||
* Auto-configuration for docker compose MS SQL Server service connections. |
||||
*/ |
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver; |
||||
@ -0,0 +1,65 @@
@@ -0,0 +1,65 @@
|
||||
/* |
||||
* Copyright 2012-2023 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver; |
||||
|
||||
import java.util.Collections; |
||||
import java.util.Map; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException; |
||||
|
||||
/** |
||||
* Tests for {@link MsSqlServerEnvironment}. |
||||
* |
||||
* @author Andy Wilkinson |
||||
*/ |
||||
class MsSqlServerEnvironmentTests { |
||||
|
||||
@Test |
||||
void createWhenHasNoPasswordThrowsException() { |
||||
assertThatIllegalStateException().isThrownBy(() -> new MsSqlServerEnvironment(Collections.emptyMap())) |
||||
.withMessage("No MSSQL password found"); |
||||
} |
||||
|
||||
@Test |
||||
void getUsernameWhenHasNoMsSqlUser() { |
||||
MsSqlServerEnvironment environment = new MsSqlServerEnvironment(Map.of("MSSQL_SA_PASSWORD", "secret")); |
||||
assertThat(environment.getUsername()).isEqualTo("SA"); |
||||
} |
||||
|
||||
@Test |
||||
void getPasswordWhenHasMsSqlSaPassword() { |
||||
MsSqlServerEnvironment environment = new MsSqlServerEnvironment(Map.of("MSSQL_SA_PASSWORD", "secret")); |
||||
assertThat(environment.getPassword()).isEqualTo("secret"); |
||||
} |
||||
|
||||
@Test |
||||
void getPasswordWhenHasSaPassword() { |
||||
MsSqlServerEnvironment environment = new MsSqlServerEnvironment(Map.of("SA_PASSWORD", "secret")); |
||||
assertThat(environment.getPassword()).isEqualTo("secret"); |
||||
} |
||||
|
||||
@Test |
||||
void getPasswordWhenHasMsSqlSaPasswordAndSaPasswordPrefersMsSqlSaPassword() { |
||||
MsSqlServerEnvironment environment = new MsSqlServerEnvironment( |
||||
Map.of("MSSQL_SA_PASSWORD", "secret", "SA_PASSWORD", "not used")); |
||||
assertThat(environment.getPassword()).isEqualTo("secret"); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
/* |
||||
* Copyright 2012-2023 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver; |
||||
|
||||
import io.r2dbc.spi.ConnectionFactoryOptions; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; |
||||
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Integration tests for {@link MsSqlServerR2dbcDockerComposeConnectionDetailsFactory} |
||||
* |
||||
* @author Andy Wilkinson |
||||
*/ |
||||
class MsSqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests |
||||
extends AbstractDockerComposeIntegrationTests { |
||||
|
||||
MsSqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { |
||||
super("mssqlserver-compose.yaml"); |
||||
} |
||||
|
||||
@Test |
||||
void runCreatesConnectionDetails() { |
||||
R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); |
||||
ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); |
||||
assertThat(connectionFactoryOptions.toString()).contains("driver=mssql", "password=REDACTED", "user=SA"); |
||||
assertThat(connectionFactoryOptions.getRequiredValue(ConnectionFactoryOptions.PASSWORD)) |
||||
.isEqualTo("verYs3cret"); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
services: |
||||
database: |
||||
image: 'mcr.microsoft.com/mssql/server' |
||||
ports: |
||||
- '1433' |
||||
environment: |
||||
- 'MSSQL_SA_PASSWORD=verYs3cret' |
||||
- 'ACCEPT_EULA=yes' |
||||
Loading…
Reference in new issue