2323 from unittest import main , TestCase
2424import sys
2525
26+ from io import TextIOWrapper
27+
2628from splunklib .searchcommands import Configuration , Option , environment , validators
2729from splunklib .searchcommands .decorators import ConfigurationSetting
2830from splunklib .searchcommands .internals import json_encode_string
3436 # Skip on Python 2.6
3537 pass
3638
39+ from splunklib import six
40+
3741import pytest
3842
3943
@@ -231,8 +235,8 @@ def fix_up(cls, command_class):
231235 (True , False ),
232236 (None , 'anything other than a bool' )),
233237 ('maxinputs' ,
234- (0 , 50000 , sys .maxint ),
235- (None , - 1 , sys .maxint + 1 , 'anything other than an int' )),
238+ (0 , 50000 , sys .maxsize ),
239+ (None , - 1 , sys .maxsize + 1 , 'anything other than an int' )),
236240 ('overrides_timeorder' ,
237241 (True , False ),
238242 (None , 'anything other than a bool' )),
@@ -252,10 +256,11 @@ def fix_up(cls, command_class):
252256 (True , False ),
253257 (None , 'anything other than a bool' )),
254258 ('streaming_preop' ,
255- ('some unicode string' , b'some byte string' ),
259+ (u 'some unicode string' , b'some byte string' ),
256260 (None , 0xdead )),
257261 ('type' ,
258- ('events' , 'reporting' , 'streaming' , b'events' , b'reporting' , b'streaming' ),
262+ # TODO: Do we need to validate byte versions of these strings?
263+ ('events' , 'reporting' , 'streaming' ),
259264 ('eventing' , 0xdead ))):
260265
261266 for value in values :
@@ -348,13 +353,14 @@ def test_option(self):
348353
349354 command = TestSearchCommand ()
350355 options = command .options
351- itervalues = options .itervalues
356+
357+ itervalues = lambda : six .itervalues (options )
352358
353359 options .reset ()
354360 missing = options .get_missing ()
355361 self .assertListEqual (missing , [option .name for option in itervalues () if option .is_required ])
356- self .assertListEqual (presets , [unicode (option ) for option in itervalues () if option .value is not None ])
357- self .assertListEqual (presets , [unicode (option ) for option in itervalues () if unicode (option ) != option .name + '=None' ])
362+ self .assertListEqual (presets , [six . text_type (option ) for option in itervalues () if option .value is not None ])
363+ self .assertListEqual (presets , [six . text_type (option ) for option in itervalues () if six . text_type (option ) != option .name + '=None' ])
358364
359365 test_option_values = {
360366 validators .Boolean : ('0' , 'non-boolean value' ),
@@ -394,38 +400,85 @@ def test_option(self):
394400 else :
395401 self .assertFalse ('Expected ValueError for {}={}, not a pass.' .format (option .name , illegal_value ))
396402
397- expected = (
398- "Option.View(["
399- "(u'foo', u'f'),"
400- "('boolean', u'f'),"
401- "('code', u'foo == \" bar\" '),"
402- "('duration', u'24:59:59'),"
403- "('fieldname', u'some.field_name'),"
404- "('file', u" + unicode (repr (__file__ )) + "),"
405- "('integer', u'100'),"
406- "('logging_configuration', " + repr (environment .logging_configuration ) + "),"
407- "('logging_level', u'WARNING'),"
408- "('map', 'foo'),"
409- "('match', u'123-45-6789'),"
410- "('optionname', u'some_option_name'),"
411- "('record', u'f'),"
412- "('regularexpression', u'\\ \\ s+'),"
413- "('required_boolean', u'f'),"
414- "('required_code', u'foo == \" bar\" '),"
415- "('required_duration', u'24:59:59'),"
416- "('required_fieldname', u'some.field_name'),"
417- "('required_file', u" + unicode (repr (__file__ )) + "),"
418- "('required_integer', u'100'),"
419- "('required_map', 'foo'),"
420- "('required_match', u'123-45-6789'),"
421- "('required_optionname', u'some_option_name'),"
422- "('required_regularexpression', u'\\ \\ s+'),"
423- "('required_set', u'bar'),"
424- "('set', u'bar'),"
425- "('show_configuration', u'f')])" )
426-
427- observed = unicode (repr (command .options ))
428- self .assertEqual (observed , expected )
403+ # expected = (
404+ # "Option.View(["
405+ # "(u'foo', u'f'),"
406+ # "('boolean', u'f'),"
407+ # "('code', u'foo == \"bar\"'),"
408+ # "('duration', u'24:59:59'),"
409+ # "('fieldname', u'some.field_name'),"
410+ # "('file', u" + six.text_type(repr(__file__)) + "),"
411+ # "('integer', u'100'),"
412+ # "('logging_configuration', " + repr(environment.logging_configuration) + "),"
413+ # "('logging_level', u'WARNING'),"
414+ # "('map', 'foo'),"
415+ # "('match', u'123-45-6789'),"
416+ # "('optionname', u'some_option_name'),"
417+ # "('record', u'f'),"
418+ # "('regularexpression', u'\\\\s+'),"
419+ # "('required_boolean', u'f'),"
420+ # "('required_code', u'foo == \"bar\"'),"
421+ # "('required_duration', u'24:59:59'),"
422+ # "('required_fieldname', u'some.field_name'),"
423+ # "('required_file', u" + six.text_type(repr(__file__)) + "),"
424+ # "('required_integer', u'100'),"
425+ # "('required_map', 'foo'),"
426+ # "('required_match', u'123-45-6789'),"
427+ # "('required_optionname', u'some_option_name'),"
428+ # "('required_regularexpression', u'\\\\s+'),"
429+ # "('required_set', u'bar'),"
430+ # "('set', u'bar'),"
431+ # "('show_configuration', u'f')])")
432+
433+ expected = {
434+ u'foo' : False ,
435+ 'boolean' : False ,
436+ 'code' : u'foo == \" bar\" ' ,
437+ 'duration' : 89999 ,
438+ 'fieldname' : u'some.field_name' ,
439+ 'file' : six .text_type (repr (__file__ )),
440+ 'integer' : 100 ,
441+ 'logging_configuration' : environment .logging_configuration ,
442+ 'logging_level' : u'WARNING' ,
443+ 'map' : 'foo' ,
444+ 'match' : u'123-45-6789' ,
445+ 'optionname' : u'some_option_name' ,
446+ 'record' : False ,
447+ 'regularexpression' : u'\\ s+' ,
448+ 'required_boolean' : False ,
449+ 'required_code' : u'foo == \" bar\" ' ,
450+ 'required_duration' : 89999 ,
451+ 'required_fieldname' : u'some.field_name' ,
452+ 'required_file' : six .text_type (repr (__file__ )),
453+ 'required_integer' : 100 ,
454+ 'required_map' : 'foo' ,
455+ 'required_match' : u'123-45-6789' ,
456+ 'required_optionname' : u'some_option_name' ,
457+ 'required_regularexpression' : u'\\ s+' ,
458+ 'required_set' : u'bar' ,
459+ 'set' : u'bar' ,
460+ 'show_configuration' : False ,
461+ }
462+
463+ self .maxDiff = None
464+
465+ tuplewrap = lambda x : x if isinstance (x , tuple ) else (x ,)
466+ invert = lambda x : {v : k for k , v in six .iteritems (x )}
467+
468+ for x in six .itervalues (command .options ):
469+ # isinstance doesn't work for some reason
470+ if type (x .value ).__name__ == 'Code' :
471+ self .assertEqual (expected [x .name ], x .value .source )
472+ elif type (x .validator ).__name__ == 'Map' :
473+ self .assertEqual (expected [x .name ], invert (x .validator .membership )[x .value ])
474+ elif type (x .validator ).__name__ == 'RegularExpression' :
475+ self .assertEqual (expected [x .name ], x .value .pattern )
476+ elif isinstance (x .value , TextIOWrapper ):
477+ self .assertEqual (expected [x .name ], "'%s'" % x .value .name )
478+ elif not isinstance (x .value , (bool ,) + (six .text_type ,) + (six .binary_type ,) + tuplewrap (six .integer_types )):
479+ self .assertEqual (expected [x .name ], repr (x .value ))
480+ else :
481+ self .assertEqual (expected [x .name ], x .value )
429482
430483 expected = (
431484 'foo="f" boolean="f" code="foo == \\ "bar\\ "" duration="24:59:59" fieldname="some.field_name" '
@@ -436,7 +489,7 @@ def test_option(self):
436489 'required_match="123-45-6789" required_optionname="some_option_name" required_regularexpression="\\ \\ s+" '
437490 'required_set="bar" set="bar" show_configuration="f"' )
438491
439- observed = unicode (command .options )
492+ observed = six . text_type (command .options )
440493
441494 self .assertEqual (observed , expected )
442495 return
0 commit comments