Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import com.viam.common.v1.Common;
import com.viam.common.v1.Common.GetGeometriesRequest;
import com.viam.common.v1.Common.GetReadingsRequest;
import com.viam.common.v1.Common.GetReadingsResponse;
import com.viam.component.sensor.v1.SensorServiceGrpc;

import com.viam.sdk.core.rpc.Channel;

import java.util.List;
import java.util.Map;
import java.util.Optional;

Expand Down Expand Up @@ -40,4 +42,12 @@ public GetReadingsResponse getReadings(final Optional<Struct> extra) {
extra.ifPresent(builder::setExtra);
return client.getReadings(builder.build());
}

@Override
public List<Common.Geometry> getGeometries(final Optional<Struct> extra) {
final GetGeometriesRequest.Builder builder = Common.GetGeometriesRequest.newBuilder().
setName(getName().getName());
extra.ifPresent(builder::setExtra);
return client.getGeometries(builder.build()).getGeometriesList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,17 @@ public void getReadings(GetReadingsRequest request,
responseObserver.onCompleted();
}

@Override
public void getGeometries(Common.GetGeometriesRequest request,
StreamObserver<GetGeometriesResponse> responseObserver) {
final com.viam.sdk.core.component.sensor.Sensor sensor = getResource(
com.viam.sdk.core.component.sensor.Sensor.named(request.getName())
);
final List<Geometry> result = sensor.getGeometries(Optional.of(request.getExtra()));
responseObserver.onNext(GetGeometriesResponse.newBuilder().addAllGeometries(result).build());
responseObserver.onCompleted();
}

@Override
public Class<Sensor> getResourceClass() {
return Sensor.class;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.viam.sdk.core.component.sensor

import com.google.protobuf.Struct
import com.google.protobuf.Value
import com.viam.common.v1.Common.Geometry
import com.viam.common.v1.Common.GetReadingsResponse
import com.viam.sdk.core.resource.ResourceManager
import com.viam.sdk.core.rpc.BasicManagedChannel
import io.grpc.inprocess.InProcessChannelBuilder
import io.grpc.inprocess.InProcessServerBuilder
import io.grpc.testing.GrpcCleanupRule
import org.junit.Rule
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mockito.*
import java.util.*

class SensorRPCClientTest {
private lateinit var sensor: Sensor
private lateinit var client: SensorRPCClient

@JvmField
@Rule
val grpcCleanupRule: GrpcCleanupRule = GrpcCleanupRule()

@BeforeEach
fun setup() {
sensor = mock(
Sensor::class.java, withSettings().useConstructor("mock-sensor").defaultAnswer(
CALLS_REAL_METHODS
)
)
val resourceManager = ResourceManager(listOf(sensor))
val service = SensorRPCService(resourceManager)
val serviceName = InProcessServerBuilder.generateName()
grpcCleanupRule.register(
InProcessServerBuilder.forName(serviceName).directExecutor().addService(service).build().start()
)
val channel = grpcCleanupRule.register(InProcessChannelBuilder.forName(serviceName).directExecutor().build())
client = SensorRPCClient("mock-sensor", BasicManagedChannel(channel))
}

@Test
fun getGeometries() {
doReturn(listOf<Geometry>()).`when`(sensor).getGeometries(any())
client.getGeometries(Optional.empty())
verify(sensor).getGeometries(any())
}

@Test
fun getReadings() {
val readings = mapOf("foo" to Value.newBuilder().setStringValue("bar").build())
doReturn(GetReadingsResponse.newBuilder().putAllReadings(readings).build()).`when`(sensor).getReadings(any())
val response = client.getReadings(Optional.empty())
verify(sensor).getReadings(any())
assertEquals(readings, response.readingsMap)
}

@Test
fun doCommand() {
val command = mapOf("foo" to Value.newBuilder().setStringValue("bar").build())
doReturn(Struct.newBuilder().putAllFields(command).build()).`when`(sensor).doCommand(anyMap())
val response = client.doCommand(command)
verify(sensor).doCommand(command)
assertEquals(command, response.fieldsMap)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.viam.sdk.core.component.sensor

import com.google.protobuf.Struct
import com.google.protobuf.Value
import com.viam.common.v1.Common
import com.viam.common.v1.Common.Geometry
import com.viam.common.v1.Common.GetReadingsRequest
import com.viam.common.v1.Common.GetReadingsResponse
import com.viam.component.sensor.v1.SensorServiceGrpc
import com.viam.component.sensor.v1.SensorServiceGrpc.SensorServiceBlockingStub
import com.viam.sdk.core.resource.ResourceManager
import io.grpc.inprocess.InProcessChannelBuilder
import io.grpc.inprocess.InProcessServerBuilder
import io.grpc.testing.GrpcCleanupRule
import org.junit.Rule
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mockito.*
import java.util.*

class SensorRPCServiceTest {
private lateinit var sensor: Sensor
private lateinit var client: SensorServiceBlockingStub

@JvmField
@Rule
val grpcCleanupRule: GrpcCleanupRule = GrpcCleanupRule()

@BeforeEach
fun setup() {
sensor = mock(
Sensor::class.java, withSettings().useConstructor("mock-sensor").defaultAnswer(
CALLS_REAL_METHODS
)
)

val resourceManager = ResourceManager(listOf(sensor))
val service = SensorRPCService(resourceManager)
val serviceName = InProcessServerBuilder.generateName()
grpcCleanupRule.register(
InProcessServerBuilder.forName(serviceName).directExecutor().addService(service).build().start()
)
client = SensorServiceGrpc.newBlockingStub(
grpcCleanupRule.register(
InProcessChannelBuilder.forName(serviceName).build()
)
)
}

@Test
fun getGeometries() {
doReturn(listOf<Geometry>()).`when`(sensor).getGeometries(any())
val request = Common.GetGeometriesRequest.newBuilder().setName(sensor.name.name).build()
client.getGeometries(request)
verify(sensor).getGeometries(Optional.of(Struct.getDefaultInstance()))
}

@Test
fun getReadings() {
val readings = mapOf("foo" to Value.newBuilder().setStringValue("bar").build())
doReturn(GetReadingsResponse.newBuilder().putAllReadings(readings).build()).`when`(sensor).getReadings(any())
val request = GetReadingsRequest.newBuilder().setName(sensor.name.name).build()
val response = client.getReadings(request)
verify(sensor).getReadings(Optional.of(Struct.getDefaultInstance()))
assertEquals(readings, response.readingsMap)
}

@Test
fun doCommand() {
val command =
Struct.newBuilder().putAllFields(mapOf("foo" to Value.newBuilder().setStringValue("bar").build())).build()
doReturn(command).`when`(sensor).doCommand(anyMap())
val request = Common.DoCommandRequest.newBuilder().setName(sensor.name.name).setCommand(command).build()
val response = client.doCommand(request)
verify(sensor).doCommand(command.fieldsMap)
assertEquals(command, response.result)
}
}
Loading