1from PyObjCTools.TestSupport import *
2
3from SystemConfiguration import *
4import sys
5
6class TestSCNetworkConfiguration (TestCase):
7
8    def testTypes(self):
9        self.assertTrue(isinstance(SCNetworkInterfaceRef, objc.objc_class))
10        self.assertTrue(isinstance(SCBondStatusRef, objc.objc_class))
11        self.assertTrue(isinstance(SCNetworkProtocolRef, objc.objc_class))
12        self.assertTrue(isinstance(SCNetworkServiceRef, objc.objc_class))
13        self.assertTrue(isinstance(SCNetworkSetRef, objc.objc_class))
14
15        self.assertTrue(SCBondInterfaceRef is SCNetworkInterfaceRef)
16        self.assertTrue(SCVLANInterfaceRef is SCNetworkInterfaceRef)
17
18
19    def testConstants(self):
20        self.assertTrue(isinstance(kSCNetworkInterfaceType6to4, unicode))
21        self.assertTrue(isinstance(kSCNetworkInterfaceTypeBluetooth, unicode))
22        self.assertTrue(isinstance(kSCNetworkInterfaceTypeBond, unicode))
23        self.assertTrue(isinstance(kSCNetworkInterfaceTypeEthernet, unicode))
24        self.assertTrue(isinstance(kSCNetworkInterfaceTypeFireWire, unicode))
25        self.assertTrue(isinstance(kSCNetworkInterfaceTypeIEEE80211, unicode))
26        self.assertTrue(isinstance(kSCNetworkInterfaceTypeL2TP, unicode))
27        self.assertTrue(isinstance(kSCNetworkInterfaceTypeIrDA, unicode))
28        self.assertTrue(isinstance(kSCNetworkInterfaceTypeModem, unicode))
29        self.assertTrue(isinstance(kSCNetworkInterfaceTypePPP, unicode))
30        self.assertTrue(isinstance(kSCNetworkInterfaceTypePPTP, unicode))
31        self.assertTrue(isinstance(kSCNetworkInterfaceTypeSerial, unicode))
32        self.assertTrue(isinstance(kSCNetworkInterfaceTypeVLAN, unicode))
33        self.assertTrue(isinstance(kSCNetworkInterfaceTypeWWAN, unicode))
34        self.assertTrue(isinstance(kSCNetworkInterfaceTypeIPv4, unicode))
35
36        self.assertTrue(isinstance(kSCNetworkInterfaceIPv4, SCNetworkInterfaceRef))
37
38        self.assertEquals(kSCBondStatusOK, 0)
39        self.assertEquals(kSCBondStatusLinkInvalid, 1)
40        self.assertEquals(kSCBondStatusNoPartner, 2)
41        self.assertEquals(kSCBondStatusNotInActiveGroup, 3)
42        self.assertEquals(kSCBondStatusUnknown, 999)
43
44        self.assertTrue(isinstance(kSCBondStatusDeviceAggregationStatus, unicode))
45        self.assertTrue(isinstance(kSCBondStatusDeviceCollecting, unicode))
46        self.assertTrue(isinstance(kSCBondStatusDeviceDistributing, unicode))
47
48        self.assertTrue(isinstance(kSCNetworkProtocolTypeAppleTalk, unicode))
49        self.assertTrue(isinstance(kSCNetworkProtocolTypeDNS, unicode))
50        self.assertTrue(isinstance(kSCNetworkProtocolTypeIPv4, unicode))
51        self.assertTrue(isinstance(kSCNetworkProtocolTypeIPv6, unicode))
52        self.assertTrue(isinstance(kSCNetworkProtocolTypeProxies, unicode))
53        self.assertTrue(isinstance(kSCNetworkProtocolTypeSMB, unicode))
54
55    def testFunctions(self):
56        r = SCNetworkInterfaceGetTypeID()
57        self.assertTrue(isinstance(r, (int, long)))
58
59        r = SCNetworkInterfaceCopyAll()
60        self.assertTrue(isinstance(r, CFArrayRef))
61        self.assertTrue(len(r) > 0)
62
63        for iface in r:
64            if SCNetworkInterfaceGetBSDName(iface).startswith('en'):
65                break
66        r = SCNetworkInterfaceGetSupportedInterfaceTypes(iface)
67        self.assertTrue(isinstance(r, CFArrayRef))
68        self.assertTrue(isinstance(r[0], unicode))
69
70        r = SCNetworkInterfaceGetSupportedProtocolTypes(iface)
71        self.assertTrue(isinstance(r, CFArrayRef))
72        self.assertTrue(isinstance(r[0], unicode))
73
74        r = SCNetworkInterfaceCreateWithInterface(iface, kSCNetworkInterfaceTypeL2TP)
75        self.assertTrue(r is None or isinstance(r, SCNetworkInterfaceRef))
76
77        r = SCNetworkInterfaceGetBSDName(iface)
78        self.assertTrue(isinstance(r, unicode))
79
80        r = SCNetworkInterfaceGetConfiguration(iface)
81        self.assertTrue(r is None or isinstance(r, CFDictionaryRef))
82
83        r = SCNetworkInterfaceGetExtendedConfiguration(iface, "EAPOL")
84        self.assertTrue(r is None or isinstance(r, CFDictionaryRef))
85
86        r = SCNetworkInterfaceGetHardwareAddressString(iface)
87        self.assertTrue(isinstance(r, unicode))
88
89        r = SCNetworkInterfaceGetInterface(iface)
90        self.assertTrue(r is None)
91
92        r = SCNetworkInterfaceGetInterfaceType(iface)
93        self.assertTrue(isinstance(r, unicode))
94
95        r = SCNetworkInterfaceGetLocalizedDisplayName(iface)
96        self.assertTrue(isinstance(r, unicode))
97
98        r = SCNetworkInterfaceSetConfiguration(iface, {})
99        self.assertTrue(r is True or r is False)
100
101        r = SCNetworkInterfaceSetExtendedConfiguration(iface, "OC", {})
102        self.assertTrue(r is True or r is False)
103
104        r, current, active, available = SCNetworkInterfaceCopyMediaOptions(iface,
105                None, None, None, False)
106        self.assertTrue(r is True)
107        self.assertTrue(isinstance(current, CFDictionaryRef))
108        self.assertTrue(isinstance(active, CFDictionaryRef))
109        self.assertTrue(isinstance(available, CFArrayRef))
110
111        r = SCNetworkInterfaceCopyMediaSubTypes(available)
112        self.assertTrue(isinstance(r, CFArrayRef))
113        for item in r:
114            self.assertTrue(isinstance(item, unicode))
115
116        r = SCNetworkInterfaceCopyMediaSubTypeOptions(available, r[1])
117        self.assertTrue(isinstance(r, CFArrayRef))
118
119        if sys.byteorder == 'little':
120            # These tests crash in Rosetta on an intel machine::
121            #
122            #   Unhandled transform (1) for ioctl group = 105 (i), number = 68, length = 32
123            #   Illegal instruction
124
125            # I haven't filed a bug for this yet.
126
127            r, mtu_cur, mtu_min, mtu_max = SCNetworkInterfaceCopyMTU(iface, None, None, None)
128            self.assertTrue(r is True)
129            self.assertTrue(isinstance(mtu_cur, (int, long)))
130            self.assertTrue(isinstance(mtu_min, (int, long)))
131            self.assertTrue(isinstance(mtu_max, (int, long)))
132            r = SCNetworkInterfaceSetMediaOptions(iface,
133                current['MediaSubType'],
134                current['MediaOptions'])
135            self.assertTrue(r is True or r is False)
136
137            r = SCNetworkInterfaceSetMTU(iface, mtu_cur)
138            self.assertTrue(r is True or r is False)
139
140            r = SCNetworkInterfaceForceConfigurationRefresh(iface)
141            self.assertTrue(r is True or r is False)
142
143        prefs = SCPreferencesCreate(None, "SystemConfiguration", None)
144        self.assertTrue(isinstance(prefs, SCPreferencesRef))
145
146        a = SCBondInterfaceCopyAll(prefs)
147        self.assertTrue(isinstance(a, CFArrayRef))
148
149        a = SCBondInterfaceCopyAvailableMemberInterfaces(prefs)
150        self.assertTrue(isinstance(a, CFArrayRef))
151
152        iface = SCBondInterfaceCreate(prefs)
153        self.assertTrue(iface is None or isinstance(iface, SCBondInterfaceRef))
154
155        if iface is not None:
156            a = SCBondInterfaceGetMemberInterfaces(iface)
157            self.assertTrue(isinstance(a, CFArrayRef))
158
159            o = SCBondInterfaceGetOptions(iface)
160            self.assertTrue(o is None or isinstance(o, CFDictionaryRef))
161
162            r = SCBondInterfaceSetMemberInterfaces(iface, SCNetworkInterfaceCopyAll())
163            self.assertTrue(r is True or r is False)
164
165            r = SCBondInterfaceSetLocalizedDisplayName(iface, "pyobjc.bond")
166            self.assertTrue(r is True or r is False)
167
168
169            r = SCBondInterfaceSetOptions(iface, {})
170            self.assertTrue(r is True or r is False)
171
172            st = SCBondInterfaceCopyStatus(iface)
173            self.assertTrue(st is None or isinstance(st, SCBondStatusRef))
174
175            a = SCBondStatusGetMemberInterfaces(iface)
176            self.assertTrue(a is None or isinstance(a, CFArrayRef))
177
178            st = SCBondStatusGetInterfaceStatus(iface, None)
179            self.assertTrue(a is None or isinstance(a, CFDictionaryRef))
180
181            r = SCBondInterfaceRemove(iface)
182            self.assertTrue(r is True)
183
184
185        r = SCBondStatusGetTypeID()
186        self.assertTrue(isinstance(r, (int, long)))
187
188        a = SCVLANInterfaceCopyAll(prefs)
189        self.assertTrue(isinstance(a, CFArrayRef))
190
191        a = SCVLANInterfaceCopyAvailablePhysicalInterfaces()
192        self.assertTrue(isinstance(a, CFArrayRef))
193
194        iface = SCVLANInterfaceCreate(prefs, a[0], 99)
195        self.assertTrue(isinstance(iface, SCVLANInterfaceRef))
196
197        r = SCVLANInterfaceGetPhysicalInterface(iface)
198        self.assertEqual(r, a[0])
199
200        t = SCVLANInterfaceGetTag(iface)
201        self.assertEquals(t, 99)
202
203        t = SCVLANInterfaceGetOptions(iface)
204        self.assertTrue(t is None or isinstance(t, CFDictionaryRef))
205
206        r = SCVLANInterfaceSetPhysicalInterfaceAndTag(iface, a[0], 42)
207        self.assertIs(r, True)
208
209        r = SCVLANInterfaceSetLocalizedDisplayName(iface, "octest")
210        self.assertIs(r, True)
211
212        r = SCVLANInterfaceSetOptions(iface, {"name": "foo"})
213        self.assertIs(r, True)
214
215        t = SCVLANInterfaceGetOptions(iface)
216        self.assertTrue(isinstance(t, CFDictionaryRef))
217
218        r = SCVLANInterfaceRemove(iface)
219        self.assertTrue(r is True)
220
221        r = SCNetworkProtocolGetTypeID()
222        self.assertTrue(isinstance(r, (int, long)))
223
224        r = SCNetworkServiceGetTypeID()
225        self.assertTrue(isinstance(r, (int, long)))
226
227        r = SCNetworkSetGetTypeID()
228        self.assertTrue(isinstance(r, (int, long)))
229
230        r = SCNetworkServiceCopyAll(prefs)
231        self.assertIsInstance(r, CFArrayRef)
232
233        serv = r[0]
234        self.assertIsInstance(serv, SCNetworkServiceRef)
235        prot = SCNetworkServiceCopyProtocol(serv, kSCNetworkProtocolTypeIPv4)
236        self.assertIsInstance(prot, SCNetworkProtocolRef)
237
238        conf = SCNetworkProtocolGetConfiguration(prot)
239        self.assertIsInstance(conf, CFDictionaryRef)
240
241        enabled = SCNetworkProtocolGetEnabled(prot)
242        self.assertIsInstance(enabled, bool)
243
244        pr = SCNetworkProtocolGetProtocolType(prot)
245        self.assertIsInstance(pr, unicode)
246
247        v = SCNetworkProtocolSetConfiguration(prot, conf)
248        self.assertIsInstance(v, bool)
249
250        v = SCNetworkProtocolSetEnabled(prot, enabled)
251        self.assertIsInstance(v, bool)
252
253        v = SCNetworkServiceAddProtocolType(serv, pr)
254        self.assertIsInstance(v, bool)
255
256
257        v = SCNetworkServiceCopyProtocols(serv)
258        self.assertIsInstance(v, CFArrayRef)
259        if v:
260            self.assertIsInstance(v[0], SCNetworkProtocolRef)
261
262
263        iface = SCNetworkServiceGetInterface(serv)
264        self.assertIsInstance(iface, SCNetworkInterfaceRef)
265
266        v = SCNetworkServiceCreate(prefs, iface)
267        self.assertIsInstance(v, SCNetworkServiceRef)
268
269        v = s2 = SCNetworkServiceCopy(prefs, SCNetworkServiceGetServiceID(serv))
270        self.assertIsInstance(v, SCNetworkServiceRef)
271
272        v = SCNetworkServiceGetEnabled(serv)
273        self.assertIsInstance(v, bool)
274
275        v = SCNetworkServiceGetName(serv)
276        self.assertIsInstance(v, unicode)
277
278        self.assertResultIsCFRetained(SCNetworkServiceCopyProtocol)
279
280        v = SCNetworkServiceRemoveProtocolType(s2, kSCNetworkProtocolTypeIPv4)
281        self.assertIsInstance(v, bool)
282
283        v = SCNetworkServiceRemove(s2)
284        self.assertIsInstance(v, bool)
285
286        v = SCNetworkServiceSetEnabled(serv, SCNetworkServiceGetEnabled(serv))
287        self.assertIsInstance(v, bool)
288
289        v = SCNetworkServiceSetName(serv, SCNetworkServiceGetName(serv))
290        self.assertIsInstance(v, bool)
291
292        set = SCNetworkSetCopyCurrent(prefs)
293        self.assertIsInstance(set, SCNetworkSetRef)
294
295        s2 = SCNetworkServiceCopy(prefs, SCNetworkServiceGetServiceID(serv))
296
297        v = SCNetworkSetAddService(set,  s2)
298        self.assertIsInstance(v, bool)
299
300
301        v  = SCNetworkSetContainsInterface(set, iface)
302        self.assertIsInstance(v, bool)
303
304        v = SCNetworkSetCopyAll(prefs)
305        self.assertIsInstance(v, CFArrayRef)
306
307        v = SCNetworkSetCopyServices(set)
308        self.assertIsInstance(v, CFArrayRef)
309
310        v = SCNetworkSetCreate(prefs)
311        self.assertIsInstance(v, SCNetworkSetRef)
312
313        v = SCNetworkSetCopy(prefs, SCNetworkSetGetSetID(set))
314        self.assertIsInstance(v, SCNetworkSetRef)
315
316        v = SCNetworkSetRemove(v)
317        self.assertIsInstance(v, bool)
318
319        v = SCNetworkSetGetName(set)
320        self.assertIsInstance(v, unicode)
321
322        v = SCNetworkSetGetSetID(set)
323        self.assertIsInstance(v, unicode)
324
325        v = SCNetworkSetGetServiceOrder(set)
326        self.assertIsInstance(v, CFArrayRef)
327
328        v = SCNetworkSetSetName(set, SCNetworkSetGetName(set))
329        self.assertIsInstance(v, bool)
330
331        v = SCNetworkSetSetServiceOrder(set, SCNetworkSetGetServiceOrder(set))
332        self.assertIsInstance(v, bool)
333
334        v = SCNetworkSetSetCurrent(SCNetworkSetCopyCurrent(prefs))
335        self.assertIsInstance(v, bool)
336
337
338    @min_os_level('10.5')
339    def testFunctions10_5(self):
340        prefs = SCPreferencesCreate(None, "SystemConfiguration", None)
341        self.assertTrue(isinstance(prefs, SCPreferencesRef))
342
343        r = SCNetworkServiceCopyAll(prefs)
344        self.assertIsInstance(r, CFArrayRef)
345        serv = SCNetworkServiceCopy(prefs, SCNetworkServiceGetServiceID(r[0]))
346
347        v = SCNetworkServiceEstablishDefaultConfiguration(serv)
348        self.assertIsInstance(v, bool)
349
350
351
352if __name__ == "__main__":
353    main()
354