Skip to content

Commit 11348b1

Browse files
authored
Re-enable some tests (#1493)
* Re-enable test_sax_stdlib * Re-enable test_plistlib_stdlib * Rename signal to _signal * Unblock ssl * Use python.org in test_stdmodules
1 parent 58f36fb commit 11348b1

10 files changed

Lines changed: 116 additions & 41 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
#if FEATURE_PROCESS
2323

24-
[assembly: PythonModule("signal", typeof(IronPython.Modules.PythonSignal))]
24+
[assembly: PythonModule("_signal", typeof(IronPython.Modules.PythonSignal))]
2525
namespace IronPython.Modules {
2626
public static partial class PythonSignal {
2727
public const string __doc__ = @"This module provides mechanisms to use signal handlers in Python.

Src/IronPython.Modules/_ssl.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ public class _SSLContext {
119119

120120
public _SSLContext(CodeContext context, int protocol) {
121121
if (protocol != PROTOCOL_SSLv2 && protocol != PROTOCOL_SSLv23 && protocol != PROTOCOL_SSLv3 &&
122-
protocol != PROTOCOL_TLSv1 && protocol != PROTOCOL_TLSv1_1 && protocol != PROTOCOL_TLSv1_2) {
122+
protocol != PROTOCOL_TLSv1 && protocol != PROTOCOL_TLSv1_1 && protocol != PROTOCOL_TLSv1_2 &&
123+
protocol != PROTOCOL_TLS_CLIENT && protocol != PROTOCOL_TLS_SERVER) {
123124
throw PythonOps.ValueError("invalid protocol version");
124125
}
125126

@@ -130,8 +131,8 @@ public _SSLContext(CodeContext context, int protocol) {
130131
if (protocol != PROTOCOL_SSLv3)
131132
options |= OP_NO_SSLv3;
132133

133-
verify_mode = SSL_VERIFY_NONE;
134-
check_hostname = false;
134+
verify_mode = protocol == PROTOCOL_TLS_CLIENT ? CERT_REQUIRED : SSL_VERIFY_NONE;
135+
check_hostname = protocol == PROTOCOL_TLS_CLIENT;
135136
}
136137

137138
public void set_ciphers(CodeContext context, string ciphers) {
@@ -722,6 +723,17 @@ public void write_eof() {
722723

723724
#nullable restore
724725

726+
[PythonType]
727+
public class SSLSession {
728+
public object has_ticket { get; }
729+
public object id { get; }
730+
public object ticket_lifetime_hint { get; }
731+
public object time { get; }
732+
public object timeout { get; }
733+
734+
private SSLSession() { }
735+
}
736+
725737
public static object txt2obj(CodeContext context, string txt, bool name = false) {
726738
Asn1Object obj = null;
727739
if (name) {
@@ -1195,16 +1207,19 @@ private static Exception ErrorDecoding(CodeContext context, params object[] args
11951207
public const int PROTOCOL_TLSv1 = 3;
11961208
public const int PROTOCOL_TLSv1_1 = 4;
11971209
public const int PROTOCOL_TLSv1_2 = 5;
1210+
public const int PROTOCOL_TLS_CLIENT = 16;
1211+
public const int PROTOCOL_TLS_SERVER = 17;
11981212

11991213
public const int OP_ALL = unchecked((int)0x800003FF);
1200-
public const int OP_CIPHER_SERVER_PREFERENCE = 0x400000;
1201-
public const int OP_SINGLE_DH_USE = 0x100000;
1202-
public const int OP_SINGLE_ECDH_USE = 0x80000;
1214+
public const int OP_CIPHER_SERVER_PREFERENCE = 0; // 0x400000;
1215+
public const int OP_SINGLE_DH_USE = 0; // 0x100000;
1216+
public const int OP_SINGLE_ECDH_USE = 0; // 0x80000;
12031217
public const int OP_NO_SSLv2 = 0x01000000;
12041218
public const int OP_NO_SSLv3 = 0x02000000;
12051219
public const int OP_NO_TLSv1 = 0x04000000;
12061220
public const int OP_NO_TLSv1_1 = 0x10000000;
12071221
public const int OP_NO_TLSv1_2 = 0x08000000;
1222+
public const int OP_NO_TLSv1_3 = 0; // 0x20000000;
12081223

12091224
internal const int OP_NO_COMPRESSION = 0x20000;
12101225
internal const int OP_NO_ALL = OP_NO_SSLv2 | OP_NO_SSLv3 | OP_NO_TLSv1 | OP_NO_TLSv1_1 | OP_NO_TLSv1_2 | OP_NO_COMPRESSION;
@@ -1230,6 +1245,7 @@ private static Exception ErrorDecoding(CodeContext context, params object[] args
12301245
public const bool HAS_NPN = false;
12311246
public const bool HAS_ALPN = false;
12321247
public const bool HAS_TLS_UNIQUE = false;
1248+
public const bool HAS_TLSv1_3 = false;
12331249

12341250
private const int SSL_VERIFY_NONE = 0x00;
12351251
private const int SSL_VERIFY_PEER = 0x01;

Src/IronPython/Modules/_io.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3121,7 +3121,14 @@ private static int GetInt(object i) {
31213121
}
31223122

31233123
private static int GetInt(object i, int defaultValue) {
3124-
return GetInt(i, defaultValue, null, null);
3124+
if (i is null) {
3125+
return defaultValue;
3126+
}
3127+
if (Converter.TryConvertToIndex(i, out int index, throwOverflowError: true)) {
3128+
return index;
3129+
}
3130+
3131+
throw PythonOps.TypeError("integer argument expected, got '{0}'", PythonOps.GetPythonTypeName(i));
31253132
}
31263133

31273134
private static int GetInt(object i, string msg, params object[] args) {
@@ -3139,14 +3146,6 @@ private static int GetInt(object i, string msg, params object[] args) {
31393146
throw PythonOps.TypeError(msg, args);
31403147
}
31413148

3142-
private static int GetInt(object i, int defaultValue, string msg, params object[] args) {
3143-
if (i == null) {
3144-
return defaultValue;
3145-
}
3146-
3147-
return GetInt(i, msg, args);
3148-
}
3149-
31503149
private static bool TryGetInt(object i, out int value) {
31513150
if (i == null) {
31523151
value = int.MinValue;

Src/IronPython/Modules/_io/BytesIO.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,15 @@ private Bytes readline(int size = -1) {
192192
}
193193

194194
public Bytes readline(object size) {
195-
if (size == null) {
195+
_checkClosed();
196+
if (size is null) {
196197
return readline(-1);
197198
}
199+
if (Converter.TryConvertToIndex(size, out int index, throwOverflowError: true)) {
200+
return readline(index);
201+
}
198202

199-
_checkClosed();
200-
201-
throw PythonOps.TypeError("integer argument expected, got '{0}'", PythonOps.GetPythonTypeName(size));
203+
throw PythonOps.TypeError("argument should be integer or None, not '{0}'", PythonOps.GetPythonTypeName(size));
202204
}
203205

204206
[Documentation("readlines([size]) -> list of bytes objects, each a line from the file.\n\n"

Src/IronPythonTest/Cases/CPythonCasesManifest.ini

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,9 @@ Ignore=true
733733
Ignore=true
734734
Reason=AttributeError: 'module' object has no attribute '_mercurial'
735735

736+
[CPython.test_plistlib] # IronPython.test_plistlib_stdlib
737+
Ignore=true
738+
736739
[CPython.test_poll]
737740
RunCondition=$(IS_POSIX)
738741
Ignore=true
@@ -1222,9 +1225,6 @@ Ignore=true # __annotations__
12221225
[CPython.test_ordered_dict]
12231226
Ignore=true # multiple failures
12241227

1225-
[CPython.test_plistlib]
1226-
Ignore=true # StackOverflowException
1227-
12281228
[CPython.test_print]
12291229
Ignore=true # 7 failures
12301230

Src/IronPythonTest/Cases/IronPythonCasesManifest.ini

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,15 +181,9 @@ Ignore=true
181181

182182
# -------------------- The following worked in 3.4 ---------------------------
183183

184-
[IronPython.modules.system_related.test_signal]
185-
Ignore=true # test_doc
186-
187184
[IronPython.test_imp]
188185
Ignore=true # 1 failure
189186

190-
[IronPython.test_sax_stdlib]
191-
Ignore=true # multiple failures
192-
193187
[IronPython.test_ssl_stdlib]
194188
Ignore=true # unittest.case.SkipTest: Cannot import name SSLSession
195189

Tests/modules/system_related/test_signal.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
will have to do.
99
'''
1010

11-
import signal
11+
import _signal as signal
1212
import sys
1313

1414
from iptest import IronPythonTestCase, is_cli, run_test
@@ -53,10 +53,7 @@ def test_module_constants(self):
5353
self.assertEqual(signal.SIG_IGN, 1)
5454

5555
def test_doc(self):
56-
if sys.version_info >= (3,5):
57-
self.assertIsNone(signal.__doc__)
58-
else:
59-
self.assertTrue("get the signal action for a given signal" in signal.__doc__)
56+
self.assertTrue("get the signal action for a given signal" in signal.__doc__)
6057
self.assertTrue("The default handler for SIGINT installed by Python" in signal.default_int_handler.__doc__)
6158
self.assertTrue("Return the current action for the given signal" in signal.getsignal.__doc__)
6259
self.assertTrue("Set the action for the given signal" in signal.signal.__doc__)

Tests/test_plistlib_stdlib.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Licensed to the .NET Foundation under one or more agreements.
2+
# The .NET Foundation licenses this file to you under the Apache 2.0 License.
3+
# See the LICENSE file in the project root for more information.
4+
5+
##
6+
## Run selected tests from test_plistlib from StdLib
7+
##
8+
9+
import unittest
10+
import sys
11+
12+
from iptest import run_test
13+
14+
import test.test_plistlib
15+
16+
def load_tests(loader, standard_tests, pattern):
17+
if sys.implementation.name == 'ironpython':
18+
suite = unittest.TestSuite()
19+
suite.addTest(test.test_plistlib.MiscTestCase('test__all__'))
20+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_cycles'))
21+
#suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_deep_nesting')) # StackOverflowException
22+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_dump_duplicates'))
23+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_identity'))
24+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_invalid_binary'))
25+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_large_timestamp'))
26+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_load_int'))
27+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_load_singletons'))
28+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_nonstandard_refs_size'))
29+
suite.addTest(test.test_plistlib.TestBinaryPlistlib('test_unsupported'))
30+
suite.addTest(test.test_plistlib.TestPlistlib('test_appleformatting'))
31+
suite.addTest(test.test_plistlib.TestPlistlib('test_appleformattingfromliteral'))
32+
suite.addTest(test.test_plistlib.TestPlistlib('test_bytearray'))
33+
suite.addTest(test.test_plistlib.TestPlistlib('test_bytes'))
34+
suite.addTest(test.test_plistlib.TestPlistlib('test_bytesio'))
35+
suite.addTest(test.test_plistlib.TestPlistlib('test_controlcharacters'))
36+
suite.addTest(test.test_plistlib.TestPlistlib('test_create'))
37+
suite.addTest(test.test_plistlib.TestPlistlib('test_dict_members'))
38+
suite.addTest(test.test_plistlib.TestPlistlib('test_indentation_array'))
39+
suite.addTest(test.test_plistlib.TestPlistlib('test_indentation_dict'))
40+
suite.addTest(test.test_plistlib.TestPlistlib('test_indentation_dict_mix'))
41+
suite.addTest(test.test_plistlib.TestPlistlib('test_int'))
42+
suite.addTest(test.test_plistlib.TestPlistlib('test_invalid_type'))
43+
suite.addTest(test.test_plistlib.TestPlistlib('test_invalidarray'))
44+
suite.addTest(test.test_plistlib.TestPlistlib('test_invaliddict'))
45+
suite.addTest(test.test_plistlib.TestPlistlib('test_invalidinteger'))
46+
suite.addTest(test.test_plistlib.TestPlistlib('test_invalidreal'))
47+
suite.addTest(test.test_plistlib.TestPlistlib('test_io'))
48+
suite.addTest(test.test_plistlib.TestPlistlib('test_keys_no_string'))
49+
suite.addTest(test.test_plistlib.TestPlistlib('test_keysort'))
50+
suite.addTest(test.test_plistlib.TestPlistlib('test_keysort_bytesio'))
51+
suite.addTest(test.test_plistlib.TestPlistlib('test_list_members'))
52+
suite.addTest(test.test_plistlib.TestPlistlib('test_lone_surrogates'))
53+
suite.addTest(test.test_plistlib.TestPlistlib('test_non_bmp_characters'))
54+
suite.addTest(test.test_plistlib.TestPlistlib('test_nondictroot'))
55+
suite.addTest(test.test_plistlib.TestPlistlib('test_skipkeys'))
56+
suite.addTest(test.test_plistlib.TestPlistlib('test_tuple_members'))
57+
suite.addTest(test.test_plistlib.TestPlistlib('test_xml_encodings'))
58+
suite.addTest(unittest.expectedFailure(test.test_plistlib.TestPlistlib('test_xml_plist_with_entity_decl'))) # https://github.com/IronLanguages/ironpython2/issues/464
59+
suite.addTest(test.test_plistlib.TestPlistlibDeprecated('test_bytes_deprecated'))
60+
suite.addTest(test.test_plistlib.TestPlistlibDeprecated('test_dataobject_deprecated'))
61+
suite.addTest(test.test_plistlib.TestPlistlibDeprecated('test_io_deprecated'))
62+
return suite
63+
64+
else:
65+
return loader.loadTestsFromModule(test.test_plistlib, pattern)
66+
67+
run_test(__name__)

Tests/test_sax_stdlib.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ def load_tests(loader, standard_tests, pattern):
5151
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_binary_file_nonascii'))
5252
suite.addTest(unittest.expectedFailure(test.test_sax.ExpatReaderTest('test_expat_dtdhandler'))) # AssertionError
5353
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_entityresolver_default'))
54-
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_entityresolver_enabled'))
54+
suite.addTest(unittest.expectedFailure(test.test_sax.ExpatReaderTest('test_expat_entityresolver_enabled'))) # AssertionError
5555
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_external_dtd_default'))
56-
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_external_dtd_enabled'))
56+
suite.addTest(unittest.expectedFailure(test.test_sax.ExpatReaderTest('test_expat_external_dtd_enabled'))) # AssertionError
5757
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_incremental'))
5858
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_incremental_reset'))
5959
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_inpsource_byte_stream'))
60-
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_inpsource_character_stream'))
60+
suite.addTest(unittest.expectedFailure(test.test_sax.ExpatReaderTest('test_expat_inpsource_character_stream'))) # AssertionError
6161
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_inpsource_filename'))
6262
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_inpsource_sysid'))
6363
suite.addTest(test.test_sax.ExpatReaderTest('test_expat_inpsource_sysid_nonascii'))
@@ -69,10 +69,10 @@ def load_tests(loader, standard_tests, pattern):
6969
suite.addTest(unittest.expectedFailure(test.test_sax.ExpatReaderTest('test_expat_text_file'))) # AssertionError
7070
suite.addTest(test.test_sax.MakeParserTest('test_make_parser2'))
7171
suite.addTest(unittest.expectedFailure(test.test_sax.ParseTest('test_parseString_bytes'))) # UnicodeEncodeError
72-
suite.addTest(test.test_sax.ParseTest('test_parseString_text'))
72+
suite.addTest(unittest.expectedFailure(test.test_sax.ParseTest('test_parseString_text'))) # UnicodeEncodeError
7373
suite.addTest(unittest.expectedFailure(test.test_sax.ParseTest('test_parse_InputSource'))) # AttributeError: 'xmlparser' object has no attribute 'ErrorColumnNumber'
7474
suite.addTest(unittest.expectedFailure(test.test_sax.ParseTest('test_parse_bytes'))) # UnicodeEncodeError
75-
suite.addTest(test.test_sax.ParseTest('test_parse_close_source'))
75+
suite.addTest(unittest.expectedFailure(test.test_sax.ParseTest('test_parse_close_source'))) # AttributeError: 'xmlparser' object has no attribute 'ErrorColumnNumber'
7676
suite.addTest(unittest.expectedFailure(test.test_sax.ParseTest('test_parse_text'))) # UnicodeEncodeError
7777
suite.addTest(test.test_sax.PrepareInputSourceTest('test_binary_file'))
7878
suite.addTest(test.test_sax.PrepareInputSourceTest('test_byte_stream'))

Tests/test_stdmodules.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_cp10825(self):
3838

3939
for i in range(5):
4040
try:
41-
temp_url = urllib.request.urlopen("http://www.microsoft.com")
41+
temp_url = urllib.request.urlopen("https://www.python.org")
4242
break
4343
except Exception as e:
4444
err = e
@@ -48,7 +48,7 @@ def test_cp10825(self):
4848
if temp_url is None: raise err
4949

5050
try:
51-
self.assertTrue(temp_url.url.startswith("http://www.microsoft.com"))
51+
self.assertTrue(temp_url.url.startswith("https://www.python.org"))
5252
finally:
5353
temp_url.close()
5454

0 commit comments

Comments
 (0)