diff --git a/src/main/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributes.kt b/src/main/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributes.kt
index 396c1fb..c161036 100644
--- a/src/main/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributes.kt
+++ b/src/main/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributes.kt
@@ -35,7 +35,7 @@ import java.util.*
* Events without this attribute (or value is 0) MUST NOT timeout.
* @param token Oauth2 access token to perform the access request defined in the request message.
*/
-class UCloudEventAttributes private constructor(
+data class UCloudEventAttributes internal constructor(
private val hash: String? = null,
private val priority: UPriority? = null,
private val ttl: Int? = null,
@@ -101,111 +101,51 @@ class UCloudEventAttributes private constructor(
/**
* Builder for constructing the UCloudEventAttributes.
*/
- class UCloudEventAttributesBuilder {
- var hash: String? = null
- var priority: UPriority? = null
- var ttl: Int? = null
- var token: String? = null
- var traceparent: String? = null
-
+ class UCloudEventAttributesBuilder @PublishedApi internal constructor() {
/**
* add an HMAC generated on the data portion of the CloudEvent message using the device key.
- * @param hash an HMAC generated on the data portion of the CloudEvent message using the device key.
- * @return Returns the UCloudEventAttributesBuilder with the configured hash.
*/
- fun withHash(hash: String?): UCloudEventAttributesBuilder {
- this.hash = hash
- return this
- }
+ var hash: String? = null
/**
* add a uProtocol Prioritization classifications.
- * @param priority uProtocol Prioritization classifications.
- * @return Returns the UCloudEventAttributesBuilder with the configured priority.
*/
- fun withPriority(priority: UPriority?): UCloudEventAttributesBuilder {
- this.priority = priority
- return this
- }
+ var priority: UPriority? = null
/**
* add a time to live which is how long this event should live for after it was generated (in milliseconds).
* Events without this attribute (or value is 0) MUST NOT timeout.
- * @param ttl How long this event should live for after it was generated (in milliseconds).
- * Events without this attribute (or value is 0) MUST NOT timeout.
- * @return Returns the UCloudEventAttributesBuilder with the configured time to live.
*/
- fun withTtl(ttl: Int?): UCloudEventAttributesBuilder {
- this.ttl = ttl
- return this
- }
+ var ttl: Int? = null
/**
* Add an Oauth2 access token to perform the access request defined in the request message.
- * @param token An Oauth2 access token to perform the access request defined in the request message.
- * @return Returns the UCloudEventAttributesBuilder with the configured OAuth token.
*/
- fun withToken(token: String?): UCloudEventAttributesBuilder {
- this.token = token
- return this
- }
+ var token: String? = null
/**
* Add an identifier used to correlate observability across related events.
- * @param traceparent An identifier used to correlate observability across related events.
- * @return Returns the UCloudEventAttributesBuilder with the configured traceparent.
*/
- fun withTraceparent(traceparent: String?): UCloudEventAttributesBuilder {
- this.traceparent = traceparent
- return this
- }
+ var traceparent: String? = null
+
/**
* Construct the UCloudEventAttributes from the builder.
* @return Returns a constructed UProperty.
*/
- fun build(): UCloudEventAttributes {
+ @JvmSynthetic
+ @PublishedApi
+ internal fun build(): UCloudEventAttributes {
// validation if needed
return UCloudEventAttributes(this)
}
}
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other == null || javaClass !== other.javaClass) return false
- val that = other as UCloudEventAttributes
- return Objects.equals(hash, that.hash) && priority == that.priority && Objects.equals(
- ttl,
- that.ttl
- ) && Objects.equals(token, that.token) && Objects.equals(traceparent, that.traceparent)
- }
-
- override fun hashCode(): Int {
- return Objects.hash(hash, priority, ttl, token, traceparent)
- }
-
- override fun toString(): String {
- val traceParentString = traceparent?.let { ", traceparent='$it'" }?:""
- return "UCloudEventAttributes{" +
- "hash='" + hash + '\'' +
- ", priority=" + priority +
- ", ttl=" + ttl +
- ", token='" + token + '\'' +
- traceParentString +
- '}'
- }
-
companion object {
- private val EMPTY = UCloudEventAttributes(null, null, null, null)
+ val EMPTY = UCloudEventAttributes()
- /**
- * Static factory method for creating an empty cloud event attributes object, to avoid working with null
- * @return Returns an empty cloud event attributes that indicates
- * that there are no added additional attributes to configure.
- */
- fun empty(): UCloudEventAttributes {
- return EMPTY
- }
+ @JvmName("-initializeUCloudEventAttributes")
+ inline fun uCloudEventAttributes(block: UCloudEventAttributesBuilder.() -> Unit) =
+ UCloudEventAttributesBuilder().apply(block).build()
}
}
diff --git a/src/main/kotlin/org/eclipse/uprotocol/rpc/CallOptions.kt b/src/main/kotlin/org/eclipse/uprotocol/rpc/CallOptions.kt
index 632089b..5cc7515 100644
--- a/src/main/kotlin/org/eclipse/uprotocol/rpc/CallOptions.kt
+++ b/src/main/kotlin/org/eclipse/uprotocol/rpc/CallOptions.kt
@@ -24,114 +24,66 @@
package org.eclipse.uprotocol.rpc
-import java.util.Objects
-import java.util.Optional
-
/**
* This class is used when making uRPC calls to pass additional options. Copied from Misha's class.
+ * @property timeout a timeout in milliseconds
+ * @property token An optional OAuth2 access token
*/
-class CallOptions private constructor(private val mTimeout: Int, token: String?) {
- private val mToken: String
-
- private constructor(builder: Builder) : this(builder.mTimeout, builder.mToken)
-
- init {
- mToken = token ?: ""
- }
-
- /**
- * Get a timeout.
- *
- * @return A timeout in milliseconds.
- */
- fun timeout(): Int {
- return mTimeout
- }
-
- /**
- * Get an OAuth2 access token.
- *
- * @return An Optional OAuth2 access token.
- */
- fun token(): Optional {
- return if (mToken.isBlank()) Optional.empty() else Optional.of(mToken)
- }
+data class CallOptions internal constructor(
+ val timeout: Int = TIMEOUT_DEFAULT,
+ val token: String = TOKEN_DEFAULT
+) {
+ private constructor(builder: Builder) : this(builder.timeout, builder.token)
/**
* Builder for constructing `CallOptions`.
+ * @property timeout a timeout in milliseconds
+ * @property token an OAuth2 access token
*/
- class Builder {
- var mTimeout = TIMEOUT_DEFAULT
- var mToken = ""
-
- /**
- * Add a timeout.
- *
- * @param timeout A timeout in milliseconds.
- * @return This builder.
- */
- fun withTimeout(timeout: Int): Builder {
- mTimeout = if (timeout <= 0) TIMEOUT_DEFAULT else timeout
- return this
- }
-
- /**
- * Add an OAuth2 access token.
- *
- * @param token An OAuth2 access token.
- * @return This builder.
- */
- fun withToken(token: String): Builder {
- mToken = token
- return this
- }
+ class Builder @PublishedApi internal constructor() {
+ var timeout = TIMEOUT_DEFAULT
+ set(value) {
+ field = value.takeIf { it >= 0 } ?: TIMEOUT_DEFAULT
+ }
+ var token = TOKEN_DEFAULT
+ set(value) {
+ field = value.ifBlank { TOKEN_DEFAULT }
+ }
/**
* Construct a `CallOptions` from this builder.
*
* @return A constructed `CallOptions`.
*/
- fun build(): CallOptions {
+ @JvmSynthetic
+ @PublishedApi
+ internal fun build(): CallOptions {
return CallOptions(this)
}
}
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other == null || javaClass !== other.javaClass) return false
- val that = other as CallOptions
- return mTimeout == that.mTimeout && Objects.equals(mToken, that.mToken)
- }
-
- override fun hashCode(): Int {
- return Objects.hash(mTimeout, mToken)
- }
-
- override fun toString(): String {
- return "CallOptions{" +
- "mTimeout=" + mTimeout +
- ", mToken='" + mToken + '\'' +
- '}'
- }
-
companion object {
/**
* Default timeout of a call in milliseconds.
*/
const val TIMEOUT_DEFAULT = 10000
+ /**
+ * Default token.
+ */
+ const val TOKEN_DEFAULT = ""
+
/**
* Default instance.
*/
- val DEFAULT = CallOptions(TIMEOUT_DEFAULT, "")
+ val DEFAULT = CallOptions(TIMEOUT_DEFAULT, TOKEN_DEFAULT)
/**
* Constructs a new builder.
*
* @return A builder.
*/
- fun newBuilder(): Builder {
- return Builder()
- }
+ @JvmName("-initializeCallOptions")
+ inline fun callOptions(block: Builder.() -> Unit) = Builder().apply(block).build()
}
}
diff --git a/src/main/kotlin/org/eclipse/uprotocol/transport/UPayloadExt.kt b/src/main/kotlin/org/eclipse/uprotocol/transport/UPayloadExt.kt
new file mode 100644
index 0000000..1ef8839
--- /dev/null
+++ b/src/main/kotlin/org/eclipse/uprotocol/transport/UPayloadExt.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2024 General Motors GTO LLC
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * http://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.
+ * SPDX-FileType: SOURCE
+ * SPDX-FileCopyrightText: 2023 General Motors GTO LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+package org.eclipse.uprotocol.transport
+
+import com.google.protobuf.Any
+import com.google.protobuf.Internal
+import com.google.protobuf.InvalidProtocolBufferException
+import com.google.protobuf.Message
+import org.eclipse.uprotocol.v1.UPayload
+import org.eclipse.uprotocol.v1.UPayloadFormat
+
+
+/**
+ * Unpack a uPayload into a google.protobuf.Message.
+ *
+ * @param payload the payload to unpack
+ * @param clazz the class of the message to unpack
+ * @return the unpacked message
+ */
+@Suppress("UNCHECKED_CAST")
+fun unpack(payload: UPayload, clazz: Class): T? {
+ return try {
+ when (payload.format) {
+ UPayloadFormat.UNRECOGNIZED, UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY -> {
+ Any.parseFrom(payload.value).unpack(clazz)
+ }
+
+ UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF -> {
+ val defaultInstance = Internal.getDefaultInstance(clazz)
+ defaultInstance.parserForType.parseFrom(payload.value) as T
+ }
+
+ else -> null
+ }
+ } catch (e: InvalidProtocolBufferException) {
+ null
+ }
+}
+
+/**
+ * Inline function to unpack a uPayload into a google.protobuf.Message.
+ *
+ * @return the unpacked message
+ */
+inline fun UPayload.unpack(): T? {
+ return unpack(this, T::class.java)
+}
+
diff --git a/src/main/kotlin/org/eclipse/uprotocol/transport/builder/UAttributesBuilder.kt b/src/main/kotlin/org/eclipse/uprotocol/transport/builder/UAttributesBuilder.kt
deleted file mode 100644
index d37f7b6..0000000
--- a/src/main/kotlin/org/eclipse/uprotocol/transport/builder/UAttributesBuilder.kt
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2024 General Motors GTO LLC
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * http://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.
- * SPDX-FileType: SOURCE
- * SPDX-FileCopyrightText: 2023 General Motors GTO LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.eclipse.uprotocol.transport.builder
-
-import org.eclipse.uprotocol.uuid.factory.UUIDV8
-import org.eclipse.uprotocol.v1.*
-
-/**
- * Builder for easy construction of the UAttributes object.
- */
-class UAttributesBuilder
-/**
- * Construct the UAttributesBuilder with the configurations that are required for every payload transport.
- *
- * @param source Source address of the message.
- * @param uuid Unique identifier for the message.
- * @param messageType Message type such as Publish a state change, RPC request or RPC response.
- * @param uPriority uProtocol Prioritization classifications.
- */ private constructor(
- private val source: UUri,
- private val uuid: UUID,
- private val messageType: UMessageType,
- private val uPriority: UPriority
-) {
- private var timeToLive: Int? = null
- private var tokenAttr: String? = null
- private var sinkUUri: UUri? = null
- private var plevel: Int? = null
- private var commStatus: Int? = null
- private var reqId: UUID? = null
- private var traceparentAttr: String? = null
-
- /**
- * Add the time to live in milliseconds.
- *
- * @param ttl the time to live in milliseconds.
- * @return Returns the UAttributesBuilder with the configured ttl.
- */
- fun withTtl(ttl: Int?): UAttributesBuilder {
- timeToLive = ttl
- return this
- }
-
- /**
- * Add the authorization token used for TAP.
- *
- * @param token the authorization token used for TAP.
- * @return Returns the UAttributesBuilder with the configured token.
- */
- fun withToken(token: String?): UAttributesBuilder {
- tokenAttr = token
- return this
- }
-
- /**
- * Add the explicit destination URI.
- *
- * @param sink the explicit destination URI.
- * @return Returns the UAttributesBuilder with the configured sink.
- */
- fun withSink(sink: UUri?): UAttributesBuilder {
- sinkUUri = sink
- return this
- }
-
- /**
- * Add the permission level of the message.
- *
- * @param plevel the permission level of the message.
- * @return Returns the UAttributesBuilder with the configured plevel.
- */
- fun withPermissionLevel(plevel: Int?): UAttributesBuilder {
- this.plevel = plevel
- return this
- }
-
- /**
- * Add the communication status of the message.
- *
- * @param commstatus the communication status of the message.
- * @return Returns the UAttributesBuilder with the configured commstatus.
- */
- fun withCommStatus(commstatus: Int?): UAttributesBuilder {
- commStatus = commstatus
- return this
- }
-
- /**
- * Add the request ID.
- *
- * @param reqid the request ID.
- * @return Returns the UAttributesBuilder with the configured reqid.
- */
- fun withReqId(reqid: UUID?): UAttributesBuilder {
- reqId = reqid
- return this
- }
-
- /**
- * Add the traceparent.
- *
- * @param traceparent the trace parent.
- * @return Returns the UAttributesBuilder with the configured traceparent.
- */
- fun withTraceparent(traceparent: String): UAttributesBuilder {
- this.traceparentAttr = traceparent
- return this
- }
-
- /**
- * Construct the UAttributes from the builder.
- *
- * @return Returns a constructed
- */
- fun build(): UAttributes {
- return uAttributes {
- id = uuid
- type = messageType
- priority = uPriority
- sinkUUri?.let { sink = it }
- timeToLive?.let { ttl = it }
- plevel?.let { permissionLevel = it }
- commStatus?.let { commstatus = it }
- reqId?.let { reqid = it }
- tokenAttr?.let { token = it }
- traceparentAttr?.let { traceparent = it }
- }
- }
-
- companion object {
- /**
- * Construct a UAttributesBuilder for a publish message.
- * @param source Source address of the message.
- * @param priority The priority of the message.
- * @return Returns the UAttributesBuilder with the configured priority.
- */
- fun publish(source: UUri, priority: UPriority): UAttributesBuilder {
- return UAttributesBuilder(
- source,
- UUIDV8(),
- UMessageType.UMESSAGE_TYPE_PUBLISH, priority
- )
- }
-
- /**
- * Construct a UAttributesBuilder for a notification message.
- * @param source Source address of the message.
- * @param sink The destination URI.
- * @param priority The priority of the message.
- * @return Returns the UAttributesBuilder with the configured priority and sink.
- */
- fun notification(source: UUri, sink: UUri, priority: UPriority): UAttributesBuilder {
- return UAttributesBuilder(
- source,
- UUIDV8(),
- UMessageType.UMESSAGE_TYPE_PUBLISH, priority
- ).withSink(sink)
- }
-
- /**
- * Construct a UAttributesBuilder for a request message.
- * @param source Source address of the message.
- * @param sink The destination URI.
- * @param priority The priority of the message.
- * @param ttl The time to live in milliseconds.
- * @return Returns the UAttributesBuilder with the configured priority, sink and ttl.
- */
- fun request(source: UUri, sink: UUri, priority: UPriority, ttl: Int): UAttributesBuilder {
- return UAttributesBuilder(
- source,
- UUIDV8(),
- UMessageType.UMESSAGE_TYPE_REQUEST, priority
- ).withTtl(ttl).withSink(sink)
- }
-
- /**
- * Construct a UAttributesBuilder for a response message.
- * @param source Source address of the message.
- * @param sink The destination URI.
- * @param priority The priority of the message.
- * @param reqid The original request UUID used to correlate the response to the request.
- * @return Returns the UAttributesBuilder with the configured priority, sink and reqid.
- */
- fun response(source: UUri, sink: UUri, priority: UPriority, reqid: UUID): UAttributesBuilder {
- return UAttributesBuilder(
- source,
- UUIDV8(),
- UMessageType.UMESSAGE_TYPE_RESPONSE, priority
- ).withSink(sink).withReqId(reqid)
- }
- }
-}
diff --git a/src/main/kotlin/org/eclipse/uprotocol/transport/builder/UPayloadBuilder.kt b/src/main/kotlin/org/eclipse/uprotocol/transport/builder/UPayloadBuilder.kt
deleted file mode 100644
index b245877..0000000
--- a/src/main/kotlin/org/eclipse/uprotocol/transport/builder/UPayloadBuilder.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2024 General Motors GTO LLC
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * http://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.
- * SPDX-FileType: SOURCE
- * SPDX-FileCopyrightText: 2023 General Motors GTO LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-package org.eclipse.uprotocol.transport.builder
-
-import com.google.protobuf.Any
-import com.google.protobuf.Internal
-import com.google.protobuf.InvalidProtocolBufferException
-import com.google.protobuf.Message
-import org.eclipse.uprotocol.v1.UPayload
-import org.eclipse.uprotocol.v1.UPayloadFormat
-import org.eclipse.uprotocol.v1.uPayload
-
-
-object UPayloadBuilder {
- /**
- * Build a uPayload from google.protobuf.Message by stuffing the message into an Any.
- *
- * @param message the message to pack
- * @return the UPayload
- */
- fun packToAny(message: Message): UPayload {
- return uPayload {
- format = UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY
- value = Any.pack(message).toByteString()
- }
- }
-
- /**
- * Build a uPayload from google.protobuf.Message using protobuf PayloadFormat.
- *
- * @param message the message to pack
- * @return the UPayload
- */
- fun pack(message: Message): UPayload =
- uPayload {
- format = UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF
- value = message.toByteString()
- }
-
- /**
- * Unpack a uPayload into a google.protobuf.Message.
- *
- * @param payload the payload to unpack
- * @param clazz the class of the message to unpack
- * @return the unpacked message
- */
- @Suppress("UNCHECKED_CAST")
- fun unpack(payload: UPayload, clazz: Class): T? {
- if (payload.value == null) {
- return null
- }
- return try {
- when (payload.format) {
- UPayloadFormat.UNRECOGNIZED, UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY -> {
- Any.parseFrom(payload.value).unpack(clazz)
- }
- UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF -> {
- val defaultInstance = Internal.getDefaultInstance(clazz)
- defaultInstance.parserForType.parseFrom(payload.value) as T
- }
- else -> null
- }
- } catch (e: InvalidProtocolBufferException) {
- null
- }
- }
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactory.kt b/src/main/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactory.kt
deleted file mode 100644
index db4aa5e..0000000
--- a/src/main/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactory.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2024 General Motors GTO LLC
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * http://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.
- * SPDX-FileType: SOURCE
- * SPDX-FileCopyrightText: 2023 General Motors GTO LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.eclipse.uprotocol.uri.factory
-
-import com.google.protobuf.ProtocolMessageEnum
-import org.eclipse.uprotocol.v1.UResource
-import org.eclipse.uprotocol.v1.uResource
-
-object UResourceFactory {
- private const val MAX_RPC_ID = 1000
-
- /**
- * Create a UResource for an RPC response.
- * @return Returns a UResource for an RPC response.
- */
- fun createForRpcResponse(): UResource {
-
- return uResource {
- name = "rpc"
- instance = "response"
- id = 0
- }
- }
-
- /**
- * Create a UResource for an RPC request with at least an ID or a method name
- * @param method The method to be invoked.
- * @param id The ID of the request.
- * @return Returns a UResource for an RPC request.
- */
- fun createForRpcRequest(method: String? = null, id: Int? = null): UResource {
- return uResource {
- name = "rpc"
- if (method != null) instance = method
- if (id != null) this.id = id
- }
- }
-
- /**
- * Create a UResource from an ID. This method will determine if
- * the id is an RPC or topic ID based on the range
- * @param id The ID of the request.
- * @return Returns a UResource for an RPC request.
- */
- fun from(id: Int): UResource {
- return if (id < MAX_RPC_ID) createForRpcRequest(id = id) else uResource { this.id = id }
- }
-
- /**
- * Build a UResource from a protobuf message. This method will determine if
- * the message is a RPC or topic message based on the message type
- * @param message The protobuf message.
- * @return Returns a UResource for an RPC request.
- */
- fun from(message: ProtocolMessageEnum): UResource {
- return uResource {
- message.descriptorForType.containingType.name?.let { name = it }
- message.valueDescriptor.name?.let { instance = it }
- id = message.number
- }
- }
-
-}
diff --git a/src/main/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializer.kt b/src/main/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializer.kt
index b5b57e8..e63e7c6 100644
--- a/src/main/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializer.kt
+++ b/src/main/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializer.kt
@@ -25,7 +25,6 @@
package org.eclipse.uprotocol.uri.serializer
import com.google.protobuf.ByteString
-import org.eclipse.uprotocol.uri.factory.UResourceFactory
import org.eclipse.uprotocol.uri.validator.isEmpty
import org.eclipse.uprotocol.uri.validator.isMicroForm
import org.eclipse.uprotocol.v1.*
@@ -194,7 +193,9 @@ class MicroUriSerializer private constructor() : UriSerializer {
id = ueId
versionMajor = uiVersion
}
- resource = UResourceFactory.from(uResourceId)
+ resource = uResource{
+ from(uResourceId)
+ }
uAuthority?.let { authority = it }
}
}
diff --git a/src/main/kotlin/org/eclipse/uprotocol/v1/UAttributesKtExt.kt b/src/main/kotlin/org/eclipse/uprotocol/v1/UAttributesKtExt.kt
new file mode 100644
index 0000000..475b0a8
--- /dev/null
+++ b/src/main/kotlin/org/eclipse/uprotocol/v1/UAttributesKtExt.kt
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2024 General Motors GTO LLC
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * http://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.
+ * SPDX-FileType: SOURCE
+ * SPDX-FileCopyrightText: 2024 General Motors GTO LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.eclipse.uprotocol.v1
+
+import org.eclipse.uprotocol.uuid.factory.UUIDV8
+
+/**
+ * Construct a UAttributesBuilder for a publish message.
+ * @param source Source address of the message.
+ * @param priority The priority of the message.
+ * @return Returns the UAttributesBuilder with the configured source and priority.
+ */
+@JvmSynthetic
+fun UAttributesKt.Dsl.forPublication(source: UUri, priority: UPriority) {
+ this@forPublication.source = source
+ this@forPublication.priority = priority
+ id = UUIDV8()
+ type = UMessageType.UMESSAGE_TYPE_PUBLISH
+}
+
+/**
+ * Construct a UAttributesBuilder for a notification message.
+ * @param source Source address of the message.
+ * @param sink The destination URI.
+ * @param priority The priority of the message.
+ * @return Returns the UAttributesBuilder with the configured source, sink and priority.
+ */
+@JvmSynthetic
+fun UAttributesKt.Dsl.forNotification(source: UUri, sink: UUri, priority: UPriority) {
+ this@forNotification.source = source
+ this@forNotification.sink = sink
+ this@forNotification.priority = priority
+ id = UUIDV8()
+ type = UMessageType.UMESSAGE_TYPE_PUBLISH
+}
+
+/**
+ * Construct a UAttributesBuilder for a request message.
+ * @param source Source address of the message.
+ * @param sink The destination URI.
+ * @param priority The priority of the message.
+ * @param ttl The time to live in milliseconds.
+ * @return Returns the UAttributesBuilder with the configured source, sink, priority and ttl.
+ */
+@JvmSynthetic
+fun UAttributesKt.Dsl.forRequest(source: UUri, sink: UUri, priority: UPriority, ttl: Int) {
+ this@forRequest.source = source
+ this@forRequest.sink = sink
+ this@forRequest.priority = priority
+ this@forRequest.ttl = ttl
+ id = UUIDV8()
+ type = UMessageType.UMESSAGE_TYPE_REQUEST
+}
+
+/**
+ * Construct a UAttributesBuilder for a response message.
+ * @param source Source address of the message.
+ * @param sink The destination URI.
+ * @param priority The priority of the message.
+ * @param reqId The original request UUID used to correlate the response to the request.
+ * @return Returns the UAttributesBuilder with the configured source, sink, priority and reqid.
+ */
+@JvmSynthetic
+fun UAttributesKt.Dsl.forResponse(source: UUri, sink: UUri, priority: UPriority, reqId: UUID) {
+ this@forResponse.source = source
+ this@forResponse.sink = sink
+ this@forResponse.priority = priority
+ id = UUIDV8()
+ type = UMessageType.UMESSAGE_TYPE_RESPONSE
+ reqid = reqId
+}
\ No newline at end of file
diff --git a/src/main/kotlin/org/eclipse/uprotocol/v1/UPayloadKtExt.kt b/src/main/kotlin/org/eclipse/uprotocol/v1/UPayloadKtExt.kt
new file mode 100644
index 0000000..0eb0c65
--- /dev/null
+++ b/src/main/kotlin/org/eclipse/uprotocol/v1/UPayloadKtExt.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2024 General Motors GTO LLC
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * http://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.
+ * SPDX-FileType: SOURCE
+ * SPDX-FileCopyrightText: 2024 General Motors GTO LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.eclipse.uprotocol.v1
+
+import com.google.protobuf.Any
+import com.google.protobuf.Message
+
+/**
+ * Construct a UPayloadBuilder to pack google.protobuf.Message by stuffing the message into an Any.
+ * @param message the message to pack
+ * @return Returns the UPayloadBuilder with the configured format and value.
+ */
+@JvmSynthetic
+fun UPayloadKt.Dsl.packToAny(message: Message) {
+ format = UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY
+ value = Any.pack(message).toByteString()
+}
+
+/**
+ * Construct a UPayloadBuilder to pack google.protobuf.Message using protobuf PayloadFormat.
+ * @param message the message to pack
+ * @return Returns the UPayloadBuilder with the configured format and value.
+ */
+@JvmSynthetic
+fun UPayloadKt.Dsl.pack(message: Message) {
+ format = UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF
+ value = message.toByteString()
+}
\ No newline at end of file
diff --git a/src/main/kotlin/org/eclipse/uprotocol/v1/UResourceKtExt.kt b/src/main/kotlin/org/eclipse/uprotocol/v1/UResourceKtExt.kt
new file mode 100644
index 0000000..df74bb2
--- /dev/null
+++ b/src/main/kotlin/org/eclipse/uprotocol/v1/UResourceKtExt.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2024 General Motors GTO LLC
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * http://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.
+ * SPDX-FileType: SOURCE
+ * SPDX-FileCopyrightText: 2024 General Motors GTO LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+package org.eclipse.uprotocol.v1
+
+import com.google.protobuf.ProtocolMessageEnum
+
+private val MAX_RPC_ID: Int
+ @JvmSynthetic get() = 1000
+
+/**
+ * Initializes a UResource for an RPC response.
+ */
+@JvmSynthetic
+fun UResourceKt.Dsl.forRpcResponse() {
+ name = "rpc"
+ instance = "response"
+ id = 0
+}
+
+/**
+ * Initializes a UResource for an RPC request with an ID and/or a method name
+ * @param method The method to be invoked.
+ * @param id The ID of the request.
+ */
+@JvmSynthetic
+fun UResourceKt.Dsl.forRpcRequest(method: String = instance, id: Int = this@forRpcRequest.id) {
+ name = "rpc"
+ if (method != instance) {
+ instance = method
+ }
+ if (id != this@forRpcRequest.id) {
+ this@forRpcRequest.id = id
+ }
+}
+
+/**
+ * Initializes a UResource from an ID. This method will determine if
+ * the id is an RPC or topic ID based on the range
+ * @param id The ID of the request.
+ */
+@JvmSynthetic
+fun UResourceKt.Dsl.from(id: Int) {
+ if (id < MAX_RPC_ID) forRpcRequest(id = id) else this@from.id = id
+}
+
+/**
+ * Initializes a UResource from a protobuf message. This method will determine if
+ * the message is a RPC or topic message based on the message type
+ * @param message The protobuf message.
+ */
+@JvmSynthetic
+fun UResourceKt.Dsl.from(message: ProtocolMessageEnum) {
+ message.descriptorForType.containingType.name?.let { name = it }
+ message.valueDescriptor.name?.let { instance = it }
+ id = message.number
+}
diff --git a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributesTest.kt b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributesTest.kt
index 6de80d6..94b2701 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributesTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/datamodel/UCloudEventAttributesTest.kt
@@ -21,7 +21,7 @@
package org.eclipse.uprotocol.cloudevent.datamodel
import nl.jqno.equalsverifier.EqualsVerifier
-import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes.UCloudEventAttributesBuilder
+import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes.Companion.uCloudEventAttributes
import org.eclipse.uprotocol.v1.UPriority
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.DisplayName
@@ -37,41 +37,27 @@ internal class UCloudEventAttributesTest {
@Test
@DisplayName("Make sure the default toString works")
fun testToString() {
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1)
- .withTtl(3)
- .withToken("someOAuthToken")
- .build()
- val expected = "UCloudEventAttributes{hash='somehash', priority=UPRIORITY_CS1, ttl=3, token='someOAuthToken'}"
- assertEquals(expected, uCloudEventAttributes.toString())
- }
-
-
- @Test
- @DisplayName("Make sure the toString works when all properties are filled")
- fun testToStringComplete() {
- val uCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1)
- .withTtl(3)
- .withToken("someOAuthToken")
- .withTraceparent("darthvader")
- .build()
- val expected =
- "UCloudEventAttributes{hash='somehash', priority=UPRIORITY_CS1, ttl=3, token='someOAuthToken', traceparent='darthvader'}"
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ traceparent = "someTraceparent"
+ }
+ val expected = "UCloudEventAttributes(hash=somehash, priority=UPRIORITY_CS1, ttl=3, token=someOAuthToken, traceparent=someTraceparent)"
assertEquals(expected, uCloudEventAttributes.toString())
}
@Test
@DisplayName("Test creating a valid attributes object")
fun test_create_valid() {
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS6)
- .withTtl(3)
- .withToken("someOAuthToken")
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS6
+ ttl = 3
+ token = "someOAuthToken"
+ traceparent = "someTraceparent"
+ }
assertTrue(uCloudEventAttributes.hash().isPresent)
assertEquals("somehash", uCloudEventAttributes.hash().get())
assertTrue(uCloudEventAttributes.priority().isPresent)
@@ -80,26 +66,29 @@ internal class UCloudEventAttributesTest {
assertEquals(3, uCloudEventAttributes.ttl().get())
assertTrue(uCloudEventAttributes.token().isPresent)
assertEquals("someOAuthToken", uCloudEventAttributes.token().get())
+ assertTrue(uCloudEventAttributes.traceparent().isPresent)
+ assertEquals("someTraceparent", uCloudEventAttributes.traceparent().get())
}
@Test
@DisplayName("Test the isEmpty function")
fun test_Isempty_function() {
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributes.empty()
+ val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributes.EMPTY
assertTrue(uCloudEventAttributes.isEmpty)
assertTrue(uCloudEventAttributes.hash().isEmpty)
assertTrue(uCloudEventAttributes.priority().isEmpty)
assertTrue(uCloudEventAttributes.token().isEmpty)
assertTrue(uCloudEventAttributes.ttl().isEmpty)
+ assertTrue(uCloudEventAttributes.traceparent().isEmpty)
}
@Test
@DisplayName("Test the isEmpty when built with blank strings function")
fun test_Isempty_function_when_built_with_blank_strings() {
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash(" ")
- .withToken(" ")
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = " "
+ token = " "
+ }
assertTrue(uCloudEventAttributes.isEmpty)
assertTrue(uCloudEventAttributes.hash().isEmpty)
assertTrue(uCloudEventAttributes.priority().isEmpty)
@@ -110,28 +99,28 @@ internal class UCloudEventAttributesTest {
@Test
@DisplayName("Test the isEmpty permutations")
fun test_Isempty_function_permutations() {
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash(" ")
- .withToken(" ")
- .build()
+ val uCloudEventAttributes= uCloudEventAttributes {
+ hash = " "
+ token = " "
+ }
assertTrue(uCloudEventAttributes.isEmpty)
- val uCloudEventAttributes2: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash("someHash")
- .withToken(" ")
- .build()
+ val uCloudEventAttributes2 = uCloudEventAttributes {
+ hash = "someHash"
+ token = " "
+ }
assertFalse(uCloudEventAttributes2.isEmpty)
- val uCloudEventAttributes3: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withHash(" ")
- .withToken("SomeToken")
- .build()
+ val uCloudEventAttributes3 = uCloudEventAttributes {
+ hash = " "
+ token = "SomeToken"
+ }
assertFalse(uCloudEventAttributes3.isEmpty)
- val uCloudEventAttributes4: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withPriority(UPriority.UPRIORITY_CS0)
- .build()
+ val uCloudEventAttributes4 = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS0
+ }
assertFalse(uCloudEventAttributes4.isEmpty)
- val uCloudEventAttributes5: UCloudEventAttributes = UCloudEventAttributesBuilder()
- .withTtl(8)
- .build()
+ val uCloudEventAttributes5 = uCloudEventAttributes {
+ ttl = 8
+ }
assertFalse(uCloudEventAttributes5.isEmpty)
}
}
\ No newline at end of file
diff --git a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/CloudEventFactoryTest.kt b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/CloudEventFactoryTest.kt
index e21f0e6..2d91136 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/CloudEventFactoryTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/CloudEventFactoryTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 General Motors GTO LLC
+ * Copyright (c) 2024 General Motors GTO LLC
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -24,6 +24,7 @@ import com.google.protobuf.Any
import io.cloudevents.CloudEvent
import io.cloudevents.core.builder.CloudEventBuilder
import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes
+import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes.Companion.uCloudEventAttributes
import org.eclipse.uprotocol.uri.serializer.LongUriSerializer
import org.eclipse.uprotocol.v1.*
import org.junit.jupiter.api.Assertions.*
@@ -42,10 +43,12 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1).withTtl(3).withToken("someOAuthToken").build()
-
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ }
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
"testme", source, protoPayload.toByteArray(), protoPayload.typeUrl, uCloudEventAttributes
@@ -73,9 +76,12 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1).withTtl(3).withToken("someOAuthToken").build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ }
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
@@ -111,7 +117,7 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// no additional attributes
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributes.empty()
+ val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributes.EMPTY
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
@@ -141,9 +147,11 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1).withTtl(3).build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ }
val cloudEvent: CloudEvent = CloudEventFactory.publish(source, protoPayload, uCloudEventAttributes)
assertEquals("1.0", cloudEvent.specVersion.toString())
assertNotNull(cloudEvent.id)
@@ -170,10 +178,11 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS2).withTtl(3).build()
-
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
// build the cloud event of type publish with destination - a notification
val cloudEvent: CloudEvent = CloudEventFactory.notification(source, sink, protoPayload, uCloudEventAttributes)
assertEquals("1.0", cloudEvent.specVersion.toString())
@@ -202,9 +211,12 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS2).withTtl(3).withToken("someOAuthToken").build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ token = "someOAuthToken"
+ }
val cloudEvent: CloudEvent = CloudEventFactory.request(
applicationUriForRPC, serviceMethodUri, protoPayload, uCloudEventAttributes
)
@@ -235,9 +247,11 @@ internal class CloudEventFactoryTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS2).withTtl(3).build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
val cloudEvent: CloudEvent = CloudEventFactory.response(
applicationUriForRPC,
serviceMethodUri,
@@ -269,9 +283,11 @@ internal class CloudEventFactoryTest {
val serviceMethodUri = buildUriForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS2).withTtl(3).build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
val cloudEvent: CloudEvent = CloudEventFactory.failedResponse(
applicationUriForRPC,
serviceMethodUri,
@@ -304,9 +320,11 @@ internal class CloudEventFactoryTest {
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS2).withTtl(3).build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
val cloudEvent: CloudEvent = CloudEventFactory.failedResponse(
applicationUriForRPC,
serviceMethodUri,
diff --git a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/UCloudEventTest.kt b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/UCloudEventTest.kt
index 1200f1e..983f904 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/UCloudEventTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/factory/UCloudEventTest.kt
@@ -25,7 +25,7 @@ import com.google.protobuf.InvalidProtocolBufferException
import io.cloudevents.CloudEvent
import io.cloudevents.CloudEventData
import io.cloudevents.core.builder.CloudEventBuilder
-import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes
+import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes.Companion.uCloudEventAttributes
import org.eclipse.uprotocol.uri.serializer.LongUriSerializer
import org.eclipse.uprotocol.uuid.factory.UUIDV8
import org.eclipse.uprotocol.uuid.serializer.LongUuidSerializer
@@ -623,9 +623,10 @@ internal class UCloudEventTest {
@Test
fun test_to_message_with_valid_event() {
// Additional attributes
- val uCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(UPriority.UPRIORITY_CS2).withTtl(3)
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
// CloudEvent
val cloudEvent = CloudEventFactory.publish(
@@ -639,9 +640,10 @@ internal class UCloudEventTest {
@Test
fun test_from_message_with_valid_message() {
// Additional attributes
- val uCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(UPriority.UPRIORITY_CS2).withTtl(3)
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
// CloudEvent
val cloudEvent = CloudEventFactory.publish(
@@ -658,11 +660,12 @@ internal class UCloudEventTest {
@Test
fun test_to_from_message_from_request_cloudevent() {
// Additional attributes
- val uCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(UPriority.UPRIORITY_CS2)
- .withToken("someOAuthToken").withTtl(3)
- .withTraceparent("someTraceparent")
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ token = "someOAuthToken"
+ traceparent = "someTraceparent"
+ }
// CloudEvent
val cloudEvent = CloudEventFactory.request(
@@ -701,7 +704,7 @@ internal class UCloudEventTest {
@Test
fun test_to_from_message_from_request_cloudevent_without_attributes() {
// Additional attributes
- val uCloudEventAttributes = UCloudEventAttributes.UCloudEventAttributesBuilder().build()
+ val uCloudEventAttributes = uCloudEventAttributes { }
// CloudEvent
val cloudEvent = CloudEventFactory.request(
@@ -729,9 +732,10 @@ internal class UCloudEventTest {
@Test
fun test_to_from_message_from_response_cloudevent() {
// Additional attributes
- val uCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(UPriority.UPRIORITY_CS2).withTtl(3)
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
// CloudEvent
val cloudEvent = CloudEventFactory.response(
@@ -769,9 +773,10 @@ internal class UCloudEventTest {
@Test
fun test_umessage_has_platform_error_when_platform_error_exists() {
// Additional attributes
- val uCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(UPriority.UPRIORITY_CS2).withTtl(3)
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
val protoPayload = buildProtoPayloadForTest()
val cloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
@@ -795,9 +800,10 @@ internal class UCloudEventTest {
@Test
fun test_to_from_message_from_cloudevent_with_all_payload_formats() {
// Additional attributes
- val uCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(UPriority.UPRIORITY_CS2).withTtl(3)
- .build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS2
+ ttl = 3
+ }
val protoPayload = buildProtoPayloadForTest()
val cloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
LongUuidSerializer.INSTANCE.serialize(
@@ -866,7 +872,9 @@ internal class UCloudEventTest {
@Test
fun test_to_from_message_from_UCP_cloudevent() {
// Additional attributes
- val uCloudEventAttributes = UCloudEventAttributes.UCloudEventAttributesBuilder().withTtl(3).build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ ttl = 3
+ }
val protoPayload = buildProtoPayloadForTest()
val cloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
LongUuidSerializer.INSTANCE.serialize(
@@ -907,12 +915,13 @@ internal class UCloudEventTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash(
- "somehash"
- ).withPriority(UPriority.UPRIORITY_CS1).withTtl(3).withToken(
- "someOAuthToken"
- ).withTraceparent("someTraceparent").build()
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ traceparent = "someTraceparent"
+ }
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
diff --git a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToJsonSerializerTest.kt b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToJsonSerializerTest.kt
index 516e42f..997eed3 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToJsonSerializerTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToJsonSerializerTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 General Motors GTO LLC
+ * Copyright (c) 2024 General Motors GTO LLC
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -43,7 +43,6 @@ internal class CloudEventToJsonSerializerTest {
@Test
@DisplayName("Test serialize a CloudEvent to JSON")
fun test_serialize_cloud_event_to_json() {
-
// fake payload
val protoPayload = buildProtoPayloadForTest()
@@ -64,7 +63,7 @@ internal class CloudEventToJsonSerializerTest {
"{\"specversion\":\"1.0\",\"id\":\"hello\",\"source\":\"/body.access/1/door.front_left\",\"type\":\"pub.v1\"," +
"\"datacontenttype\":\"application/x-protobuf\",\"dataschema\":\"type.googleapis.com/io.cloudevents.v1.CloudEvent\"," +
"\"priority\":\"CS1\",\"ttl\":3," +
- "\"data_base64\":\"CjB0eXBlLmdvb2dsZWFwaXMuY29tL2lvLmNsb3VkZXZlbnRzLnYxLkNsb3VkRXZlbnQSPAoFaGVsbG8SEmh0dHA6Ly9leGFtcGxlLmNvbRoDMS4wIgxleGFtcGxlLmRlbW8qCgoDdHRsEgMaATNCAA==\"}"
+ "\"data_base64\":\"CjB0eXBlLmdvb2dsZWFwaXMuY29tL2lvLmNsb3VkZXZlbnRzLnYxLkNsb3VkRXZlbnQSPQoFaGVsbG8SE2h0dHBzOi8vZXhhbXBsZS5jb20aAzEuMCIMZXhhbXBsZS5kZW1vKgoKA3R0bBIDGgEzQgA=\"}"
assertEquals(expected, jsonString)
}
@@ -158,12 +157,12 @@ internal class CloudEventToJsonSerializerTest {
val protoPayload = buildProtoPayloadForTest1()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes = UCloudEventAttributes.UCloudEventAttributesBuilder()
- .withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1)
- .withTtl(3)
- .withToken("someOAuthToken")
- .build()
+ val uCloudEventAttributes = UCloudEventAttributes.uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ }
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
@@ -232,7 +231,7 @@ internal class CloudEventToJsonSerializerTest {
val cloudEventProto: io.cloudevents.v1.proto.CloudEvent = io.cloudevents.v1.proto.CloudEvent.newBuilder()
.setSpecVersion("1.0")
.setId("hello")
- .setSource("http://example.com")
+ .setSource("https://example.com")
.setType("example.demo")
.setProtoData(Any.newBuilder().build())
.putAttributes(
diff --git a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToProtobufSerializerTest.kt b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToProtobufSerializerTest.kt
index ad81459..de7edb3 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToProtobufSerializerTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/serialize/CloudEventToProtobufSerializerTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 General Motors GTO LLC
+ * Copyright (c) 2024 General Motors GTO LLC
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -52,9 +52,12 @@ internal class CloudEventToProtobufSerializerTest {
val protoPayload = buildProtoPayloadForTest()
// configure cloud event
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS0).withTtl(3).build()
+ val uCloudEventAttributes = UCloudEventAttributes.uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS0
+ ttl = 3
+ token = "someOAuthToken"
+ }
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
"hello", source, protoPayload.toByteArray(), protoPayload.typeUrl, uCloudEventAttributes
)
@@ -123,9 +126,12 @@ internal class CloudEventToProtobufSerializerTest {
val protoPayload = buildProtoPayloadForTest1()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash("somehash")
- .withPriority(UPriority.UPRIORITY_CS1).withTtl(3).withToken("someOAuthToken").build()
+ val uCloudEventAttributes = UCloudEventAttributes.uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ }
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
@@ -260,7 +266,7 @@ internal class CloudEventToProtobufSerializerTest {
private fun buildProtoPayloadForTest(): Any {
val cloudEventProto: io.cloudevents.v1.proto.CloudEvent =
io.cloudevents.v1.proto.CloudEvent.newBuilder().setSpecVersion("1.0").setId("hello")
- .setSource("http://example.com").setType("example.demo").setProtoData(Any.newBuilder().build())
+ .setSource("https://example.com").setType("example.demo").setProtoData(Any.newBuilder().build())
.putAttributes(
"ttl",
io.cloudevents.v1.proto.CloudEvent.CloudEventAttributeValue.newBuilder().setCeString("3").build()
diff --git a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/validate/CloudEventValidatorTest.kt b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/validate/CloudEventValidatorTest.kt
index 70beac3..0b8d83f 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/cloudevent/validate/CloudEventValidatorTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/cloudevent/validate/CloudEventValidatorTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 General Motors GTO LLC
+ * Copyright (c) 2024 General Motors GTO LLC
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -23,7 +23,7 @@ package org.eclipse.uprotocol.cloudevent.validate
import com.google.protobuf.Any
import io.cloudevents.CloudEvent
import io.cloudevents.core.builder.CloudEventBuilder
-import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes
+import org.eclipse.uprotocol.cloudevent.datamodel.UCloudEventAttributes.Companion.uCloudEventAttributes
import org.eclipse.uprotocol.cloudevent.factory.CloudEventFactory
import org.eclipse.uprotocol.cloudevent.factory.UCloudEvent
import org.eclipse.uprotocol.uri.serializer.LongUriSerializer
@@ -526,13 +526,12 @@ internal class CloudEventValidatorTest {
val protoPayload = buildProtoPayloadForTest()
// additional attributes
- val uCloudEventAttributes: UCloudEventAttributes =
- UCloudEventAttributes.UCloudEventAttributesBuilder().withHash(
- "somehash"
- ).withPriority(UPriority.UPRIORITY_CS1).withTtl(3).withToken(
- "someOAuthToken"
- ).build()
-
+ val uCloudEventAttributes = uCloudEventAttributes {
+ hash = "somehash"
+ priority = UPriority.UPRIORITY_CS1
+ ttl = 3
+ token = "someOAuthToken"
+ }
// build the cloud event
val cloudEventBuilder: CloudEventBuilder = CloudEventFactory.buildBaseCloudEvent(
"testme", source, protoPayload.toByteArray(), protoPayload.typeUrl, uCloudEventAttributes
@@ -559,10 +558,10 @@ internal class CloudEventValidatorTest {
// fake payload
val protoPayload = buildProtoPayloadForTest()
- val attributes: UCloudEventAttributes = UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(
- UPriority.UPRIORITY_CS0
- ).withTtl(1000) // live for 1 second
- .build()
+ val attributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS0
+ ttl = 1000
+ }
// build the cloud event
val cloudEvent: CloudEvent = CloudEventFactory.buildBaseCloudEvent(
@@ -585,10 +584,10 @@ internal class CloudEventValidatorTest {
// fake payload
val protoPayload = buildProtoPayloadForTest()
- val attributes: UCloudEventAttributes = UCloudEventAttributes.UCloudEventAttributesBuilder().withPriority(
- UPriority.UPRIORITY_CS0
- ).withTtl(1000) // live for 1 second
- .build()
+ val attributes = uCloudEventAttributes {
+ priority = UPriority.UPRIORITY_CS0
+ ttl = 1000
+ }
// build the cloud event
val cloudEvent: CloudEvent = CloudEventFactory.buildBaseCloudEvent(
diff --git a/src/test/kotlin/org/eclipse/uprotocol/rpc/CallOptionsTest.kt b/src/test/kotlin/org/eclipse/uprotocol/rpc/CallOptionsTest.kt
index fa65d53..42b6901 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/rpc/CallOptionsTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/rpc/CallOptionsTest.kt
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2023 General Motors GTO LLC
+ * Copyright (c) 2024 General Motors GTO LLC
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -22,6 +22,7 @@
package org.eclipse.uprotocol.rpc
import nl.jqno.equalsverifier.EqualsVerifier
+import org.eclipse.uprotocol.rpc.CallOptions.Companion.callOptions
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.assertEquals
@@ -38,11 +39,11 @@ class CallOptionsTest {
@Test
@DisplayName("Make sure the toString works")
fun testToString() {
- val callOptions = CallOptions.newBuilder()
- .withTimeout(30)
- .withToken("someToken")
- .build()
- val expected = "CallOptions{mTimeout=30, mToken='someToken'}"
+ val callOptions = callOptions {
+ timeout = 30
+ token = "someToken"
+ }
+ val expected = "CallOptions(timeout=30, token=someToken)"
assertEquals(expected, callOptions.toString())
}
@@ -50,60 +51,69 @@ class CallOptionsTest {
@DisplayName("Test using the DEFAULT CallOptions")
fun testCreatingCallOptionsDEFAULT() {
val callOptions = CallOptions.DEFAULT
- assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout())
- assertTrue(callOptions.token().isEmpty)
+ assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout)
+ assertTrue(callOptions.token.isEmpty())
}
@Test
@DisplayName("Test creating CallOptions with only a token")
fun testCreatingCallOptionsWithAToken() {
- val callOptions = CallOptions.newBuilder()
- .withToken("someToken")
- .build()
- assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout())
- assertTrue(callOptions.token().isPresent)
- val token = callOptions.token().get()
- assertEquals("someToken", token)
+ val callOptions = callOptions {
+ token = "someToken"
+ }
+ assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout)
+ assertTrue(callOptions.token.isNotEmpty())
+ assertEquals("someToken", callOptions.token)
}
@Test
@DisplayName("Test creating CallOptions with only an empty string token")
fun testCreatingCallOptionsWithAnEmptyStringToken() {
- val callOptions = CallOptions.newBuilder()
- .withToken("")
- .build()
- assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout())
- assertTrue(callOptions.token().isEmpty)
+ val callOptions = callOptions {
+ token = ""
+ }
+ assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout)
+ assertTrue(callOptions.token.isEmpty())
}
@Test
@DisplayName("Test creating CallOptions with only a token with only spaces")
fun testCreatingCallOptionsWithATokenWithOnlySpaces() {
- val callOptions = CallOptions.newBuilder()
- .withToken(" ")
- .build()
- assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout())
- assertTrue(callOptions.token().isEmpty)
+ val callOptions = callOptions {
+ token = " "
+ }
+ assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout)
+ assertTrue(callOptions.token.isEmpty())
}
@Test
@DisplayName("Test creating CallOptions with only a timeout")
fun testCreatingCallOptionsWithATimeout() {
- val callOptions = CallOptions.newBuilder()
- .withTimeout(30)
- .build()
- assertEquals(30, callOptions.timeout())
- assertTrue(callOptions.token().isEmpty)
+ val callOptions = callOptions {
+ timeout = 30
+ }
+ assertEquals(30, callOptions.timeout)
+ assertTrue(callOptions.token.isEmpty())
}
@Test
@DisplayName("Test creating CallOptions with a negative value timeout, expect the default timeout")
fun testCreatingCallOptionsWithANegativeTimeout() {
- val callOptions = CallOptions.newBuilder()
- .withTimeout(-3)
- .build()
- assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout())
- assertTrue(callOptions.token().isEmpty)
+ val callOptions = callOptions {
+ timeout = -3
+ }
+ assertEquals(CallOptions.TIMEOUT_DEFAULT, callOptions.timeout)
+ assertTrue(callOptions.token.isEmpty())
+ }
+
+ @Test
+ @DisplayName("Test creating CallOptions with a timeout of 0 is valid")
+ fun testCreatingCallOptionsWithATimeoutOfZero() {
+ val callOptions = callOptions {
+ timeout = 0
+ }
+ assertEquals(0, callOptions.timeout)
+ assertTrue(callOptions.token.isEmpty())
}
}
diff --git a/src/test/kotlin/org/eclipse/uprotocol/rpc/RpcTest.kt b/src/test/kotlin/org/eclipse/uprotocol/rpc/RpcTest.kt
index 7508fee..87648df 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/rpc/RpcTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/rpc/RpcTest.kt
@@ -27,6 +27,7 @@ import com.google.protobuf.kotlin.toByteString
import io.cloudevents.v1.proto.CloudEvent
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.test.runTest
+import org.eclipse.uprotocol.rpc.CallOptions.Companion.callOptions
import org.eclipse.uprotocol.uri.serializer.LongUriSerializer
import org.eclipse.uprotocol.v1.*
import org.junit.jupiter.api.Assertions.*
@@ -370,6 +371,6 @@ internal class RpcTest {
}
private fun buildUCallOptions(): CallOptions {
- return CallOptions.newBuilder().build()
+ return callOptions { }
}
}
\ No newline at end of file
diff --git a/src/test/kotlin/org/eclipse/uprotocol/transport/UPayloadExtTest.kt b/src/test/kotlin/org/eclipse/uprotocol/transport/UPayloadExtTest.kt
new file mode 100644
index 0000000..69eaf0c
--- /dev/null
+++ b/src/test/kotlin/org/eclipse/uprotocol/transport/UPayloadExtTest.kt
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2024 General Motors GTO LLC
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * http://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.eclipse.uprotocol.transport
+
+import org.junit.jupiter.api.Test
+
+import org.eclipse.uprotocol.v1.*
+import kotlin.test.assertEquals
+import kotlin.test.assertNull
+
+class UPayloadExtTest {
+
+ @Test
+ fun test_unpack_with_UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY(){
+ val message = uStatus { }
+ val payload = uPayload {
+ packToAny(message)
+ }
+ val result = unpack(payload, UStatus::class.java)
+ checkNotNull(result)
+ assertEquals(message, result)
+ }
+
+ @Test
+ fun test_unpack_with_UPAYLOAD_FORMAT_PROTOBUF(){
+ val message = uStatus { }
+ val payload = uPayload {
+ pack(message)
+ }
+ val result = unpack(payload, UStatus::class.java)
+ checkNotNull(result)
+ assertEquals(message, result)
+ }
+
+ @Test
+ fun test_unpack_with_UPAYLOAD_FORMAT_RAW(){
+ val message = uStatus { }
+ val payload = uPayload {
+ format = UPayloadFormat.UPAYLOAD_FORMAT_RAW
+ value = message.toByteString()
+ }
+ val result = unpack(payload, UStatus::class.java)
+ assertNull(result)
+ }
+
+ @Test
+ fun test_unpack_but_InvalidProtocolBufferException(){
+ val message = uStatus { }
+ val payload = uPayload {
+ packToAny(message)
+ }
+ val result = unpack(payload, UUri::class.java)
+ assertNull(result)
+ }
+
+ @Test
+ fun test_inline_unpack_with_UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY(){
+ val message = uStatus { }
+ val payload = uPayload {
+ packToAny(message)
+ }
+ val result = payload.unpack()
+ checkNotNull(result)
+ assertEquals(message, result)
+ }
+
+ @Test
+ fun test_inline_unpack_with_UPAYLOAD_FORMAT_PROTOBUF(){
+ val message = uStatus { }
+ val payload = uPayload {
+ pack(message)
+ }
+ val result = payload.unpack()
+ checkNotNull(result)
+ assertEquals(message, result)
+ }
+
+ @Test
+ fun test_inline_unpack_with_UPAYLOAD_FORMAT_RAW(){
+ val message = uStatus { }
+ val payload = uPayload {
+ format = UPayloadFormat.UPAYLOAD_FORMAT_RAW
+ value = message.toByteString()
+ }
+ val result = payload.unpack()
+ assertNull(result)
+ }
+
+ @Test
+ fun test_inline_unpack_but_InvalidProtocolBufferException(){
+ val message = uStatus { }
+ val payload = uPayload {
+ packToAny(message)
+ }
+ val result = payload.unpack()
+ assertNull(result)
+ }
+}
\ No newline at end of file
diff --git a/src/test/kotlin/org/eclipse/uprotocol/transport/validator/UAttributesValidatorTest.kt b/src/test/kotlin/org/eclipse/uprotocol/transport/validator/UAttributesValidatorTest.kt
index d00421d..fa4eb34 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/transport/validator/UAttributesValidatorTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/transport/validator/UAttributesValidatorTest.kt
@@ -20,9 +20,7 @@
*/
package org.eclipse.uprotocol.transport.validator
-import org.eclipse.uprotocol.transport.builder.UAttributesBuilder
import org.eclipse.uprotocol.transport.validate.UAttributesValidator
-import org.eclipse.uprotocol.uri.factory.UResourceFactory.createForRpcResponse
import org.eclipse.uprotocol.uri.serializer.LongUriSerializer
import org.eclipse.uprotocol.uuid.factory.UUIDV8
import org.eclipse.uprotocol.v1.*
@@ -39,18 +37,21 @@ internal class UAttributesValidatorTest {
@DisplayName("test fetching validator for valid types")
fun test_fetching_validator_for_valid_types() {
val publish: UAttributesValidator = UAttributesValidator.getValidator(
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ }
)
assertEquals("UAttributesValidator.Publish", publish.toString())
val request: UAttributesValidator = UAttributesValidator.getValidator(
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, 1000).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, 1000)
+ }
)
assertEquals("UAttributesValidator.Request", request.toString())
val response: UAttributesValidator = UAttributesValidator.getValidator(
- UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).build()
+ uAttributes {
+ forResponse(testSource, testSink, UPriority.UPRIORITY_CS4, UUIDV8())
+ }
)
assertEquals("UAttributesValidator.Response", response.toString())
}
@@ -58,7 +59,9 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be published")
fun test_validate_uAttributes_for_publish_message_payload() {
- val attributes: UAttributes = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).build()
+ val attributes: UAttributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isSuccess())
@@ -69,9 +72,14 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published with all values")
fun test_validate_uAttributes_for_publish_message_payload_all_values() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(1000).withSink(sink)
- .withPermissionLevel(2).withCommStatus(3).withReqId(UUIDV8())
- .build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = 1000
+ sink = testSink
+ permissionLevel = 2
+ commstatus = 3
+ reqid = UUIDV8()
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isSuccess())
@@ -81,10 +89,12 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be published with invalid type")
fun test_validate_uAttributes_for_publish_message_payload_invalid_type() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS0, UUIDV8()
- ).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS0, UUIDV8()
+ )
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -95,7 +105,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published with invalid time to live")
fun test_validate_uAttributes_for_publish_message_payload_invalid_ttl() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(-1).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = -1
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -106,8 +119,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published with invalid sink")
fun test_validate_uAttributes_for_publish_message_payload_invalid_sink() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withSink(UUri.getDefaultInstance())
- .build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ sink = UUri.getDefaultInstance()
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -118,7 +133,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published with invalid permission level")
fun test_validate_uAttributes_for_publish_message_payload_invalid_permission_level() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withPermissionLevel(-42).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ permissionLevel = -42
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -129,7 +147,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published with invalid communication status")
fun test_validate_uAttributes_for_publish_message_payload_invalid_communication_status() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withCommStatus(-42).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ commstatus = -42
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -141,10 +162,13 @@ internal class UAttributesValidatorTest {
fun test_validate_uAttributes_for_publish_message_payload_invalid_request_id() {
val uuidJava: java.util.UUID = java.util.UUID.randomUUID()
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withReqId(uUID {
- msb = uuidJava.mostSignificantBits
- lsb = uuidJava.leastSignificantBits
- }).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ reqid = uUID {
+ msb = uuidJava.mostSignificantBits
+ lsb = uuidJava.leastSignificantBits
+ }
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -156,7 +180,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request")
fun test_validate_uAttributes_for_rpc_request_message_payload() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, 1000).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, 1000)
+ }
+
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isSuccess())
@@ -167,8 +194,14 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with all values")
fun test_validate_uAttributes_for_rpc_request_message_payload_all_values() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, 1000).withPermissionLevel(2)
- .withCommStatus(3).withReqId(UUIDV8()).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, 1000)
+ permissionLevel = 2
+ commstatus = 3
+ reqid = UUIDV8()
+
+ }
+
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isSuccess())
@@ -178,10 +211,13 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with invalid type")
fun test_validate_uAttributes_for_rpc_request_message_payload_invalid_type() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).withTtl(1000).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS4, UUIDV8()
+ )
+ ttl = 1000
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -192,7 +228,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with invalid time to live")
fun test_validate_uAttributes_for_rpc_request_message_payload_invalid_ttl() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, -1).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, -1)
+ }
+
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -203,7 +242,9 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with invalid sink")
fun test_validate_uAttributes_for_rpc_request_message_payload_invalid_sink() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, UUri.getDefaultInstance(), UPriority.UPRIORITY_CS4, 1000).build()
+ uAttributes {
+ forRequest(testSource, UUri.getDefaultInstance(), UPriority.UPRIORITY_CS4, 1000)
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -214,8 +255,11 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with invalid permission level")
fun test_validate_uAttributes_for_rpc_request_message_payload_invalid_permission_level() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, 1000)
- .withPermissionLevel(-42).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, 1000)
+ permissionLevel = -42
+ }
+
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -226,8 +270,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC request with invalid communication " + "status")
fun test_validate_uAttributes_for_rpc_request_message_payload_invalid_communication_status() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, 1000).withCommStatus(-42)
- .build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, 1000)
+ commstatus = -42
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -239,12 +285,14 @@ internal class UAttributesValidatorTest {
fun test_validate_uAttributes_for_rpc_request_message_payload_invalid_request_id() {
val uuidJava: java.util.UUID = java.util.UUID.randomUUID()
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, 1000).withReqId(uUID {
- msb = uuidJava.mostSignificantBits
- lsb = uuidJava.leastSignificantBits
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, 1000)
+ reqid = uUID {
+ msb = uuidJava.mostSignificantBits
+ lsb = uuidJava.leastSignificantBits
+ }
}
- ).build()
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -255,10 +303,12 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response")
fun test_validate_uAttributes_for_rpc_response_message_payload() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS4, UUIDV8()
+ )
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isSuccess())
@@ -268,10 +318,15 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response with all values")
fun test_validate_uAttributes_for_rpc_response_message_payload_all_values() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).withPermissionLevel(2).withCommStatus(3).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS4, UUIDV8()
+ )
+ permissionLevel = 2
+ commstatus = 3
+
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isSuccess())
@@ -282,7 +337,9 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response with invalid type")
fun test_validate_uAttributes_for_rpc_response_message_payload_invalid_type() {
val attributes: UAttributes =
- UAttributesBuilder.notification(source, sink, UPriority.UPRIORITY_CS4).build()
+ uAttributes {
+ forNotification(testSource, testSink, UPriority.UPRIORITY_CS4)
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -292,10 +349,13 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response with invalid time to live")
fun test_validate_uAttributes_for_rpc_response_message_payload_invalid_ttl() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).withTtl(-1).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS4, UUIDV8()
+ )
+ ttl = -1
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -308,13 +368,14 @@ internal class UAttributesValidatorTest {
)
fun test_validate_uAttributes_for_rpc_response_message_payload_missing_sink_and_missing_requestId() {
val attributes: UAttributes =
- UAttributesBuilder.response(
- source,
- UUri.getDefaultInstance(),
- UPriority.UPRIORITY_CS4,
- UUID.getDefaultInstance()
- )
- .build()
+ uAttributes {
+ forResponse(
+ testSource,
+ UUri.getDefaultInstance(),
+ UPriority.UPRIORITY_CS4,
+ UUID.getDefaultInstance()
+ )
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -324,10 +385,13 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response with invalid permission level")
fun test_validate_uAttributes_for_rpc_response_message_payload_invalid_permission_level() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).withPermissionLevel(-42).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS4, UUIDV8()
+ )
+ permissionLevel = -42
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -337,10 +401,13 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response with invalid communication " + "status")
fun test_validate_uAttributes_for_rpc_response_message_payload_invalid_communication_status() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source, sink,
- UPriority.UPRIORITY_CS4, UUIDV8()
- ).withCommStatus(-42).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource, testSink,
+ UPriority.UPRIORITY_CS4, UUIDV8()
+ )
+ commstatus = -42
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -351,8 +418,9 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be an RPC response with missing request id")
fun test_validate_uAttributes_for_rpc_response_message_payload_missing_request_id() {
val attributes: UAttributes =
- UAttributesBuilder.response(source, sink, UPriority.UPRIORITY_CS4, UUID.getDefaultInstance())
- .build()
+ uAttributes {
+ forResponse(testSource, testSink, UPriority.UPRIORITY_CS4, UUID.getDefaultInstance())
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -368,7 +436,7 @@ internal class UAttributesValidatorTest {
lsb = uuidJava.leastSignificantBits
}
val attributes: UAttributes =
- UAttributesBuilder.response(source, sink, UPriority.UPRIORITY_CS4, reqid).build()
+ uAttributes { forResponse(testSource, testSink, UPriority.UPRIORITY_CS4, reqid) }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
val status: ValidationResult = validator.validate(attributes)
assertTrue(status.isFailure())
@@ -379,7 +447,9 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("Validate a UAttributes for payload that is meant to be published not expired")
fun test_validate_uAttributes_for_publish_message_payload_not_expired() {
- val attributes: UAttributes = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).build()
+ val attributes: UAttributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
assertFalse(validator.isExpired(attributes))
}
@@ -388,7 +458,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published not expired with ttl zero")
fun test_validate_uAttributes_for_publish_message_payload_not_expired_with_ttl_zero() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(0).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = 0
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
assertFalse(validator.isExpired(attributes))
}
@@ -397,7 +470,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published not expired with ttl")
fun test_validate_uAttributes_for_publish_message_payload_not_expired_with_ttl() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(10000).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = 10000
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
assertFalse(validator.isExpired(attributes))
}
@@ -406,7 +482,10 @@ internal class UAttributesValidatorTest {
@DisplayName("Validate a UAttributes for payload that is meant to be published not expired with ttl")
fun test_validate_uAttributes_for_publish_message_payload_with_negative_ttl() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(-1).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = -1
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
assertFalse(validator.isExpired(attributes))
@@ -419,7 +498,10 @@ internal class UAttributesValidatorTest {
)
fun test_validate_uAttributes_for_publish_message_payload_expired_with_ttl() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(1).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = 1
+ }
Thread.sleep(800)
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
assertTrue(validator.isExpired(attributes))
@@ -430,7 +512,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating publish invalid ttl attribute")
fun test_validating_publish_invalid_ttl_attribute() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(-1).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = -1
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateTtl(attributes)
assertTrue(status.isFailure())
@@ -441,7 +526,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating publish valid ttl attribute")
fun test_validating_valid_ttl_attribute() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withTtl(100).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ ttl = 100
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateTtl(attributes)
assertEquals(ValidationResult.success(), status)
@@ -452,7 +540,10 @@ internal class UAttributesValidatorTest {
fun test_validating_invalid_sink_attribute() {
val uri: UUri = LongUriSerializer.instance().deserialize("//")
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withSink(uri).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ sink = uri
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateSink(attributes)
assertTrue(status.isFailure())
@@ -464,7 +555,10 @@ internal class UAttributesValidatorTest {
fun test_validating_valid_sink_attribute() {
val uri: UUri = LongUriSerializer.instance().deserialize("/haartley/1")
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withSink(uri).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ sink = uri
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateSink(attributes)
assertEquals(ValidationResult.success(), status)
@@ -475,10 +569,13 @@ internal class UAttributesValidatorTest {
fun test_validating_invalid_ReqId_attribute() {
val uuidJava: java.util.UUID = java.util.UUID.randomUUID()
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withReqId(uUID {
- msb = uuidJava.mostSignificantBits
- lsb = uuidJava.leastSignificantBits
- }).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ reqid = uUID {
+ msb = uuidJava.mostSignificantBits
+ lsb = uuidJava.leastSignificantBits
+ }
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateReqId(attributes)
assertTrue(status.isFailure())
@@ -488,8 +585,10 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test validating valid ReqId attribute")
fun test_validating_valid_ReqId_attribute() {
- val attributes: UAttributes = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0)
- .withReqId(UUIDV8()).build()
+ val attributes: UAttributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ reqid = UUIDV8()
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateReqId(attributes)
assertEquals(ValidationResult.success(), status)
@@ -499,7 +598,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating invalid PermissionLevel attribute")
fun test_validating_invalid_PermissionLevel_attribute() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withPermissionLevel(-1).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ permissionLevel = -1
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validatePermissionLevel(attributes)
assertTrue(status.isFailure())
@@ -510,7 +612,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating valid PermissionLevel attribute")
fun test_validating_valid_PermissionLevel_attribute() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withPermissionLevel(3).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ permissionLevel = 3
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validatePermissionLevel(attributes)
assertEquals(ValidationResult.success(), status)
@@ -520,7 +625,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating valid PermissionLevel attribute")
fun test_validating_valid_PermissionLevel_attribute_invalid() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withPermissionLevel(0).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ permissionLevel = 0
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validatePermissionLevel(attributes)
assertTrue(status.isFailure())
@@ -531,7 +639,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating invalid commstatus attribute")
fun test_validating_invalid_commstatus_attribute() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withCommStatus(100).build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ commstatus = 100
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateCommStatus(attributes)
assertTrue(status.isFailure())
@@ -542,8 +653,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating valid commstatus attribute")
fun test_validating_valid_commstatus_attribute() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withCommStatus(UCode.ABORTED_VALUE)
- .build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ commstatus = UCode.ABORTED_VALUE
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
val status: ValidationResult = validator.validateCommStatus(attributes)
assertEquals(ValidationResult.success(), status)
@@ -553,7 +666,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating request message types")
fun test_validating_request_message_types() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS6, 100).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS6, 100)
+ }
+
val validator: UAttributesValidator = UAttributesValidator.getValidator(attributes)
assertEquals("UAttributesValidator.Request", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -564,7 +680,9 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test validating request validator using wrong messagetype")
fun test_validating_request_validator_with_wrong_messagetype() {
- val attributes: UAttributes = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS6).build()
+ val attributes: UAttributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS6)
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
assertEquals("UAttributesValidator.Request", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -575,10 +693,13 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test validating request validator using bad ttl")
fun test_validating_request_validator_with_wrong_bad_ttl() {
- val attributes: UAttributes = UAttributesBuilder.request(
- source, LongUriSerializer.instance().deserialize("/hartley/1/rpc.response"),
- UPriority.UPRIORITY_CS6, -1
- ).build()
+ val attributes: UAttributes = uAttributes {
+ forRequest(
+ testSource, LongUriSerializer.instance().deserialize("/hartley/1/rpc.response"),
+ UPriority.UPRIORITY_CS6, -1
+ )
+ }
+
val validator: UAttributesValidator = UAttributesValidator.Validators.REQUEST.validator()
assertEquals("UAttributesValidator.Request", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -589,12 +710,15 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test validating response validator using bad ttl")
fun test_validating_response_validator_with_wrong_bad_ttl() {
- val attributes: UAttributes = UAttributesBuilder.response(
- source,
- LongUriSerializer.instance().deserialize("/hartley/1/rpc.response"),
- UPriority.UPRIORITY_CS6,
- UUIDV8()
- ).withTtl(-1).build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(
+ testSource,
+ LongUriSerializer.instance().deserialize("/hartley/1/rpc.response"),
+ UPriority.UPRIORITY_CS6,
+ UUIDV8()
+ )
+ ttl = -1
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
assertEquals("UAttributesValidator.Response", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -606,7 +730,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating publish validator with wrong messagetype")
fun test_validating_publish_validator_with_wrong_messagetype() {
val attributes: UAttributes =
- UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS6, 1000).build()
+ uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS6, 1000)
+ }
+
val validator: UAttributesValidator = UAttributesValidator.Validators.PUBLISH.validator()
assertEquals("UAttributesValidator.Publish", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -617,7 +744,9 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test validating response validator with wrong messagetype")
fun test_validating_response_validator_with_wrong_messagetype() {
- val attributes: UAttributes = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS6).build()
+ val attributes: UAttributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS6)
+ }
val validator: UAttributesValidator = UAttributesValidator.Validators.RESPONSE.validator()
assertEquals("UAttributesValidator.Response", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -631,7 +760,10 @@ internal class UAttributesValidatorTest {
@DisplayName("test validating request containing token")
fun test_validating_request_containing_token() {
val attributes: UAttributes =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS0).withToken("null").build()
+ uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS0)
+ token = "null"
+ }
val validator: UAttributesValidator = UAttributesValidator.getValidator(attributes)
assertEquals("UAttributesValidator.Publish", validator.toString())
val status: ValidationResult = validator.validate(attributes)
@@ -641,8 +773,11 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test_valid_request_methoduri_in_sink")
fun test_valid_request_methoduri_in_sink() {
- val sink = LongUriSerializer.instance().deserialize("/test.service/1/rpc.method")
- val attributes = UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS0, 3000).build()
+ val testSink = LongUriSerializer.instance().deserialize("/test.service/1/rpc.method")
+ val attributes = uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS0, 3000)
+ }
+
val validator = UAttributesValidator.getValidator(attributes)
assertEquals("UAttributesValidator.Request", validator.toString())
val status = validator.validate(attributes)
@@ -652,8 +787,11 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test_invalid_request_methoduri_in_sink")
fun test_invalid_request_methoduri_in_sink() {
- val sink = LongUriSerializer.instance().deserialize("/test.client/1/test.response")
- val attributes = UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS0, 3000).build()
+ val testSink = LongUriSerializer.instance().deserialize("/test.client/1/test.response")
+ val attributes = uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS0, 3000)
+ }
+
val validator = UAttributesValidator.getValidator(attributes)
assertEquals("UAttributesValidator.Request", validator.toString())
val status = validator.validate(attributes)
@@ -666,13 +804,15 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test_valid_response_uri_in_sink")
fun test_valid_response_uri_in_sink() {
- val sink = LongUriSerializer.instance().deserialize("/test.client/1/rpc.response")
- val attributes = UAttributesBuilder.response(
- source,
- sink,
- UPriority.UPRIORITY_CS0,
- UUIDV8()
- ).build()
+ val testSink = LongUriSerializer.instance().deserialize("/test.client/1/rpc.response")
+ val attributes = uAttributes {
+ forResponse(
+ testSource,
+ testSink,
+ UPriority.UPRIORITY_CS0,
+ UUIDV8()
+ )
+ }
val validator = UAttributesValidator.getValidator(attributes)
assertEquals("UAttributesValidator.Response", validator.toString())
val status = validator.validate(attributes)
@@ -682,33 +822,39 @@ internal class UAttributesValidatorTest {
@Test
@DisplayName("test_invalid_response_uri_in_sink")
fun test_invalid_response_uri_in_sink() {
- val sink = LongUriSerializer.instance().deserialize("/test.client/1/rpc.method")
- val attributes = UAttributesBuilder.response(
- source,
- sink,
- UPriority.UPRIORITY_CS0,
- UUIDV8()
- ).build()
+ val testSink = LongUriSerializer.instance().deserialize("/test.client/1/rpc.method")
+ val attributes = uAttributes {
+ forResponse(
+ testSource,
+ testSink,
+ UPriority.UPRIORITY_CS0,
+ UUIDV8()
+ )
+ }
val validator = UAttributesValidator.getValidator(attributes)
assertEquals("UAttributesValidator.Response", validator.toString())
val status = validator.validate(attributes)
assertEquals("Invalid RPC response type.", status.getMessage())
}
- private val sink = uUri {
+ private val testSink = uUri {
authority = uAuthority { name = "vcu.someVin.veh.ultifi.gm.com" }
entity = uEntity {
name = "petapp.ultifi.gm.com"
versionMajor = 1
}
- resource = createForRpcResponse()
+ resource = uResource {
+ forRpcResponse()
+ }
}
- private val source: UUri = uUri {
+ private val testSource: UUri = uUri {
entity = uEntity {
name = "hartley_app"
versionMajor = 1
}
- resource = createForRpcResponse()
+ resource = uResource {
+ forRpcResponse()
+ }
}
}
diff --git a/src/test/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactoryTest.kt b/src/test/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactoryTest.kt
index ed37789..befbd4f 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactoryTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/uri/factory/UResourceFactoryTest.kt
@@ -21,67 +21,82 @@
package org.eclipse.uprotocol.uri.factory
-import org.eclipse.uprotocol.uri.factory.UResourceFactory.createForRpcRequest
-import org.eclipse.uprotocol.uri.factory.UResourceFactory.createForRpcResponse
-import org.eclipse.uprotocol.uri.factory.UResourceFactory.from
+import org.eclipse.uprotocol.v1.forRpcRequest
+import org.eclipse.uprotocol.v1.forRpcResponse
+import org.eclipse.uprotocol.v1.from
+import org.eclipse.uprotocol.v1.uResource
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import kotlin.random.Random
-class UResourceFactoryTest{
+class UResourceFactoryTest {
@Test
- fun test_forRpcResponse(){
- val resource = createForRpcResponse()
+ fun test_forRpcResponse() {
+ val resource = uResource {
+ forRpcResponse()
+ }
assertEquals("rpc", resource.name)
assertEquals("response", resource.instance)
assertEquals(0, resource.id)
}
@Test
- fun test_forRpcRequest_without_argu(){
- val resource = createForRpcRequest()
+ fun test_forRpcRequest_without_argu() {
+ val resource = uResource {
+ forRpcRequest()
+ }
assertEquals("rpc", resource.name)
assertEquals("", resource.instance)
assertEquals(0, resource.id)
}
@Test
- fun test_forRpcRequest_with_method(){
- val resource = createForRpcRequest(method = "test")
+ fun test_forRpcRequest_with_method() {
+ val resource = uResource {
+ forRpcRequest("test")
+ }
assertEquals("rpc", resource.name)
assertEquals("test", resource.instance)
assertEquals(0, resource.id)
}
@Test
- fun test_forRpcRequest_with_id(){
- val resource = createForRpcRequest(id = 999)
+ fun test_forRpcRequest_with_id() {
+ val resource = uResource {
+ forRpcRequest(id = 999)
+ }
assertEquals("rpc", resource.name)
assertEquals("", resource.instance)
assertEquals(999, resource.id)
}
@Test
- fun test_forRpcRequest(){
- val resource = createForRpcRequest(method = "test", id = 999)
+ fun test_forRpcRequest() {
+ val resource = uResource {
+ forRpcRequest(method = "test", id = 999)
+ }
assertEquals("rpc", resource.name)
assertEquals("test", resource.instance)
assertEquals(999, resource.id)
}
@Test
- fun test_fromId_valid_id(){
- val idTest= Random.nextInt(0,999)
- val resource = from(idTest)
+ fun test_fromId_valid_id() {
+ val idTest = Random.nextInt(0, 999)
+ val resource = uResource {
+ from(idTest)
+ }
assertEquals("rpc", resource.name)
assertEquals("", resource.instance)
assertEquals(idTest, resource.id)
}
@Test
- fun test_fromId_invalid_id(){
- val idTest= Random.nextInt(1000,Int.MAX_VALUE)
- val resource = from(idTest)
+ fun test_fromId_invalid_id() {
+ val idTest = Random.nextInt(1000, Int.MAX_VALUE)
+ val resource = uResource {
+ from(idTest)
+ }
assertEquals("", resource.name)
assertEquals("", resource.instance)
assertEquals(idTest, resource.id)
diff --git a/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/LongUriSerializerTest.kt b/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/LongUriSerializerTest.kt
index 86a3e05..eaa8b44 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/LongUriSerializerTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/LongUriSerializerTest.kt
@@ -20,7 +20,6 @@
*/
package org.eclipse.uprotocol.uri.serializer
-import org.eclipse.uprotocol.uri.factory.UResourceFactory
import org.eclipse.uprotocol.uri.validator.isEmpty
import org.eclipse.uprotocol.uri.validator.isLongForm
import org.eclipse.uprotocol.uri.validator.isRemote
@@ -38,7 +37,7 @@ class LongUriSerializerTest {
fun test_using_the_serializers() {
val uri: UUri = uUri {
entity = uEntity { name = "hartley" }
- resource = UResourceFactory.createForRpcRequest("raise")
+ resource = uResource { forRpcRequest("raise") }
}
val strUri: String = LongUriSerializer.instance().serialize(uri)
diff --git a/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializerTest.kt b/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializerTest.kt
index 91c7442..46c8278 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializerTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/MicroUriSerializerTest.kt
@@ -21,7 +21,6 @@
package org.eclipse.uprotocol.uri.serializer
import com.google.protobuf.ByteString
-import org.eclipse.uprotocol.uri.factory.UResourceFactory
import org.eclipse.uprotocol.uri.validator.isEmpty
import org.eclipse.uprotocol.uri.validator.isMicroForm
import org.eclipse.uprotocol.v1.*
@@ -90,7 +89,7 @@ class MicroUriSerializerTest {
fun test_serialize_uri_missing_ids() {
val uri: UUri = uUri {
entity = uEntity { name = "hartley" }
- resource = UResourceFactory.createForRpcResponse()
+ resource = uResource { forRpcResponse() }
}
@@ -158,7 +157,7 @@ class MicroUriSerializerTest {
id = 29999
versionMajor = 254
}
- resource = UResourceFactory.createForRpcRequest(id = 99)
+ resource = uResource { forRpcRequest( id = 99) }
}
diff --git a/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/UriSerializerTest.kt b/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/UriSerializerTest.kt
index 57950ab..7aea902 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/UriSerializerTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/uri/serializer/UriSerializerTest.kt
@@ -22,7 +22,6 @@ package org.eclipse.uprotocol.uri.serializer
import com.google.protobuf.ByteString
import org.eclipse.uprotocol.core.usubscription.v3.Update
-import org.eclipse.uprotocol.uri.factory.UResourceFactory
import org.eclipse.uprotocol.uri.validator.isEmpty
import org.eclipse.uprotocol.uri.validator.isMicroForm
import org.eclipse.uprotocol.v1.*
@@ -108,7 +107,9 @@ class UriSerializerTest {
fun test_build_resolved_full_information() {
val uUri = uUri {
entity = uEntity { id = 0 }
- resource = UResourceFactory.from(Update.Resources.subscriptions)
+ resource = uResource {
+ from(Update.Resources.subscriptions)
+ }
}
assertFalse(uUri.isEmpty())
assertTrue(uUri.isMicroForm())
diff --git a/src/test/kotlin/org/eclipse/uprotocol/uri/validator/UriValidatorTest.kt b/src/test/kotlin/org/eclipse/uprotocol/uri/validator/UriValidatorTest.kt
index 2c9d7e1..5a5b27b 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/uri/validator/UriValidatorTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/uri/validator/UriValidatorTest.kt
@@ -20,7 +20,6 @@
*/
package org.eclipse.uprotocol.uri.validator
-import org.eclipse.uprotocol.uri.factory.UResourceFactory
import org.eclipse.uprotocol.uri.serializer.LongUriSerializer
import org.eclipse.uprotocol.v1.*
import org.eclipse.uprotocol.validation.ValidationResult
@@ -515,7 +514,9 @@ internal class UriValidatorTest {
fun test_valid_rpc_response_uri() {
val uuri: UUri = uUri {
entity = uEntity { name = "hartley" }
- resource = UResourceFactory.createForRpcResponse()
+ resource = uResource {
+ forRpcResponse()
+ }
}
val status: ValidationResult = uuri.validateRpcResponse()
@@ -526,7 +527,7 @@ internal class UriValidatorTest {
@Test
@DisplayName("Test invalid rpc response uri")
@Throws(IOException::class)
- fun test_invalid_rpc_response_uri(){
+ fun test_invalid_rpc_response_uri() {
val uuri: UUri = uUri {
entity = uEntity { name = "hartley" }
resource = uResource {
@@ -573,9 +574,11 @@ internal class UriValidatorTest {
@DisplayName("Test is Remote is false for URI without UAuthority")
fun test_is_remote_is_false_for_uri_without_uauthority() {
val uri = uUri {
- authority = uAuthority { }
+ authority = uAuthority { }
entity = uEntity { name = "hartley" }
- resource = UResourceFactory.createForRpcResponse()
+ resource = uResource {
+ forRpcResponse()
+ }
}
assertFalse(UAuthority.getDefaultInstance().isRemote())
assertFalse(uri.authority.isRemote())
diff --git a/src/test/kotlin/org/eclipse/uprotocol/transport/builder/UAttributesBuilderTest.kt b/src/test/kotlin/org/eclipse/uprotocol/v1/UAttributesKtExtTest.kt
similarity index 64%
rename from src/test/kotlin/org/eclipse/uprotocol/transport/builder/UAttributesBuilderTest.kt
rename to src/test/kotlin/org/eclipse/uprotocol/v1/UAttributesKtExtTest.kt
index 856cc03..3447af2 100644
--- a/src/test/kotlin/org/eclipse/uprotocol/transport/builder/UAttributesBuilderTest.kt
+++ b/src/test/kotlin/org/eclipse/uprotocol/v1/UAttributesKtExtTest.kt
@@ -18,21 +18,19 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.eclipse.uprotocol.transport.builder
+package org.eclipse.uprotocol.v1
-import org.eclipse.uprotocol.uri.factory.UResourceFactory
-import org.eclipse.uprotocol.v1.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Test
-class UAttributesBuilderTest {
+class UAttributesKtExtTest {
@Test
fun testPublish() {
- val builder: UAttributesBuilder = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS1)
- assertNotNull(builder)
- val attributes: UAttributes = builder.build()
+ val attributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS1)
+ }
assertNotNull(attributes)
assertEquals(UMessageType.UMESSAGE_TYPE_PUBLISH, attributes.type)
assertEquals(UPriority.UPRIORITY_CS1, attributes.priority)
@@ -40,65 +38,72 @@ class UAttributesBuilderTest {
@Test
fun testNotification() {
- val builder: UAttributesBuilder = UAttributesBuilder.notification(source, sink, UPriority.UPRIORITY_CS1)
- assertNotNull(builder)
- val attributes: UAttributes = builder.build()
+ val attributes = uAttributes {
+ forNotification(testSource, testSink, UPriority.UPRIORITY_CS1)
+ }
assertNotNull(attributes)
assertEquals(UMessageType.UMESSAGE_TYPE_PUBLISH, attributes.type)
assertEquals(UPriority.UPRIORITY_CS1, attributes.priority)
- assertEquals(sink, attributes.sink)
+ assertEquals(testSink, attributes.sink)
}
@Test
fun testRequest() {
val ttl = 1000
- val builder: UAttributesBuilder = UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, ttl)
- assertNotNull(builder)
- val attributes: UAttributes = builder.build()
+ val attributes: UAttributes = uAttributes {
+ forRequest(testSource, testSink, UPriority.UPRIORITY_CS4, ttl)
+ }
assertNotNull(attributes)
assertEquals(UMessageType.UMESSAGE_TYPE_REQUEST, attributes.type)
assertEquals(UPriority.UPRIORITY_CS4, attributes.priority)
- assertEquals(sink, attributes.sink)
+ assertEquals(testSink, attributes.sink)
assertEquals(ttl, attributes.ttl)
}
@Test
fun testResponse() {
- val builder: UAttributesBuilder = UAttributesBuilder.response(source, sink, UPriority.UPRIORITY_CS6, uUID)
- assertNotNull(builder)
- val attributes: UAttributes = builder.build()
+ val attributes: UAttributes = uAttributes {
+ forResponse(testSource, testSink, UPriority.UPRIORITY_CS6, uUID)
+ }
assertNotNull(attributes)
assertEquals(UMessageType.UMESSAGE_TYPE_RESPONSE, attributes.type)
assertEquals(UPriority.UPRIORITY_CS6, attributes.priority)
- assertEquals(sink, attributes.sink)
+ assertEquals(testSink, attributes.sink)
assertEquals(uUID, attributes.reqid)
}
@Test
fun testBuild() {
val reqId: UUID = uUID
- val builder: UAttributesBuilder =
- UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS1).withTtl(1000).withToken("test_token")
- .withSink(sink).withPermissionLevel(2).withCommStatus(1).withReqId(reqId)
- val attributes: UAttributes = builder.build()
+ val attributes: UAttributes = uAttributes {
+ forPublication(testSource, UPriority.UPRIORITY_CS1)
+ ttl = 1000
+ token = "test_token"
+ sink = testSink
+ permissionLevel = 2
+ commstatus = 1
+ reqid = reqId
+ traceparent = "test_traceparent"
+ }
assertNotNull(attributes)
assertEquals(UMessageType.UMESSAGE_TYPE_PUBLISH, attributes.type)
assertEquals(UPriority.UPRIORITY_CS1, attributes.priority)
assertEquals(1000, attributes.ttl)
assertEquals("test_token", attributes.token)
- assertEquals(sink, attributes.sink)
+ assertEquals(testSink, attributes.sink)
assertEquals(2, attributes.permissionLevel)
assertEquals(1, attributes.commstatus)
assertEquals(reqId, attributes.reqid)
+ assertEquals("test_traceparent",attributes.traceparent)
}
- private val sink = uUri {
+ private val testSink = uUri {
authority = uAuthority { name = "vcu.someVin.veh.ultifi.gm.com" }
entity = uEntity {
name = "petapp.ultifi.gm.com"
versionMajor = 1
}
- resource = UResourceFactory.createForRpcResponse()
+ resource = uResource { forRpcResponse() }
}
@@ -109,11 +114,11 @@ class UAttributesBuilderTest {
}
- private val source: UUri = uUri {
+ private val testSource: UUri = uUri {
entity = uEntity {
name = "hartley_app"
versionMajor = 1
}
- resource = UResourceFactory.createForRpcResponse()
+ resource = uResource { forRpcResponse() }
}
}
diff --git a/src/test/kotlin/org/eclipse/uprotocol/v1/UPayloadKtExtTest.kt b/src/test/kotlin/org/eclipse/uprotocol/v1/UPayloadKtExtTest.kt
new file mode 100644
index 0000000..2ba2ed1
--- /dev/null
+++ b/src/test/kotlin/org/eclipse/uprotocol/v1/UPayloadKtExtTest.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2024 General Motors GTO LLC
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * http://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.eclipse.uprotocol.v1
+
+import com.google.protobuf.Any
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Assertions.assertNotNull
+import org.junit.jupiter.api.Test
+
+
+class UPayloadKtExtTest {
+ @Test
+ fun testPackToAny() {
+ val uStatus = uStatus { }
+ val uPayload = uPayload {
+ packToAny(uStatus)
+ }
+ assertNotNull(uPayload)
+ assertEquals(UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY, uPayload.format)
+ assertEquals(
+ Any.pack(uStatus).toByteString(),
+ uPayload.value
+ )
+ }
+
+ @Test
+ fun testPack() {
+ val uStatus = uStatus { }
+ val uPayload = uPayload {
+ pack(uStatus)
+ }
+ assertNotNull(uPayload)
+ assertEquals(UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF, uPayload.format)
+ assertEquals(uStatus.toByteString(), uPayload.value)
+ }
+}