1
+ package com.viam.sdk.core.component.posetracker
2
+
3
+ import com.google.protobuf.Struct
4
+ import com.google.protobuf.Value
5
+ import com.viam.common.v1.Common
6
+ import com.viam.common.v1.Common.Geometry
7
+ import com.viam.common.v1.Common.PoseInFrame
8
+ import com.viam.component.v1.PoseTrackerServiceGrpc
9
+ import com.viam.component.v1.PoseTrackerServiceGrpc.PoseTrackerServiceBlockingStub
10
+ import com.viam.sdk.core.resource.ResourceManager
11
+ import io.grpc.inprocess.InProcessChannelBuilder
12
+ import io.grpc.inprocess.InProcessServerBuilder
13
+ import io.grpc.testing.GrpcCleanupRule
14
+ import org.junit.Rule
15
+ import org.junit.jupiter.api.Assertions.assertEquals
16
+ import org.junit.jupiter.api.BeforeEach
17
+ import org.junit.jupiter.api.Test
18
+ import org.mockito.Mockito.*
19
+ import java.util.*
20
+
21
+ class PoseTrackerRPCServiceTest {
22
+ private lateinit var poseTracker: PoseTracker
23
+ private lateinit var client: PoseTrackerServiceBlockingStub
24
+
25
+ @JvmField
26
+ @Rule
27
+ val grpcCleanupRule: GrpcCleanupRule = GrpcCleanupRule ()
28
+
29
+ @BeforeEach
30
+ fun setup () {
31
+ poseTracker = mock(
32
+ PoseTracker ::class .java, withSettings().useConstructor(" mock-poseTracker" ).defaultAnswer(
33
+ CALLS_REAL_METHODS
34
+ )
35
+ )
36
+
37
+ val resourceManager = ResourceManager (listOf (poseTracker))
38
+ val service = PoseTrackerRPCService (resourceManager)
39
+ val serviceName = InProcessServerBuilder .generateName()
40
+ grpcCleanupRule.register(
41
+ InProcessServerBuilder .forName(serviceName).directExecutor().addService(service).build().start()
42
+ )
43
+ client = PoseTrackerServiceGrpc .newBlockingStub(
44
+ grpcCleanupRule.register(
45
+ InProcessChannelBuilder .forName(serviceName).build()
46
+ )
47
+ )
48
+ }
49
+
50
+ @Test
51
+ fun getPoses (){
52
+ val bodyNames = listOf (" a" , " b" )
53
+ val pose = Common .Pose .newBuilder().setX(1.0 ).setY(1.0 ).setZ(1.0 ).setOX(2.0 ).setOY(2.0 ).setOZ(2.0 ).setTheta(3.0 ).build()
54
+ val poseFrames = mapOf (" a" to PoseInFrame .newBuilder().setPose(pose).setReferenceFrame(" 0" ).build(),
55
+ " b" to PoseInFrame .newBuilder().setPose(pose).setReferenceFrame(" 1" ).build())
56
+ `when `(poseTracker.getPoses(eq(bodyNames), any(Struct ::class .java) ? : Struct .getDefaultInstance())).thenReturn(poseFrames)
57
+ val request = com.viam.component.v1.PoseTracker .GetPosesRequest .newBuilder().setName(poseTracker.name.name).addAllBodyNames(bodyNames).build()
58
+ val res = client.getPoses(request)
59
+ verify(poseTracker).getPoses(bodyNames, Struct .getDefaultInstance())
60
+ assertEquals(poseFrames, res.bodyPosesMap)
61
+ }
62
+ @Test
63
+ fun doCommand () {
64
+ val command =
65
+ Struct .newBuilder().putAllFields(mapOf (" foo" to Value .newBuilder().setStringValue(" bar" ).build())).build()
66
+ doReturn(command).`when `(poseTracker).doCommand(anyMap())
67
+ val request = Common .DoCommandRequest .newBuilder().setName(poseTracker.name.name).setCommand(command).build()
68
+ val response = client.doCommand(request)
69
+ verify(poseTracker).doCommand(command.fieldsMap)
70
+ assertEquals(command, response.result)
71
+ }
72
+
73
+ @Test
74
+ fun getGeometries () {
75
+ doReturn(listOf<Geometry >()).`when `(poseTracker).getGeometries(any())
76
+ val request = Common .GetGeometriesRequest .newBuilder().setName(poseTracker.name.name).build()
77
+ client.getGeometries(request)
78
+ verify(poseTracker).getGeometries(Optional .of(Struct .getDefaultInstance()))
79
+ }
80
+ }
0 commit comments