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