• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2#
3# Copyright (C) 2016 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18import logging
19
20from vts.runners.host import asserts
21from vts.runners.host import base_test
22from vts.runners.host import test_runner
23from vts.utils.python.controllers import android_device
24from vts.runners.host import const
25
26
27class LibcTest(base_test.BaseTestClass):
28    """A basic test of the libc API."""
29
30    def setUpClass(self):
31        self.dut = self.registerController(android_device)[0]
32        self.dut.lib.InitSharedLib(target_type="bionic_libc",
33                                   target_basepaths=["/system/lib64"],
34                                   target_version=1.0,
35                                   target_filename="libc.so",
36                                   bits=64,
37                                   handler_name="libc",
38                                   target_package="lib.ndk.bionic")
39
40    def testOpenCloseLocalSocketStream(self):
41        """Tests open and close socket operations for local communication.
42
43        Uses local addresses and a streaming socket.
44        """
45        result = self.dut.lib.libc.socket(self.dut.lib.libc.PF_UNIX,
46                                          self.dut.lib.libc.SOCK_STREAM, 0)
47        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
48                               "libc.socket: could not create socket.")
49
50        result = self.dut.lib.libc.close(
51            result.return_type.scalar_value.int32_t)
52        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
53                               "libc.close: unable to close socket.")
54
55    def testOpenCloseLocalSocketDatagram(self):
56        """Tests open and close socket operations for local communication.
57
58        Uses local addresses and a datagram socket.
59        """
60        result = self.dut.lib.libc.socket(self.dut.lib.libc.PF_UNIX,
61                                          self.dut.lib.libc.SOCK_DGRAM, 0)
62        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
63                               "libc.socket: could not create socket.")
64
65        result = self.dut.lib.libc.close(
66            result.return_type.scalar_value.int32_t)
67        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
68                               "libc.close: unable to close socket.")
69
70    def testOpenCloseLocalSocketRaw(self):
71        """Tests open and close socket operations for local communication.
72
73        Uses local addresses and a raw socket.
74        """
75        result = self.dut.lib.libc.socket(self.dut.lib.libc.PF_UNIX,
76                                          self.dut.lib.libc.SOCK_RAW, 0)
77        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
78                               "libc.socket: could not create socket.")
79
80        result = self.dut.lib.libc.close(
81            result.return_type.scalar_value.int32_t)
82        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
83                               "libc.close: unable to close socket.")
84
85    def testOpenCloseLocalSocketSequential(self):
86        """Tests open and close socket operations for local communication.
87
88        Uses local addresses and a sequential socket.
89        """
90        result = self.dut.lib.libc.socket(self.dut.lib.libc.PF_UNIX,
91                                          self.dut.lib.libc.SOCK_SEQPACKET, 0)
92        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
93                               "libc.socket: could not create socket.")
94
95        result = self.dut.lib.libc.close(
96            result.return_type.scalar_value.int32_t)
97        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
98                               "libc.close: unable to close socket.")
99
100    def testOpenCloseINETSocketStream(self):
101        """Tests open and close socket operations for INET communication.
102
103        Uses IP addresses and a streaming socket.
104        """
105        result = self.dut.lib.libc.socket(self.dut.lib.libc.PF_INET,
106                                          self.dut.lib.libc.SOCK_STREAM, 0)
107        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
108                               "libc.socket: could not create socket.")
109
110        result = self.dut.lib.libc.close(
111            result.return_type.scalar_value.int32_t)
112        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
113                               "libc.close: unable to close socket.")
114
115    def testOpenCloseINETSocketDatagram(self):
116        """Tests open and close socket operations for INET communication.
117
118        Uses IP addresses and a datagram socket.
119        """
120        result = self.dut.lib.libc.socket(self.dut.lib.libc.PF_INET,
121                                          self.dut.lib.libc.SOCK_DGRAM, 0)
122        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
123                               "libc.socket: could not create socket.")
124
125        result = self.dut.lib.libc.close(
126            result.return_type.scalar_value.int32_t)
127        asserts.assertNotEqual(result.return_type.scalar_value.int32_t, -1,
128                               "libc.close: unable to close socket.")
129
130if __name__ == "__main__":
131    test_runner.main()
132