def test_comment_missing_everything(self): """If a frame is missing everything, do not throw an error.""" report = self._create_report() parsed_dump = self._create_dump( threads=[self._create_thread(frames=[ {}, ])]) bugzilla_submit_url(report, parsed_dump, 0, 'Core')
def test_comment_missing_everything(self): """If a frame is missing everything, do not throw an error.""" report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ {}, ]) ]) bugzilla_submit_url(report, parsed_dump, 0, 'Core')
def test_kwargs(self): url = bugzilla_submit_url(foo='?&"', numbers=["one", "two"]) ok_(url.startswith("https://bugzilla.mozilla.org/enter_bug.cgi?")) ok_("format=__default__" in url) ok_("foo=%3F%26%22" in url) ok_("numbers=one" in url) ok_("numbers=two" in url) url = bugzilla_submit_url(format="different") ok_("format=__default__" not in url) ok_("format=different" in url)
def test_kwargs(self): url = bugzilla_submit_url(foo='?&"', numbers=['one', 'two']) ok_(url.startswith('https://bugzilla.mozilla.org/enter_bug.cgi?')) ok_('format=__default__' in url) ok_('foo=%3F%26%22' in url) ok_('numbers=one' in url) ok_('numbers=two' in url) url = bugzilla_submit_url(format='different') ok_('format=__default__' not in url) ok_('format=different' in url)
def test_kwargs(self): url = bugzilla_submit_url(foo='?&"', numbers=['one', 'two']) ok_(url.startswith('https://bugzilla.mozilla.org/enter_bug.cgi?')) ok_('format=__default__' in url) ok_('foo=%3F%26%22' in url) ok_('numbers=one' in url) ok_('numbers=two' in url) url = bugzilla_submit_url(format='different') ok_('format=__default__' not in url) ok_('format=different' in url)
def test_corrected_os_version_name(self): report = self._create_report( os_name='Windoooosws', os_pretty_version='Windows 10', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windows 10'] # os_name if the os_pretty_version is there, but empty report = self._create_report( os_name='Windoooosws', os_pretty_version='', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windoooosws'] # 'OS X <Number>' becomes 'Mac OS X' report = self._create_report( os_name='OS X', os_pretty_version='OS X 11.1', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Mac OS X'] # 'Windows 8.1' becomes 'Windows 8' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows 8.1', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windows 8'] # 'Windows Unknown' becomes plain 'Windows' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows Unknown', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windows']
def test_truncate_short_desc(self): report = self._create_report(os_name="Windows", signature="x" * 1000) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert len(qs["short_desc"][0]) == 255 assert qs["short_desc"][0].endswith("...")
def test_truncate_short_desc(self): report = self._create_report(os_name='Windows', signature='x' * 1000) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert len(qs['short_desc'][0]) == 255 assert qs['short_desc'][0].endswith('...')
def test_comment_no_threads(self): """If parsed_dump has no threads available, do not output any frames. """ report = self._create_report() url = bugzilla_submit_url(report, {}, 0, "Core") assert quote_plus("frames of crashing thread:") not in url
def test_comment_no_threads(self): """If parsed_dump has no threads available, do not output any frames. """ report = self._create_report() url = bugzilla_submit_url(report, {}, 0, 'Core') assert quote_plus('frames of crashing thread:') not in url
def test_truncate_short_desc(self): report = self._create_report( os_name='Windows', signature='x' * 1000 ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(len(qs['short_desc'][0]), 255) ok_(qs['short_desc'][0].endswith('...'))
def test_truncate_short_desc(self): report = self._create_report( os_name='Windows', signature='x' * 1000 ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert len(qs['short_desc'][0]) == 255 assert qs['short_desc'][0].endswith('...')
def test_with_os_name_is_null(self): """Some processed crashes haev a os_name but it's null. FennecAndroid crashes for example.""" report = self._create_report( os_name=None, signature="java.lang.IllegalStateException") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert "op_sys" not in qs
def test_corrected_os_version_name(self): report = self._create_report( os_name='Windoooosws', os_pretty_version='Windows 10', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windows 10']) # os_name if the os_pretty_version is there, but empty report = self._create_report( os_name='Windoooosws', os_pretty_version='', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windoooosws']) # 'OS X <Number>' becomes 'Mac OS X' report = self._create_report( os_name='OS X', os_pretty_version='OS X 11.1', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Mac OS X']) # 'Windows 8.1' becomes 'Windows 8' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows 8.1', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windows 8']) # 'Windows Unknown' becomes plain 'Windows' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows Unknown', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windows'])
def test_corrected_os_version_name(self): report = self._create_report( os_name='Windoooosws', os_pretty_version='Windows 10', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windows 10']) # os_name if the os_pretty_version is there, but empty report = self._create_report( os_name='Windoooosws', os_pretty_version='', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windoooosws']) # 'OS X <Number>' becomes 'Mac OS X' report = self._create_report( os_name='OS X', os_pretty_version='OS X 11.1', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Mac OS X']) # 'Windows 8.1' becomes 'Windows 8' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows 8.1', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windows 8']) # 'Windows Unknown' becomes plain 'Windows' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows Unknown', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(qs['op_sys'], ['Windows'])
def test_corrected_os_version_name(self): report = self._create_report( os_name='Windoooosws', os_pretty_version='Windows 10', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windows 10'] # os_name if the os_pretty_version is there, but empty report = self._create_report( os_name='Windoooosws', os_pretty_version='', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windoooosws'] # 'OS X <Number>' becomes 'Mac OS X' report = self._create_report( os_name='OS X', os_pretty_version='OS X 11.1', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Mac OS X'] # 'Windows 8.1' becomes 'Windows 8' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows 8.1', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windows 8'] # 'Windows Unknown' becomes plain 'Windows' report = self._create_report( os_name='Windows NT', os_pretty_version='Windows Unknown', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') qs = self._extract_query_string(url) assert qs['op_sys'] == ['Windows']
def test_with_os_name_is_null(self): """Some processed crashes haev a os_name but it's null. FennecAndroid crashes for example.""" report = self._create_report( os_name=None, signature='java.lang.IllegalStateException', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) ok_('op_sys' not in qs)
def test_with_os_name_is_null(self): """Some processed crashes haev a os_name but it's null. FennecAndroid crashes for example.""" report = self._create_report( os_name=None, signature='java.lang.IllegalStateException', ) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) ok_('op_sys' not in qs)
def test_comment_more_than_ten_frames(self): """If the crashing thread has more than ten frames, only display the top ten. """ report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[self._create_frame(frame=frame) for frame in range(10)] + [ self._create_frame(frame=10, module='do_not_include') ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('do_not_include') not in url
def test_comment_more_than_ten_frames(self): """If the crashing thread has more than ten frames, only display the top ten. """ report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame(frame=frame) for frame in range(10) ] + [self._create_frame(frame=10, module="do_not_include")]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, "Core") assert quote_plus("do_not_include") not in url
def test_corrected_os_version_name(self): report = self._create_report(os_name="Windoooosws", os_pretty_version="Windows 10") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert qs["op_sys"] == ["Windows 10"] # os_name if the os_pretty_version is there, but empty report = self._create_report(os_name="Windoooosws", os_pretty_version="") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert qs["op_sys"] == ["Windoooosws"] # 'OS X <Number>' becomes 'Mac OS X' report = self._create_report(os_name="OS X", os_pretty_version="OS X 11.1") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert qs["op_sys"] == ["Mac OS X"] # 'Windows 8.1' becomes 'Windows 8' report = self._create_report(os_name="Windows NT", os_pretty_version="Windows 8.1") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert qs["op_sys"] == ["Windows 8"] # 'Windows Unknown' becomes plain 'Windows' report = self._create_report(os_name="Windows NT", os_pretty_version="Windows Unknown") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Core") qs = self._extract_query_string(url) assert qs["op_sys"] == ["Windows"]
def test_basic_url(self): report = self._create_report(os_name='Windows') url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Plugin') assert url.startswith('https://bugzilla.mozilla.org/enter_bug.cgi?') qs = self._extract_query_string(url) assert '00000000-0000-0000-0000-000000000000' in qs['comment'][0] assert qs['cf_crash_signature'] == ['[@ $&#;deadbeef]'] assert qs['format'] == ['__default__'] assert qs['product'] == ['Plugin'] assert qs['rep_platform'] == ['x86'] assert qs['short_desc'] == ['Crash in $&#;deadbeef'] assert qs['keywords'] == ['crash'] assert qs['op_sys'] == ['Windows'] assert qs['bug_severity'] == ['critical']
def test_with_unicode_signature(self): """The jinja helper bugzilla_submit_url should work when the signature contains non-ascii characters. Based on an actual error in production: https://bugzilla.mozilla.org/show_bug.cgi?id=1383269 """ report = self._create_report( os_name=None, signature=u'YouTube\u2122 No Buffer (Stop Auto-playing)', ) url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Core') # Most important that it should work assert 'Crash+in+%5B%40+YouTube%E2%84%A2+No+Buffer+%28Stop+Auto-playing%29%5D' in url
def test_with_unicode_signature(self): """The jinja helper bugzilla_submit_url should work when the signature contains non-ascii characters. Based on an actual error in production: https://bugzilla.mozilla.org/show_bug.cgi?id=1383269 """ report = self._create_report( os_name=None, signature=u'YouTube\u2122 No Buffer (Stop Auto-playing)', ) url = bugzilla_submit_url(report, 'Core') # Most important that it should work ok_('Crash+in+YouTube%E2%84%A2+No+Buffer+%28Stop+Auto-playing' in url)
def test_basic_url(self): report = self._create_report(os_name='Windows') url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, 'Plugin') assert url.startswith('https://bugzilla.mozilla.org/enter_bug.cgi?') qs = self._extract_query_string(url) assert '00000000-0000-0000-0000-000000000000' in qs['comment'][0] assert qs['cf_crash_signature'] == ['[@ $&#;deadbeef]'] assert qs['format'] == ['__default__'] assert qs['product'] == ['Plugin'] assert qs['rep_platform'] == ['x86'] assert qs['short_desc'] == ['Crash in [@ $&#;deadbeef]'] assert qs['keywords'] == ['crash'] assert qs['op_sys'] == ['Windows'] assert qs['bug_severity'] == ['critical']
def test_basic_url(self): report = self._create_report(os_name='Windows') url = bugzilla_submit_url(report, 'Plugin') ok_(url.startswith('https://bugzilla.mozilla.org/enter_bug.cgi?')) qs = self._extract_query_string(url) ok_('00000000-0000-0000-0000-000000000000' in qs['comment'][0]) eq_(qs['cf_crash_signature'], ['[@ $&#;deadbeef]']) eq_(qs['format'], ['__default__']) eq_(qs['product'], ['Plugin']) eq_(qs['rep_platform'], ['x86']) eq_(qs['short_desc'], ['Crash in $&#;deadbeef']) eq_(qs['keywords'], ['crash']) eq_(qs['op_sys'], ['Windows']) eq_(qs['bug_severity'], ['critical'])
def test_basic_url(self): report = self._create_report(os_name="Windows") url = bugzilla_submit_url(report, self.EMPTY_PARSED_DUMP, self.CRASHING_THREAD, "Plugin") assert url.startswith("https://bugzilla.mozilla.org/enter_bug.cgi?") qs = self._extract_query_string(url) assert "00000000-0000-0000-0000-000000000000" in qs["comment"][0] assert qs["cf_crash_signature"] == ["[@ $&#;deadbeef]"] assert qs["format"] == ["__default__"] assert qs["product"] == ["Plugin"] assert qs["rep_platform"] == ["x86"] assert qs["short_desc"] == ["Crash in [@ $&#;deadbeef]"] assert qs["keywords"] == ["crash"] assert qs["op_sys"] == ["Windows"] assert qs["bug_type"] == ["defect"]
def test_comment_missing_file(self): """If a frame is missing file info, do not include it.""" report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module="test_module", signature="foo::bar(char* x, int y)", file=None, line=None, ) ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, "Core") assert quote_plus("0 test_module foo::bar \n") in url
def test_comment_missing_line(self): """If a frame is missing a line number, do not include it.""" report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module='test_module', signature='foo::bar(char* x, int y)', file='foo.cpp', line=None, ), ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('0 test_module foo::bar foo.cpp\n') in url
def test_comment_missing_file(self): """If a frame is missing file info, do not include it.""" report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module='test_module', signature='foo::bar(char* x, int y)', file=None, line=None, ), ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('0 test_module foo::bar \n') in url
def test_comment(self): report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(), # Empty thread 0 self._create_thread(frames=[ self._create_frame(frame=0), self._create_frame(frame=1), self._create_frame(frame=2), ]), ]) url = bugzilla_submit_url(report, parsed_dump, 1, 'Core') assert quote_plus('bp-' + report['uuid']) in url assert quote_plus('Top 3 frames of crashing thread:') in url frame1 = parsed_dump['threads'][1]['frames'][1] assert quote_plus('1 {module} {signature} {file}:{line}'.format(**frame1)) in url
def test_comment(self): report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(), # Empty thread 0 self._create_thread(frames=[ self._create_frame(frame=0), self._create_frame(frame=1), self._create_frame(frame=2), ]), ]) url = bugzilla_submit_url(report, parsed_dump, 1, 'Core') assert quote_plus('bp-' + report['uuid']) in url assert quote_plus('Top 3 frames of crashing thread:') in url frame1 = parsed_dump['threads'][1]['frames'][1] assert quote_plus('1 {module} {signature} {file}:{line}'.format(**frame1)) in url
def test_comment_java_stack_trace(self): """If there's a java stack trace, use that instead""" report = self._create_report() report['java_stack_trace'] = 'java.lang.NullPointerException: list == null' parsed_dump = self._create_dump(threads=[ self._create_thread(), # Empty thread 0 self._create_thread(frames=[ self._create_frame(frame=0), self._create_frame(frame=1), self._create_frame(frame=2), ]), ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('Java stack trace:') in url assert quote_plus('java.lang.NullPointerException: list == null') in url # Make sure it didn't also add the crashing frames assert quote_plus('frames of crashing thread:') not in url
def test_comment(self): report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(), # Empty thread 0 self._create_thread(frames=[ self._create_frame(frame=0), self._create_frame(frame=1), self._create_frame(frame=2), ]), ]) url = bugzilla_submit_url(report, parsed_dump, 1, "Core") assert quote_plus("bp-" + report["uuid"]) in url assert quote_plus("Top 3 frames of crashing thread:") in url frame1 = parsed_dump["threads"][1]["frames"][1] assert (quote_plus( "1 {module} {signature} {file}:{line}".format(**frame1)) in url)
def test_comment_java_stack_trace(self): """If there's a java stack trace, use that instead""" report = self._create_report() report['java_stack_trace'] = 'java.lang.NullPointerException: list == null' parsed_dump = self._create_dump(threads=[ self._create_thread(), # Empty thread 0 self._create_thread(frames=[ self._create_frame(frame=0), self._create_frame(frame=1), self._create_frame(frame=2), ]), ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('Java stack trace:') in url assert quote_plus('java.lang.NullPointerException: list == null') in url # Make sure it didn't also add the crashing frames assert quote_plus('frames of crashing thread:') not in url
def test_comment_no_html_escaping(self): """If a frame contains <, >, &, or ", they should not be HTML escaped in the comment body. """ report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module="&test_module", signature="foo<char>::bar(char* x, int y)", file='"foo".cpp', line=7, ) ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, "Core") assert quote_plus('0 &test_module foo<char>::bar "foo".cpp:7') in url
def test_comment_remove_arguments(self): """If a frame signature includes function arguments, remove them. """ report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module="test_module", signature="foo::bar(char* x, int y)", file="foo.cpp", line=7, ) ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, "Core") assert quote_plus("0 test_module foo::bar foo.cpp:7") in url
def test_comment_remove_arguments(self): """If a frame signature includes function arguments, remove them. """ report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module='test_module', signature='foo::bar(char* x, int y)', file='foo.cpp', line=7, ), ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('0 test_module foo::bar foo.cpp:7') in url
def test_comment_no_html_escaping(self): """If a frame contains <, >, &, or ", they should not be HTML escaped in the comment body. """ report = self._create_report() parsed_dump = self._create_dump(threads=[ self._create_thread(frames=[ self._create_frame( frame=0, module='&test_module', signature='foo<char>::bar(char* x, int y)', file='"foo".cpp', line=7, ), ]) ]) url = bugzilla_submit_url(report, parsed_dump, 0, 'Core') assert quote_plus('0 &test_module foo<char>::bar "foo".cpp:7') in url
def test_truncate_certain_keys(self): url = bugzilla_submit_url(short_desc="x" * 1000) ok_("x" * 1000 not in url) ok_("x" * (255 - 3) + "..." in url)
def test_truncate_certain_keys(self): url = bugzilla_submit_url(short_desc='x' * 1000) ok_('x' * 1000 not in url) ok_('x' * (255 - 3) + '...' in url)
def test_basic_url(self): url = bugzilla_submit_url() eq_(url, "https://bugzilla.mozilla.org/enter_bug.cgi?format=__default__")
def test_basic_url(self): url = bugzilla_submit_url() eq_(url, 'https://bugzilla.mozilla.org/enter_bug.cgi?format=__default__')
def test_truncate_certain_keys(self): url = bugzilla_submit_url(short_desc='x' * 1000) ok_('x' * 1000 not in url) ok_('x' * (255 - 3) + '...' in url)
def test_truncate_short_desc(self): report = self._create_report(os_name='Windows', signature='x' * 1000) url = bugzilla_submit_url(report, 'Core') qs = self._extract_query_string(url) eq_(len(qs['short_desc'][0]), 255) ok_(qs['short_desc'][0].endswith('...'))