Skip to content

Commit fef5416

Browse files
author
meshkodiak[bot]
authored
Merge pull request #109 from meshcloud/feature/fix-nullable-planid-in-updates
fix: Nullable planId in ServiceInstance updates
2 parents b20ba0c + fc8561a commit fef5416

File tree

6 files changed

+96
-32
lines changed

6 files changed

+96
-32
lines changed

src/main/kotlin/io/meshcloud/dockerosb/model/ServiceInstance.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,17 @@ data class ServiceInstance(
3434
serviceDefinitionId = request.serviceDefinitionId
3535
)
3636

37-
constructor(request: UpdateServiceInstanceRequest) : this(
38-
serviceInstanceId = request.serviceInstanceId,
37+
fun update(request: UpdateServiceInstanceRequest): ServiceInstance {
38+
require(serviceInstanceId == request.serviceInstanceId)
39+
40+
return copy(
3941
asyncAccepted = request.isAsyncAccepted,
40-
context = request.context,
41-
originatingIdentity = request.originatingIdentity,
42-
parameters = request.parameters ?: mutableMapOf(),
43-
planId = request.planId,
44-
serviceDefinition = ServiceDefinition(request.serviceDefinition),
45-
serviceDefinitionId = request.serviceDefinitionId
42+
context = request.context ?: context,
43+
originatingIdentity = request.originatingIdentity ?: originatingIdentity,
44+
parameters = request.parameters ?: request.parameters,
45+
planId = request.planId ?: planId,
46+
serviceDefinition = request.serviceDefinition?.let { ServiceDefinition(it) } ?: serviceDefinition,
47+
serviceDefinitionId = request.serviceDefinitionId ?: serviceDefinitionId
4648
)
49+
}
4750
}

src/main/kotlin/io/meshcloud/dockerosb/service/GenericServiceInstanceService.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ class GenericServiceInstanceService(
4242
}
4343

4444
gitContextFactory.acquireContext().use { context ->
45-
val serviceInstance = ServiceInstance(request)
46-
4745
val repository = context.buildServiceInstanceRepository()
48-
repository.updateServiceInstance(serviceInstance)
46+
val existingInstance = repository.tryGetServiceInstance(request.serviceInstanceId)
47+
?: throw ServiceInstanceDoesNotExistException(request.serviceInstanceId)
48+
49+
val updatedInstance = existingInstance.update(request)
50+
repository.updateServiceInstance(updatedInstance)
4951

5052
return Mono.just(
5153
UpdateServiceInstanceResponse.builder()

src/test/kotlin/io/meshcloud/dockerosb/DockerOsbApplicationTests.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.meshcloud.dockerosb.scenario
2+
3+
import io.meshcloud.dockerosb.ServiceBrokerFixture
4+
import io.meshcloud.dockerosb.persistence.GitOperationContextFactory
5+
import io.meshcloud.dockerosb.persistence.ServiceInstanceRepository
6+
import org.junit.After
7+
import org.junit.Before
8+
import org.junit.runner.RunWith
9+
import org.springframework.beans.factory.annotation.Autowired
10+
import org.springframework.boot.test.context.SpringBootTest
11+
import org.springframework.test.context.ActiveProfiles
12+
import org.springframework.test.context.junit4.SpringRunner
13+
14+
@RunWith(SpringRunner::class)
15+
@SpringBootTest
16+
@ActiveProfiles("test")
17+
abstract class DockerOsbApplicationTests {
18+
19+
protected lateinit var fixture: ServiceBrokerFixture
20+
21+
@Autowired
22+
private lateinit var gitContextFactory: GitOperationContextFactory
23+
24+
@Before
25+
fun before() {
26+
fixture = ServiceBrokerFixture("src/test/resources/catalog.yml")
27+
}
28+
29+
@After
30+
fun cleanUp() {
31+
fixture.close()
32+
}
33+
34+
protected fun useServiceInstanceRepository(fn: (repository: ServiceInstanceRepository) -> Unit) {
35+
gitContextFactory.acquireContext().use {
36+
fn(it.buildServiceInstanceRepository())
37+
}
38+
}
39+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.meshcloud.dockerosb.scenario
2+
3+
import io.meshcloud.dockerosb.service.GenericServiceInstanceService
4+
import org.junit.Assert.*
5+
import org.junit.Test
6+
import org.springframework.beans.factory.annotation.Autowired
7+
8+
class UpdateServiceInstanceScenario : DockerOsbApplicationTests() {
9+
10+
@Autowired
11+
private lateinit var serviceInstanceService: GenericServiceInstanceService
12+
13+
@Test
14+
fun `update request with null plan id does update the service instance without the plan`() {
15+
val instanceId = "e4bd6a78-7e05-4d5a-97b8-f8c5d1c710da"
16+
val createRequest = fixture.builder.createServiceInstanceRequest(instanceId)
17+
serviceInstanceService.createServiceInstance(createRequest)
18+
19+
val createdPlanId = useServiceInstanceRepository { repository ->
20+
val instance = repository.tryGetServiceInstance(instanceId)
21+
instance!!.planId
22+
}
23+
24+
val updateRequestWithNullPlanId = fixture.builder.updateServiceInstanceRequest(instanceId) {
25+
planId(null)
26+
}
27+
28+
val response = serviceInstanceService.updateServiceInstance(updateRequestWithNullPlanId)
29+
30+
response.subscribe {
31+
assertEquals("updating service", it.operation)
32+
}
33+
34+
val updatedPlanId = useServiceInstanceRepository { repository ->
35+
val instance = repository.tryGetServiceInstance(instanceId)
36+
instance!!.planId
37+
}
38+
39+
assertEquals(createdPlanId, updatedPlanId)
40+
}
41+
}

src/test/kotlin/io/meshcloud/dockerosb/service/GenericServiceInstanceBindingServiceTest.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@ package io.meshcloud.dockerosb.service
33
import io.meshcloud.dockerosb.ServiceBrokerFixture
44
import io.meshcloud.dockerosb.model.ServiceBinding
55
import io.meshcloud.dockerosb.model.Status
6-
import org.apache.commons.io.FileUtils
76
import org.junit.After
87
import org.junit.Assert
98
import org.junit.Before
109
import org.junit.Test
1110
import org.springframework.cloud.servicebroker.exception.ServiceBrokerAsyncRequiredException
1211
import org.springframework.cloud.servicebroker.model.binding.GetLastServiceBindingOperationRequest
13-
import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceRequest
14-
import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationRequest
1512
import org.springframework.cloud.servicebroker.model.instance.OperationState
1613
import java.io.File
1714

0 commit comments

Comments
 (0)