16
16
package org.modelix.model.server.handlers
17
17
18
18
import io.ktor.client.request.get
19
+ import io.ktor.http.HttpStatusCode
19
20
import io.ktor.http.appendPathSegments
20
21
import io.ktor.http.takeFrom
21
22
import io.ktor.server.testing.ApplicationTestBuilder
@@ -34,20 +35,26 @@ import org.modelix.model.server.installDefaultServerPlugins
34
35
import org.modelix.model.server.store.InMemoryStoreClient
35
36
import org.modelix.model.server.store.LocalModelClient
36
37
import kotlin.test.Test
38
+ import kotlin.test.assertEquals
37
39
import kotlin.test.fail
38
40
39
41
class ModelReplicationServerTest {
40
42
41
- private fun runTest (block : suspend ApplicationTestBuilder .(scope: CoroutineScope ) -> Unit ) = testApplication {
43
+ private fun getDefaultModelReplicationServer (): ModelReplicationServer {
44
+ val storeClient = InMemoryStoreClient ()
45
+ val modelClient = LocalModelClient (storeClient)
46
+ val repositoriesManager = RepositoriesManager (modelClient)
47
+ return ModelReplicationServer (repositoriesManager, modelClient, InMemoryModels ())
48
+ }
49
+
50
+ private fun runTest (
51
+ modelReplicationServer : ModelReplicationServer = getDefaultModelReplicationServer(),
52
+ block : suspend ApplicationTestBuilder .(scope: CoroutineScope ) -> Unit ,
53
+ ) = testApplication {
42
54
application {
43
55
installAuthentication(unitTestMode = true )
44
56
installDefaultServerPlugins()
45
- val storeClient = InMemoryStoreClient ()
46
- val modelClient = LocalModelClient (storeClient)
47
- val repositoriesManager = RepositoriesManager (modelClient)
48
- val inMemoryModels = InMemoryModels ()
49
- ModelReplicationServer (repositoriesManager, modelClient, inMemoryModels).init (this )
50
- KeyValueLikeModelServer (repositoriesManager, storeClient, inMemoryModels).init (this )
57
+ modelReplicationServer.init (this )
51
58
}
52
59
53
60
coroutineScope {
@@ -92,4 +99,38 @@ class ModelReplicationServerTest {
92
99
}
93
100
}
94
101
}
102
+
103
+ @Test
104
+ fun `server responds with error when failing to compute delta before starting to respond` () {
105
+ // Arrange
106
+ val storeClient = InMemoryStoreClient ()
107
+ val modelClient = LocalModelClient (storeClient)
108
+ val repositoriesManager = RepositoriesManager (modelClient)
109
+ val faultyRepositoriesManager = object :
110
+ IRepositoriesManager by repositoriesManager {
111
+ override suspend fun computeDelta (versionHash : String , baseVersionHash : String? ): ObjectData {
112
+ error(" Unexpected error." )
113
+ }
114
+ }
115
+ val modelReplicationServer = ModelReplicationServer (faultyRepositoriesManager, modelClient, InMemoryModels ())
116
+ val url = " http://localhost/v2"
117
+ val repositoryId = RepositoryId (" repo1" )
118
+ val branchRef = repositoryId.getBranchReference()
119
+
120
+ runTest(modelReplicationServer) {
121
+ repositoriesManager.createRepository(repositoryId, null )
122
+
123
+ // Act
124
+ val response = client.get {
125
+ url {
126
+ takeFrom(url)
127
+ appendPathSegments(" repositories" , repositoryId.id, " branches" , branchRef.branchName)
128
+ }
129
+ useVersionStreamFormat()
130
+ }
131
+
132
+ // Assert
133
+ assertEquals(HttpStatusCode .InternalServerError , response.status)
134
+ }
135
+ }
95
136
}
0 commit comments