• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.uwb;
18 
19 import static android.uwb.RangingMeasurement.RANGING_STATUS_SUCCESS;
20 
21 import static com.google.common.truth.Truth.assertThat;
22 
23 import static org.mockito.Mockito.mock;
24 import static org.mockito.Mockito.when;
25 
26 import android.uwb.AngleMeasurement;
27 import android.uwb.AngleOfArrivalMeasurement;
28 import android.uwb.DistanceMeasurement;
29 import android.uwb.RangingMeasurement;
30 import android.uwb.UwbAddress;
31 
32 import com.android.uwb.fusion.UwbFilterEngine;
33 
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.mockito.Mock;
38 
39 public class UwbControleeTest {
40     public static final UwbAddress UWB_ADDRESS = UwbAddress.fromBytes(new byte[] {1, 2});
41     UwbControlee mControlee;
42     @Mock
43     UwbInjector mUwbInjector;
44 
45     @Before
setUp()46     public void setUp() {
47         UwbFilterEngine.Builder builder = new UwbFilterEngine.Builder();
48         UwbFilterEngine engine = builder.build();
49         mUwbInjector = mock(UwbInjector.class);
50         when(mUwbInjector.getElapsedSinceBootMillis()).thenReturn(10L);
51         mControlee = new UwbControlee(
52                 UWB_ADDRESS,
53                 engine,
54                 mUwbInjector);
55     }
56 
57     @After
shutdown()58     public void shutdown() throws Exception {
59         mControlee.close();
60     }
61 
62     @Test
testGetUwbAddress()63     public void testGetUwbAddress() {
64         assertThat(mControlee.getUwbAddress()).isEqualTo(UWB_ADDRESS);
65     }
66 
67     @Test
testFilterMeasurement()68     public void testFilterMeasurement() {
69         final double testRads = 0.1;
70         final double testDist = 2;
71         AngleMeasurement am = new AngleMeasurement(testRads, 0.0, 1.0);
72         AngleOfArrivalMeasurement aoam = new AngleOfArrivalMeasurement.Builder(am).build();
73         DistanceMeasurement dm = new DistanceMeasurement.Builder()
74                 .setMeters(testDist)
75                 .setErrorMeters(0.0)
76                 .setConfidenceLevel(1.0)
77                 .build();
78 
79         RangingMeasurement.Builder rm = new RangingMeasurement.Builder()
80                 .setDistanceMeasurement(dm)
81                 .setAngleOfArrivalMeasurement(aoam)
82                 .setStatus(RANGING_STATUS_SUCCESS)
83                 .setRemoteDeviceAddress(UWB_ADDRESS)
84                 .setElapsedRealtimeNanos(100);
85 
86         // Filtering a single measurement value should just yield that same value.
87         mControlee.filterMeasurement(rm);
88 
89         RangingMeasurement newMeasure = rm.build();
90         assertThat(newMeasure.getAngleOfArrivalMeasurement().getAzimuth().getRadians())
91                 .isWithin(0.001).of(testRads);
92     }
93 
94     @Test
testNonAoaMeasurement()95     public void testNonAoaMeasurement() {
96         final double testDist = 2;
97         DistanceMeasurement dm = new DistanceMeasurement.Builder()
98                 .setMeters(testDist)
99                 .setErrorMeters(0.0)
100                 .setConfidenceLevel(1.0)
101                 .build();
102 
103         RangingMeasurement.Builder rm = new RangingMeasurement.Builder()
104                 .setDistanceMeasurement(dm)
105                 .setStatus(RANGING_STATUS_SUCCESS)
106                 .setRemoteDeviceAddress(UWB_ADDRESS)
107                 .setElapsedRealtimeNanos(100);
108 
109         // Filtering a single measurement value should just yield that same value.
110         mControlee.filterMeasurement(rm);
111 
112         RangingMeasurement newMeasure = rm.build();
113         assertThat(newMeasure.getAngleOfArrivalMeasurement()).isNull();
114     }
115 }
116