Merge "Thread: add multi-device test" into main

This commit is contained in:
Yakun Xu 2024-05-17 03:52:14 +00:00 • committed by Gerrit Code Review
commit 45d7e1cffd
4 changed files with 164 additions and 0 deletions

View file

@ -11,5 +11,8 @@
}
],
"postsubmit": [
{
"name": "ThreadNetworkMultiDeviceTests"
}
]
}

View file

@ -0,0 +1,43 @@
//
// Copyright (C) 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package {
default_team: "trendy_team_fwk_thread_network",
default_applicable_licenses: ["Android-Apache-2.0"],
}
python_test_host {
name: "ThreadNetworkMultiDeviceTestCases",
main: "thread_network_multi_device_test.py",
srcs: ["thread_network_multi_device_test.py"],
test_config: "AndroidTest.xml",
libs: [
"mobly",
],
test_options: {
unit_test: false,
tags: ["mobly"],
},
test_suites: [
"mts-tethering",
"general-tests",
],
version: {
py3: {
embedded_launcher: true,
},
},
}

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2024 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration description="Config for Thread Multi-device test cases">
<option name="config-descriptor:metadata" key="component" value="threadnetwork" />
<option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
<option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
<option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
<option name="config-descriptor:metadata" key="mainline-param" value="com.google.android.tethering.apex" />
<object class="com.android.tradefed.testtype.suite.module.DeviceFeatureModuleController"
type="module_controller">
<option name="required-feature" value="android.hardware.thread_network" />
</object>
<object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
<option name="mainline-module-package-name" value="com.google.android.tethering" />
</object>
<!--
Only run tests if the device under test is SDK version 34 (Android 14) or above.
-->
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.Sdk34ModuleController" />
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer" />
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer" />
</device>
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
<option name="mobly-par-file-name" value="ThreadMultiDeviceTestCases" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
<option name="mobly-test-timeout" value="180000" />
</test>
</configuration>

View file

@ -0,0 +1,67 @@
# Copyright (C) 2024 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Lint as: python3
import logging
import time
from mobly import asserts
from mobly import base_test
from mobly import test_runner
from mobly.controllers import android_device
class ThreadNetworkMultiDeviceTest(base_test.BaseTestClass):
def setup_class(self):
self.node_a, self.node_b = self.register_controller(
android_device, min_number=2)
self.node_a.adb.shell([
'ot-ctl', 'factoryreset',
])
self.node_b.adb.shell([
'ot-ctl', 'factoryreset',
])
time.sleep(1)
def ot_ctl(self, node, cmd, expect_done=True):
args = cmd.split(' ')
args = ['ot-ctl'] + args
stdout = node.adb.shell(args).decode('utf-8')
if expect_done:
asserts.assert_in('Done', stdout)
return stdout
def test_b_should_be_able_to_discover_a(self):
self.ot_ctl(self.node_a, 'dataset init new')
self.ot_ctl(self.node_a, 'dataset commit active')
self.ot_ctl(self.node_a, 'ifconfig up')
self.ot_ctl(self.node_a, 'thread start')
self.ot_ctl(self.node_a, 'state leader')
stdout = self.ot_ctl(self.node_a, 'extaddr')
extaddr = stdout.splitlines()[0]
logging.info('node a extaddr: %s', extaddr)
asserts.assert_equal(len(extaddr), 16)
stdout = self.ot_ctl(self.node_b, 'scan')
asserts.assert_in(extaddr, stdout)
logging.info('discovered node a')
if __name__ == '__main__':
# Take test args
if '--' in sys.argv:
index = sys.argv.index('--')
sys.argv = sys.argv[:1] + sys.argv[index + 1:]
test_runner.main()