• 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
18 
19 import android.net.LocalNetworkConfig
20 import android.net.NetworkCapabilities
21 import android.net.NetworkCapabilities.NET_CAPABILITY_LOCAL_NETWORK
22 import android.net.NetworkCapabilities.TRANSPORT_THREAD
23 import android.net.NetworkRequest
24 import android.net.NetworkScore
25 import android.net.NetworkScore.KEEP_CONNECTED_FOR_TEST
26 import android.net.NetworkScore.KEEP_CONNECTED_LOCAL_NETWORK
27 import android.os.Build
28 import androidx.test.filters.SmallTest
29 import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
30 import com.android.testutils.DevSdkIgnoreRunner
31 import com.android.testutils.RecorderCallback.CallbackEntry.Lost
32 import com.android.testutils.TestableNetworkCallback
33 import org.junit.Test
34 import org.junit.runner.RunWith
35 
36 @DevSdkIgnoreRunner.MonitorThreadLeak
37 @RunWith(DevSdkIgnoreRunner::class)
38 @SmallTest
39 @IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
40 class CSKeepConnectedTest : CSTest() {
41     @Test
testKeepConnectedLocalAgentnull42     fun testKeepConnectedLocalAgent() {
43         deps.setBuildSdk(VERSION_V)
44         val nc = NetworkCapabilities.Builder()
45                 .addTransportType(TRANSPORT_THREAD)
46                 .addCapability(NET_CAPABILITY_LOCAL_NETWORK)
47                 .build()
48         val keepConnectedAgent = Agent(
49             nc = nc,
50             score = FromS(
51                     NetworkScore.Builder()
52                             .setKeepConnectedReason(KEEP_CONNECTED_LOCAL_NETWORK)
53                             .build()
54             ),
55             lnc = FromS(LocalNetworkConfig.Builder().build())
56         )
57         val dontKeepConnectedAgent = Agent(
58             nc = nc,
59             lnc = FromS(LocalNetworkConfig.Builder().build())
60         )
61         doTestKeepConnected(keepConnectedAgent, dontKeepConnectedAgent)
62     }
63 
64     @Test
testKeepConnectedForTestnull65     fun testKeepConnectedForTest() {
66         val keepAgent = Agent(score = FromS(
67                 NetworkScore.Builder()
68                         .setKeepConnectedReason(KEEP_CONNECTED_FOR_TEST)
69                         .build()
70         ))
71         val dontKeepAgent = Agent()
72         doTestKeepConnected(keepAgent, dontKeepAgent)
73     }
74 
doTestKeepConnectednull75     fun doTestKeepConnected(keepAgent: CSAgentWrapper, dontKeepAgent: CSAgentWrapper) {
76         val cb = TestableNetworkCallback()
77         cm.registerNetworkCallback(NetworkRequest.Builder().clearCapabilities().build(), cb)
78 
79         keepAgent.connect()
80         dontKeepAgent.connect()
81 
82         cb.expectAvailableCallbacks(keepAgent.network, validated = false)
83         cb.expectAvailableCallbacks(dontKeepAgent.network, validated = false)
84 
85         // After the nascent timer, the agent without keep connected gets lost.
86         cb.expect<Lost>(dontKeepAgent.network)
87         cb.assertNoCallback()
88     }
89 }
90