• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.secure.csml;
18 
19 import static com.android.server.uwb.config.CapabilityParam.RESPONDER;
20 
21 import static com.google.common.truth.Truth.assertThat;
22 import static com.google.uwb.support.fira.FiraParams.CONSTRAINT_LENGTH_7;
23 import static com.google.uwb.support.fira.FiraParams.MULTI_NODE_MODE_ONE_TO_MANY;
24 import static com.google.uwb.support.fira.FiraParams.PRF_MODE_BPRF;
25 import static com.google.uwb.support.fira.FiraParams.RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE;
26 import static com.google.uwb.support.fira.FiraParams.RFRAME_CONFIG_SP3;
27 import static com.google.uwb.support.fira.FiraParams.STS_CONFIG_DYNAMIC;
28 
29 import static org.junit.Assert.assertArrayEquals;
30 import static org.junit.Assert.assertEquals;
31 
32 import android.platform.test.annotations.Presubmit;
33 import android.uwb.UwbAddress;
34 
35 import androidx.test.filters.SmallTest;
36 import androidx.test.runner.AndroidJUnit4;
37 
38 import com.google.uwb.support.fira.FiraParams;
39 import com.google.uwb.support.fira.FiraProtocolVersion;
40 
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 
44 import java.util.EnumSet;
45 
46 @SmallTest
47 @RunWith(AndroidJUnit4.class)
48 @Presubmit
49 public class SessionDataTest {
50 
51     @Test
testConversion()52     public void testConversion() {
53         int sessionId = 1010;
54         int subSessionId = 2020;
55         FiraProtocolVersion phyVersion = new FiraProtocolVersion(1, 1);
56         FiraProtocolVersion macVersion = new FiraProtocolVersion(1, 1);
57         int deviceRole = RESPONDER;
58         @FiraParams.RangingRoundUsage int rangingMethod = RANGING_ROUND_USAGE_DS_TWR_DEFERRED_MODE;
59         @FiraParams.StsConfig int stsConfig = STS_CONFIG_DYNAMIC;
60         @FiraParams.MultiNodeMode int multiNodeMode = MULTI_NODE_MODE_ONE_TO_MANY;
61         Byte rangingTimeStruct = 1;
62         @FiraParams.SchedulingMode int scheduledMode = 0;
63         Boolean hoppingMode = true;
64         Boolean blockStriding = false;
65         Boolean uwbInitiationTime = false;
66         Integer channel = 9;
67         @FiraParams.RframeConfig int rFrameConfig = RFRAME_CONFIG_SP3;
68         @FiraParams.CcConstraintLength int ccConstraintLength = CONSTRAINT_LENGTH_7;
69         Integer prfMode = PRF_MODE_BPRF;
70         UwbAddress controleeShortAddress = UwbAddress.fromBytes(new byte[]{0x0A, 0x10});
71         UwbAddress controllerMacAddress = UwbAddress.fromBytes(
72                 new byte[]{0x10, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20});
73 
74         EnumSet<FiraParams.AoaCapabilityFlag> rangingReportConfig = EnumSet.noneOf(
75                 FiraParams.AoaCapabilityFlag.class);
76         rangingReportConfig.add(FiraParams.AoaCapabilityFlag.HAS_AZIMUTH_SUPPORT);
77         rangingReportConfig.add(FiraParams.AoaCapabilityFlag.HAS_FULL_AZIMUTH_SUPPORT);
78         rangingReportConfig.add(FiraParams.AoaCapabilityFlag.HAS_ELEVATION_SUPPORT);
79         rangingReportConfig.add(FiraParams.AoaCapabilityFlag.HAS_FOM_SUPPORT);
80 
81         ConfigurationParams configurationParams = new ConfigurationParams.Builder()
82                 .setPhyVersion(phyVersion)
83                 .setMacVersion(macVersion)
84                 .setDeviceRole(deviceRole)
85                 .setRangingMethod(rangingMethod)
86                 .setStsConfig(stsConfig)
87                 .setMultiNodeMode(multiNodeMode)
88                 .setRangingTimeStruct(rangingTimeStruct)
89                 .setScheduleMode(scheduledMode)
90                 .setHoppingMode(hoppingMode)
91                 .setBlockStriding(blockStriding)
92                 .setUwbInitiationTime(uwbInitiationTime)
93                 .setChannel(channel)
94                 .setRframeConfig(rFrameConfig)
95                 .setCcConstraintLength(ccConstraintLength)
96                 .setPrfMode(prfMode)
97                 .setControleeShortMacAddress(controleeShortAddress)
98                 .setControllerMacAddress(controllerMacAddress)
99                 .setResultReportConfig(rangingReportConfig)
100                 .build();
101 
102         byte[] expectedSessionKeyInfo = new byte[] { (byte) 1, (byte) 2 };
103         byte[] expectedSubSessionKeyInfo = new byte[] { (byte) 1, (byte) 2 };
104         byte[] expectedSusAdditionalParams = new byte[] { (byte) 5, (byte) 6 };
105         SecureRangingInfo secureRangingInfo = new SecureRangingInfo.Builder()
106                 .setUwbSessionKeyInfo(expectedSessionKeyInfo)
107                 .setUwbSubSessionKeyInfo(expectedSubSessionKeyInfo)
108                 .setSusAdditionalParams(expectedSusAdditionalParams)
109                 .build();
110 
111         SessionData sessionData = new SessionData.Builder()
112                 .setSessionId(sessionId)
113                 .setSubSessionId(subSessionId)
114                 .setConfigParams(configurationParams)
115                 .setSecureRangingInfo(secureRangingInfo)
116                 .build();
117 
118         byte[] sessionDataRaw = sessionData.toBytes();
119         SessionData sessionData1 = SessionData.fromBytes(sessionDataRaw);
120 
121         assertThat(sessionData1).isNotNull();
122         assertEquals(sessionData1.mSessionId, sessionId);
123         assertEquals(sessionData1.mSubSessionId.get().intValue(), subSessionId);
124         ConfigurationParams configParams1 = sessionData1.mConfigurationParams.get();
125 
126         assertEquals(configParams1.mPhyVersion, phyVersion);
127         assertEquals(configParams1.mMacVersion, macVersion);
128         assertEquals(configParams1.mDeviceRole.get(), Integer.valueOf(deviceRole));
129         assertEquals((int) configParams1.mRangingMethod.get(), rangingMethod);
130         assertEquals((int) configParams1.mStsConfig.get(), stsConfig);
131         assertEquals((int) configParams1.mMultiNodeMode.get(), multiNodeMode);
132         assertEquals(configParams1.mRangingTimeStruct.get(), rangingTimeStruct);
133         assertEquals((int) configParams1.mScheduleMode.get(), scheduledMode);
134         assertEquals(configParams1.mHoppingMode.get(), hoppingMode);
135         assertEquals(configParams1.mBlockStriding.get(), blockStriding);
136         assertEquals(configParams1.mUwbInitiationTime.get(), uwbInitiationTime);
137         assertEquals(configParams1.mChannel.get(), channel);
138         assertEquals((int) configParams1.mRframeConfig.get(), rFrameConfig);
139         assertEquals((int) configParams1.mCcConstraintLength.get(), ccConstraintLength);
140         assertEquals(configParams1.mPrfMode.get(), prfMode);
141         assertEquals(configParams1.mControleeShortMacAddress.get(), controleeShortAddress);
142         assertEquals(configParams1.mControllerMacAddress.get(), controllerMacAddress);
143         assertEquals(configParams1.mResultReportConfig.get(), rangingReportConfig);
144 
145         SecureRangingInfo actualSecureRangingInfo = sessionData1.mSecureRangingInfo.get();
146         assertArrayEquals(actualSecureRangingInfo.uwbSubSessionKeyInfo.get(),
147                 expectedSessionKeyInfo);
148         assertArrayEquals(actualSecureRangingInfo.uwbSubSessionKeyInfo.get(),
149                 expectedSubSessionKeyInfo);
150         assertArrayEquals(actualSecureRangingInfo.susAdditionalParams.get(),
151                 expectedSusAdditionalParams);
152     }
153 }
154