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