diff --git a/core/src/main/kotlin/com/r3corda/core/node/services/ServiceInfo.kt b/core/src/main/kotlin/com/r3corda/core/node/services/ServiceInfo.kt index b4c821c6d1..c1797ab7dc 100644 --- a/core/src/main/kotlin/com/r3corda/core/node/services/ServiceInfo.kt +++ b/core/src/main/kotlin/com/r3corda/core/node/services/ServiceInfo.kt @@ -11,8 +11,10 @@ data class ServiceInfo(val type: ServiceType, val name: String? = null) { companion object { fun parse(encoded: String): ServiceInfo { val parts = encoded.split("|") - require(parts.size > 0 && parts.size <= 2) - return ServiceInfo(object : ServiceType(parts[0]) {}, parts[1]) + require(parts.size > 0 && parts.size <= 2) { "Invalid number of elements found" } + val type = object : ServiceType(parts[0]) {} + val name = parts.getOrNull(1) + return ServiceInfo(type, name) } } diff --git a/core/src/test/kotlin/com/r3corda/core/node/ServiceInfoTests.kt b/core/src/test/kotlin/com/r3corda/core/node/ServiceInfoTests.kt new file mode 100644 index 0000000000..25ea8de559 --- /dev/null +++ b/core/src/test/kotlin/com/r3corda/core/node/ServiceInfoTests.kt @@ -0,0 +1,37 @@ +package com.r3corda.core.node + +import com.r3corda.core.node.services.ServiceInfo +import com.r3corda.core.node.services.ServiceType +import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +class ServiceInfoTests { + val serviceType = object : ServiceType("corda.service.subservice") {} + val name = "service.name" + + @Test + fun `type and name encodes correctly`() { + assertEquals(ServiceInfo(serviceType, name).toString(), "$serviceType|$name") + } + + @Test + fun `type and name parses correctly`() { + assertEquals(ServiceInfo.parse("$serviceType|$name"), ServiceInfo(serviceType, name)) + } + + @Test + fun `type only encodes correctly`() { + assertEquals(ServiceInfo(serviceType).toString(), "$serviceType") + } + + @Test + fun `type only parses correctly`() { + assertEquals(ServiceInfo.parse("$serviceType"), ServiceInfo(serviceType)) + } + + @Test + fun `invalid encoding throws`() { + assertFailsWith { ServiceInfo.parse("$serviceType|$name|something") } + } +} \ No newline at end of file