1 /* 2 * Copyright (C) 2024 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 android.net.nsd 18 19 import android.net.nsd.AdvertisingRequest.NSD_ADVERTISING_UPDATE_ONLY 20 import android.net.nsd.NsdManager.PROTOCOL_DNS_SD 21 import android.os.Build 22 import androidx.test.filters.SmallTest 23 import com.android.testutils.ConnectivityModuleTest 24 import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo 25 import com.android.testutils.DevSdkIgnoreRunner 26 import com.android.testutils.parcelingRoundTrip 27 import java.time.Duration 28 import kotlin.test.assertEquals 29 import kotlin.test.assertNotEquals 30 import kotlin.test.assertNull 31 import org.junit.Test 32 import org.junit.runner.RunWith 33 34 // TODO: move this class to CTS tests when AdvertisingRequest is made public 35 /** Unit tests for {@link AdvertisingRequest}. */ 36 @IgnoreUpTo(Build.VERSION_CODES.S_V2) 37 @RunWith(DevSdkIgnoreRunner::class) 38 @SmallTest 39 @ConnectivityModuleTest 40 class AdvertisingRequestTest { 41 @Test testParcelingIsLossLessnull42 fun testParcelingIsLossLess() { 43 val info = NsdServiceInfo().apply { 44 serviceType = "_ipp._tcp" 45 } 46 val beforeParcel = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD) 47 .setAdvertisingConfig(NSD_ADVERTISING_UPDATE_ONLY) 48 .setTtl(Duration.ofSeconds(30L)) 49 .build() 50 51 val afterParcel = parcelingRoundTrip(beforeParcel) 52 53 assertEquals(beforeParcel.serviceInfo.serviceType, afterParcel.serviceInfo.serviceType) 54 assertEquals(beforeParcel.advertisingConfig, afterParcel.advertisingConfig) 55 } 56 57 @Test testBuilder_setNullTtl_successnull58 fun testBuilder_setNullTtl_success() { 59 val info = NsdServiceInfo().apply { 60 serviceType = "_ipp._tcp" 61 } 62 val request = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD) 63 .setTtl(null) 64 .build() 65 66 assertNull(request.ttl) 67 } 68 69 @Test testBuilder_setPropertiesSuccessnull70 fun testBuilder_setPropertiesSuccess() { 71 val info = NsdServiceInfo().apply { 72 serviceType = "_ipp._tcp" 73 } 74 val request = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD) 75 .setAdvertisingConfig(NSD_ADVERTISING_UPDATE_ONLY) 76 .setTtl(Duration.ofSeconds(100L)) 77 .build() 78 79 assertEquals("_ipp._tcp", request.serviceInfo.serviceType) 80 assertEquals(PROTOCOL_DNS_SD, request.protocolType) 81 assertEquals(NSD_ADVERTISING_UPDATE_ONLY, request.advertisingConfig) 82 assertEquals(Duration.ofSeconds(100L), request.ttl) 83 } 84 85 @Test testEqualitynull86 fun testEquality() { 87 val info = NsdServiceInfo().apply { 88 serviceType = "_ipp._tcp" 89 } 90 val request1 = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD).build() 91 val request2 = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD).build() 92 val request3 = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD) 93 .setAdvertisingConfig(NSD_ADVERTISING_UPDATE_ONLY) 94 .setTtl(Duration.ofSeconds(120L)) 95 .build() 96 val request4 = AdvertisingRequest.Builder(info, PROTOCOL_DNS_SD) 97 .setAdvertisingConfig(NSD_ADVERTISING_UPDATE_ONLY) 98 .setTtl(Duration.ofSeconds(120L)) 99 .build() 100 101 assertEquals(request1, request2) 102 assertEquals(request3, request4) 103 assertNotEquals(request1, request3) 104 assertNotEquals(request2, request4) 105 } 106 } 107